259 lines
8.1 KiB
Plaintext
259 lines
8.1 KiB
Plaintext
@startuml
|
||
hide circle
|
||
skinparam linetype ortho
|
||
left to right direction
|
||
|
||
entity "order" as order {
|
||
id : bigint <<PK>> <<NN>> autoincrement
|
||
// Идентификатор записи
|
||
--
|
||
t_shop_order_id : bigint <<NN>>
|
||
// Идентификатор заказа в T-Shop
|
||
|
||
created_at : timestamptz <<NN>>
|
||
// Дата и время оформления заказа в формате ISO 8601 UTC
|
||
|
||
delivery_total : numeric(10,2)
|
||
// Стоимость доставки
|
||
|
||
expiry_date : timestamptz
|
||
// Дата отмены заказа при бездействии (ISO 8601 UTC)
|
||
|
||
items_total : numeric(10,2)
|
||
// Платеж покупателя
|
||
|
||
comment : varchar(256)
|
||
// Комментарий к заказу
|
||
|
||
status : enum('CANCELLED','PROCESSING','DELIVERY','PICKUP','DELIVERED') <<NN>>
|
||
// Статус заказа
|
||
|
||
substatus : enum('STARTED','READY_TO_SHIP','SHOP_FAILED','USER_CHANGED_MIND')
|
||
// Этап обработки заказа
|
||
|
||
updated_at : timestamptz <<NN>>
|
||
// Дата и время последнего обновления заказа в формате ISO 8601 с указанием смещения относительно UTC.
|
||
}
|
||
|
||
entity "sync_log" as sync_log {
|
||
id : bigint <<PK>> <<NN>> autoincrement
|
||
// Идентификатор записи
|
||
--
|
||
last_synced_updated_at : timestamptz <<NN>>
|
||
// Время последней синхронизации
|
||
|
||
retry_policy_attempts : smallint
|
||
// Количество попыток retry policy
|
||
|
||
last_error : json
|
||
// JSON запроса и ответа при котором произошла ошибка
|
||
|
||
current_page_token : varchar(100)
|
||
// Идентификатор следующей страницы результатов
|
||
|
||
status : enum('success','error') <<NN>>
|
||
// Статус синхронизации (success, error)
|
||
}
|
||
|
||
entity "order_status_history" as order_status_history {
|
||
id : bigint <<PK>> <<NN>> autoincrement
|
||
// Идентификатор записи
|
||
--
|
||
order_id : bigint <<NN>>
|
||
// Идентификатор заказа
|
||
|
||
status : enum('CANCELLED','PROCESSING','DELIVERY','PICKUP','DELIVERED') <<NN>>
|
||
// Статус заказа
|
||
|
||
substatus : enum('STARTED','READY_TO_SHIP','SHOP_FAILED','USER_CHANGED_MIND')
|
||
// Этап обработки заказа
|
||
|
||
created_at : timestamptz <<NN>>
|
||
// Время создания записи
|
||
}
|
||
|
||
entity "outlet" as outlet {
|
||
id : bigint <<PK>> <<NN>> autoincrement
|
||
// Идентификатор записи
|
||
--
|
||
outlet_code : uuid
|
||
// Идентификатор пункта самовывоза
|
||
|
||
outlet_name : varchar(100)
|
||
// Наименование пункта самовывоза
|
||
===
|
||
// В последствии добавим и другие атрибуты если нужно будет синкать ПВЗ. На данный момент этот функционал в фидах
|
||
}
|
||
|
||
entity "order_buyer" as buyer {
|
||
id : bigint <<PK>> <<NN>> autoincrement
|
||
// Идентификатор записи
|
||
--
|
||
t_shop_order_id : bigint
|
||
// Идентификатор заказа тиньков
|
||
|
||
phone : varchar(20) <<NN>>
|
||
// Номер телефона покупателя
|
||
|
||
email : varchar(255) <<NN>>
|
||
// Почта для отправки чека
|
||
|
||
first_name : varchar(100) <<NN>>
|
||
// Имя покупателя
|
||
|
||
last_name : varchar(100) <<NN>>
|
||
// Фамилия покупателя
|
||
}
|
||
|
||
entity "order_delivery" as delivery {
|
||
id : bigint <<PK>> <<NN>> autoincrement
|
||
// Идентификатор записи
|
||
--
|
||
t_shop_order_id : bigint
|
||
// Идентификатор заказа тиньков
|
||
|
||
lift_price : numeric(10,2)
|
||
// Стоимость подъема на этаж (руб)
|
||
|
||
lift_type : order_lift_type
|
||
// Тип подъема: NOT_NEEDED, MANUAL, ELEVATOR, CARGO_ELEVATOR, FREE, UNKNOWN
|
||
|
||
outlet_code : varchar(100)
|
||
// Идентификатор пункта самовывоза магазина
|
||
|
||
outlet_storage_limit_date : timestamptz
|
||
// Дата хранения в пункте выдачи (только для статуса PICKUP)
|
||
|
||
service_name : varchar(255)
|
||
// Наименование службы доставки
|
||
|
||
type : order_delivery_type
|
||
// Способ доставки: DELIVERY, PICKUP, UNKNOWN
|
||
|
||
real_delivery_date : timestamptz
|
||
// Фактическая дата доставки (ISO 8601 UTC)
|
||
}
|
||
|
||
entity "order_delivery_address" as address {
|
||
id : bigint <<PK>> <<NN>> autoincrement
|
||
// Идентификатор записи
|
||
--
|
||
t_shop_order_id : bigint
|
||
// Идентификатор заказа тиньков
|
||
|
||
full_address : text <<NN>>
|
||
// Полный адрес доставки (очень полный, до уровня квартиры если есть)
|
||
|
||
apartment : varchar(20)
|
||
// Квартира или офис
|
||
|
||
block : varchar(20)
|
||
// Корпус или строение
|
||
|
||
city : varchar(100) <<NN>>
|
||
// Город или населенный пункт
|
||
|
||
country : varchar(100) <<NN>>
|
||
// Страна
|
||
|
||
district : varchar(100)
|
||
// Район
|
||
|
||
entrance : varchar(10)
|
||
// Подъезд
|
||
|
||
entryphone : varchar(20)
|
||
// Код домофона
|
||
|
||
postcode : varchar(20)
|
||
// Почтовый индекс (для почтовой доставки)
|
||
|
||
floor : varchar(5)
|
||
// Этаж
|
||
|
||
house : varchar(10)
|
||
// Дом или владение
|
||
|
||
phone : varchar(20) <<NN>>
|
||
// Телефон получателя заказа
|
||
|
||
street : varchar(255)
|
||
// Улица
|
||
|
||
recipient : varchar(255) <<NN>>
|
||
// ФИО получателя заказа
|
||
|
||
latitude : double precision <<NN>>
|
||
// Широта адреса доставки
|
||
|
||
longitude : double precision <<NN>>
|
||
// Долгота адреса доставки
|
||
}
|
||
|
||
entity "order_item" as item {
|
||
id : bigint <<PK>> <<NN>> autoincrement
|
||
// Идентификатор записи
|
||
--
|
||
t_shop_item_id : bigint <<NN>>
|
||
// Идентификатор товара в заказе (позволяет идентифицировать товар в заказе)
|
||
|
||
order_id : bigint <<NN>>
|
||
// Ссылка на заказ
|
||
|
||
count : integer <<NN>>
|
||
// Количество единиц товара
|
||
|
||
product_id : varchar(255) <<NN>>
|
||
// SKU (наш внутренний)
|
||
|
||
offer_name : varchar(500)
|
||
// Название товара
|
||
|
||
price : numeric(10,2) <<NN>>
|
||
// Цена товара в рублях
|
||
}
|
||
|
||
' === СВЯЗИ ===
|
||
order ||--|| buyer : "1:1\n(обязательно)"
|
||
order ||--o| delivery : "1:1\n(необязательно)"
|
||
delivery ||--|| address : "1:1\n(необязательно)"
|
||
order ||--|{ item : "1:many\n(обязательно)"
|
||
outlet ||--o{ delivery : "1:many\n(необязательно)"
|
||
order ||--o{ order_status_history : "1:many\n(обязательно)"
|
||
|
||
note left of order
|
||
<u><b>order_status_type</b></u>
|
||
<b>Статус</b> <b>Описание</b>
|
||
CANCELLED Отменен
|
||
PROCESSING В обработке
|
||
DELIVERY В службе доставки
|
||
PICKUP В пункте самовывоза
|
||
DELIVERED Получен покупателем
|
||
===
|
||
<u><b>order_substatus_type</b></u>
|
||
<b>Этап</b> <b>Статус</b> <b>Описание</b>
|
||
STARTED (статус-> PROCESSING Заказ подтвержден, можно обрабатывать
|
||
READY_TO_SHIP (статус-> PROCESSING Заказ собран, готов к отправке
|
||
SHOP_FAILED (статус-> CANCELLED Магазин не может выполнить
|
||
USER_CHANGED_MIND (статус-> CANCELLED Покупатель отменил
|
||
endnote
|
||
|
||
note top of delivery
|
||
<u><b>order_lift_type</b></u>
|
||
<b>Тип Описание</b>
|
||
NOT_NEEDED Не требуется
|
||
MANUAL Ручной
|
||
ELEVATOR Лифт
|
||
CARGO_ELEVATOR Грузовой лифт
|
||
FREE Любой (при бесплатном подъеме)
|
||
UNKNOWN Неизвестный тип
|
||
===
|
||
<u><b>order_delivery_type</b></u>
|
||
<b>Тип Описание</b>
|
||
DELIVERY Курьерская доставка
|
||
PICKUP Самовывоз
|
||
UNKNOWN Неизвестный тип
|
||
endnote
|
||
|
||
|
||
@enduml |