Перейти к основному содержимому

База данных

Подключение

  • СУБД: PostgreSQL 15
  • БД: dm_shop
  • Пользователь: dm_shop_user
  • Порт (локально): 45432
  • Миграции: Liquibase (changesets в back/src/main/resources/db/changelog/changes/)
  • Hibernate DDL: validate — схема создаётся только через Liquibase

Схема таблиц

products

Основная таблица каталога. Товары поступают через синхронизацию с mphone, цены могут быть переопределены вручную.

КолонкаТипОписание
idbigserial PK
namevarchar NOT NULLНазвание товара
descriptiontextОписание
pricenumeric(19,2) NOT NULLЦена закупки/склада
site_pricenumeric(19,2)Цена для витрины (переопределяет price)
activeboolean NOT NULLВиден на витрине
stockintegerОстаток на складе
external_idvarchar(50) UNIQUEID в системе mphone
external_category_idintegerFK → categories.external_id
external_brand_idintegerFK → brands.external_id
external_country_idvarchar(50)Страна производителя (внешний ID)
created_attimestamp NOT NULL
updated_attimestamp NOT NULL

categories

Иерархия категорий. Поддерживает дерево через parent_id.

КолонкаТипОписание
idbigserial PK
external_idinteger UNIQUEID в mphone
namevarchar NOT NULLНазвание
enabledbooleanПоказывается ли в навигации
show_in_homepagebooleanБлок на главной странице
show_in_treebooleanВ дереве категорий
parent_idbigint FK→categories.idРодительская категория
image_idbigint FK→images.idИконка категории

brands

КолонкаТипОписание
idbigserial PK
external_idinteger UNIQUEID в mphone
namevarchar NOT NULLНазвание бренда
enabledbooleanАктивен

orders

КолонкаТипОписание
idbigserial PK
statusvarchar(50) NOT NULLNEW, PROCESSING, SENT, ERROR, CANCELLED, COMPLETED, ARCHIVED
total_amountnumeric(19,2) NOT NULLСумма заказа
delivery_costnumeric(19,2) NOT NULLСтоимость доставки
external_idvarchar(50)ID в mphone после передачи
client_idbigintFK → clients.id (внешний клиент)
user_idbigintFK → users.id (зарегистрированный пользователь)
customer_namevarcharФИО покупателя
customer_phonevarchar(50)Телефон
customer_emailvarcharEmail
delivery_methodvarchar(50)Способ доставки
delivery_addresstextАдрес доставки
commenttextКомментарий покупателя
admin_commenttextКомментарий менеджера
created_attimestamp NOT NULL
updated_attimestamp NOT NULL

order_items

КолонкаТипОписание
idbigserial PK
order_idbigint FK→orders.id NOT NULL
product_idbigintСсылка на товар (nullable — товар мог быть удалён)
product_namevarchar NOT NULLСнимок названия на момент заказа
quantityinteger NOT NULLКоличество
price_at_ordernumeric(19,2) NOT NULLЦена на момент заказа
line_totalnumeric(19,2) NOT NULLquantity × price_at_order

users

КолонкаТипОписание
idbigserial PK
namevarchar NOT NULLИмя
emailvarchar UNIQUE NOT NULL
passwordvarchar NOT NULLBCrypt хеш
phonevarcharТелефон
rolevarchar NOT NULLUSER, MANAGER, ADMIN
created_attimestamp NOT NULL
updated_attimestamp NOT NULL

images

КолонкаТипОписание
idbigserial PK
s3_keyvarchar NOT NULLКлюч объекта в S3
file_namevarcharОригинальное имя файла
content_typevarcharMIME-тип
file_sizebigintРазмер в байтах
uploaded_bybigint FK→users.idКто загрузил
created_attimestamp NOT NULL

product_images

Связь N:M товаров и изображений с порядком отображения.

КолонкаТипОписание
idbigserial PK
product_idbigint FK→products.id NOT NULL
image_idbigint FK→images.id NOT NULL
display_orderinteger NOT NULLПорядок отображения

reviews

КолонкаТипОписание
idbigserial PK
author_namevarchar NOT NULLИмя автора
author_rolevarcharДолжность / описание
review_texttextТекст отзыва
ratingintegerОценка (1–5)
image_idbigint FK→images.id NULLФото автора
review_urlvarcharСсылка на источник отзыва
enabledbooleanОтображается на витрине
display_orderintegerПорядок отображения
created_attimestamp NOT NULL
updated_attimestamp NOT NULL
КолонкаТипОписание
banner_blocks.idbigserial PK
banner_blocks.namevarcharВнутреннее название блока
banner_blocks.layoutvarcharТип компоновки
banner_blocks.enabledboolean
banner_blocks.display_orderinteger
banner_slots.block_idbigint FK→banner_blocks.id
banner_slots.positionvarcharПозиция в блоке
banner_slots.content_typevarcharIMAGE, VIDEO, и т.д.
banner_slots.contenttextURL или данные контента
banner_slots.enabledboolean

feature_items

КолонкаТипОписание
idbigserial PK
icon_urlvarcharURL иконки
titlevarchar NOT NULLЗаголовок
descriptiontextОписание
enabledboolean
display_orderinteger

app_config

Хранилище runtime-конфигурации сайта в формате ключ-значение.

КолонкаТипОписание
idbigserial PK
keyvarchar UNIQUE NOT NULLУникальный ключ
typevarchar NOT NULLSTRING, NUMBER, BOOLEAN, JSON
valuetextТекущее значение
default_valuetextЗначение по умолчанию
is_publicbooleanДоступно через /api/v1/config/public
categoryvarcharГруппировка в UI
descriptiontextОписание параметра

contact_requests

КолонкаТипОписание
idbigserial PK
namevarchar NOT NULLИмя клиента
phonevarcharТелефон
emailvarcharEmail
messagetextСообщение
statusvarchar NOT NULLNEW, REVIEWED, CONTACTED
notestextЗаметки менеджера
created_attimestamp NOT NULL
updated_attimestamp NOT NULL

sync_state

КолонкаТипОписание
idbigserial PK
sync_typevarchar NOT NULLCATEGORIES, BRANDS, PRODUCTS
last_sync_timetimestampПоследняя успешная инкрементальная синхронизация
last_full_sync_timetimestampПоследняя полная синхронизация

product_attributes

КолонкаТипОписание
idbigserial PK
product_idbigint FK→products.id NOT NULL
namevarchar NOT NULLНазвание атрибута
valuetextЗначение
sourcevarchar NOT NULLEXTERNAL (из mphone) / MANUAL

category_regex_filters

Правила фильтрации товаров по атрибутам при привязке к категории.

КолонкаТипОписание
idbigserial PK
category_idbigint FK→categories.id NOT NULL
attribute_namevarchar NOT NULLИмя атрибута товара
patternvarchar NOT NULLРегулярное выражение

clients

Внешние клиенты из системы mphone.

КолонкаТипОписание
idbigserial PK
external_idvarchar UNIQUE NOT NULLID в mphone
namevarcharИмя клиента

stock

КолонкаТипОписание
idbigserial PK
product_idbigint FK→products.id NOT NULL
quantityinteger NOT NULLТекущий остаток

Миграции Liquibase

Changesets добавляются в back/src/main/resources/db/changelog/changes/ и регистрируются в db.changelog-master.xml.

Текущий диапазон: changesets 001034.

Правило: никогда не изменять существующий changeset — только добавлять новые.

Конфигурация Hibernate: ddl-auto: validate — Hibernate только проверяет соответствие сущностей схеме. Если changeset не применён, приложение не запустится с ошибкой валидации.