Files
plantUML/oms/t-shop/er-diagram.puml
2026-02-14 01:03:15 +03:00

259 lines
8.1 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
@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