сделан шаг 2
This commit is contained in:
@@ -0,0 +1,160 @@
|
||||
# Шаг 2. База данных и связи
|
||||
|
||||
## Что сделано
|
||||
|
||||
Создана SQL-схема `database/schema.sql` для MariaDB/MySQL и стартовые данные `database/seed.sql`.
|
||||
|
||||
Также создана локальная страница установки `public/install.php`.
|
||||
|
||||
Она применяет:
|
||||
|
||||
- `database/schema.sql`;
|
||||
- `database/seed.sql`.
|
||||
|
||||
Важно: установка пересоздает таблицы, поэтому использовать ее только на старте или в локальной разработке.
|
||||
|
||||
Схема покрывает основные части проекта:
|
||||
|
||||
- администраторы;
|
||||
- категории и подкатегории;
|
||||
- товары;
|
||||
- фасовки и цены;
|
||||
- изображения товаров;
|
||||
- поисковые термины;
|
||||
- промокоды и их привязки;
|
||||
- расчеты доставки;
|
||||
- заказы и позиции заказов;
|
||||
- история статусов заказа;
|
||||
- вход клиента по email-коду;
|
||||
- отзывы;
|
||||
- акции;
|
||||
- популярные товары;
|
||||
- настройки сайта;
|
||||
- праздничные/нерабочие дни.
|
||||
|
||||
## Главная логика связей
|
||||
|
||||
### Категории
|
||||
|
||||
Таблица `categories` поддерживает вложенность через `parent_id`.
|
||||
|
||||
Это позволяет хранить:
|
||||
|
||||
- главные категории;
|
||||
- подкатегории;
|
||||
- меню каталога;
|
||||
- SEO-текст для страниц категорий.
|
||||
|
||||
### Товары
|
||||
|
||||
Таблица `products` хранит основную карточку товара:
|
||||
|
||||
- название;
|
||||
- slug;
|
||||
- категорию;
|
||||
- описание;
|
||||
- основное фото;
|
||||
- базовую единицу;
|
||||
- режим отображения цены;
|
||||
- публикацию;
|
||||
- доступность;
|
||||
- признаки "новинка", "хит", "акция".
|
||||
|
||||
### Фасовки
|
||||
|
||||
Таблица `product_variants` хранит отдельные фасовки товара.
|
||||
|
||||
Именно фасовка попадает в корзину, а не просто товар.
|
||||
|
||||
Пример:
|
||||
|
||||
- товар: горбуша неразделанная;
|
||||
- фасовка: пласт 10 кг;
|
||||
- `package_quantity`: 10;
|
||||
- `step_quantity`: 10;
|
||||
- `price_per_unit`: 600;
|
||||
- `package_price`: 6000.
|
||||
|
||||
Так можно корректно сделать плюс/минус кратно фасовке.
|
||||
|
||||
### Заказы
|
||||
|
||||
Таблица `orders` хранит заказ целиком:
|
||||
|
||||
- имя;
|
||||
- телефон;
|
||||
- email;
|
||||
- тип получения;
|
||||
- адрес;
|
||||
- суммы;
|
||||
- промокод;
|
||||
- расчет доставки;
|
||||
- статус.
|
||||
|
||||
Таблица `order_items` хранит снимок каждой позиции заказа.
|
||||
|
||||
Снимок нужен, чтобы старые заказы не менялись при изменении цены или названия товара в каталоге.
|
||||
|
||||
### Промокоды
|
||||
|
||||
Таблица `promocodes` хранит сам промокод.
|
||||
|
||||
Таблица `promocode_targets` хранит ограничения:
|
||||
|
||||
- на категорию;
|
||||
- на товар.
|
||||
|
||||
Если промокод действует на весь заказ, targets не нужны.
|
||||
|
||||
### Доставка
|
||||
|
||||
Таблица `delivery_calculations` хранит результат расчета:
|
||||
|
||||
- тип доставки;
|
||||
- адрес;
|
||||
- сумма заказа;
|
||||
- расстояние от МКАД;
|
||||
- порог бесплатной доставки;
|
||||
- стоимость доставки;
|
||||
- стоимость подъема;
|
||||
- объяснение расчета.
|
||||
|
||||
Это нужно, чтобы в заказе сохранялся расчет, который видел клиент.
|
||||
|
||||
### История заказов по email
|
||||
|
||||
Таблица `customer_login_codes` хранит одноразовые коды входа по email.
|
||||
|
||||
SMS не используются.
|
||||
|
||||
### Настройки
|
||||
|
||||
Таблица `site_settings` хранит настройки сайта:
|
||||
|
||||
- телефон;
|
||||
- email администратора;
|
||||
- правила доставки;
|
||||
- температуры камер;
|
||||
- тексты и числовые параметры.
|
||||
|
||||
## Как применить схему
|
||||
|
||||
1. Открыть в браузере `/install.php?token=rybstock-local-install`.
|
||||
2. Нажать кнопку "Создать таблицы и стартовые данные".
|
||||
3. После успешной установки база будет содержать таблицы проекта и стартовые категории/настройки.
|
||||
|
||||
Страница работает только при `APP_ENV=local` и правильном `INSTALL_TOKEN` из `.env`.
|
||||
|
||||
## Что нужно сделать следующим шагом
|
||||
|
||||
Шаг 3:
|
||||
|
||||
1. Создать базовые PHP-классы для работы с таблицами:
|
||||
- `CategoryRepository`;
|
||||
- `ProductRepository`;
|
||||
- `ProductVariantRepository`;
|
||||
- `OrderRepository`;
|
||||
- `PromocodeRepository`;
|
||||
- `SettingRepository`.
|
||||
2. Сделать первый вывод категорий на главной странице.
|
||||
3. Подготовить основу админки: вход администратора и список разделов.
|
||||
Reference in New Issue
Block a user