Files
new.rybstock.ru/docs/ШАГ_2_БАЗА_ДАННЫХ.md
T
2026-06-04 00:27:17 +03:00

177 lines
6.5 KiB
Markdown
Raw 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.
# Шаг 2. База данных и связи
## Что сделано
Создана SQL-схема `database/schema.sql` для MariaDB/MySQL и стартовые данные `database/seed.sql`.
Также создана локальная страница установки `public/install.php`.
Она применяет:
- `database/schema.sql`;
- `database/seed.sql`.
Важно: установка пересоздает таблицы, поэтому использовать ее только на старте или в локальной разработке.
Схема покрывает основные части проекта:
- администраторы;
- категории и подкатегории;
- товары;
- фасовки и цены;
- изображения товаров;
- поисковые термины;
- промокоды и их привязки;
- расчеты доставки;
- заказы и позиции заказов;
- история статусов заказа;
- вход клиента по email-коду;
- отзывы;
- акции;
- популярные товары;
- настройки сайта;
- праздничные/нерабочие дни.
- старые URL и 301-редиректы для сохранения индексации.
## Главная логика связей
### Категории
Таблица `categories` поддерживает вложенность через `parent_id`.
Это позволяет хранить:
- главные категории;
- подкатегории;
- меню каталога;
- SEO-текст для страниц категорий.
Для переноса со старого сайта у категорий есть поле `legacy_path`. Если старый URL отличается от нового slug, старый путь нужно сохранить и добавить 301-редирект в таблицу `redirects`.
Для SEO у категорий есть поля `h1`, `seo_title`, `seo_description`, `seo_keywords`.
### Товары
Таблица `products` хранит основную карточку товара:
- название;
- slug;
- категорию;
- описание;
- основное фото;
- базовую единицу;
- режим отображения цены;
- публикацию;
- доступность;
- признаки "новинка", "хит", "акция".
Для товаров также есть поле `legacy_path`, чтобы переносить старые ссылки без потери индексации.
Для SEO у товаров есть поля `h1`, `seo_title`, `seo_description`, `seo_keywords`.
### Фасовки
Таблица `product_variants` хранит отдельные фасовки товара.
Именно фасовка попадает в корзину, а не просто товар.
Пример:
- товар: горбуша неразделанная;
- фасовка: пласт 10 кг;
- `package_quantity`: 10;
- `step_quantity`: 10;
- `price_per_unit`: 600;
- `package_price`: 6000.
Так можно корректно сделать плюс/минус кратно фасовке.
### Заказы
Таблица `orders` хранит заказ целиком:
- имя;
- телефон;
- email;
- тип получения;
- адрес;
- суммы;
- промокод;
- расчет доставки;
- статус.
Таблица `order_items` хранит снимок каждой позиции заказа.
Снимок нужен, чтобы старые заказы не менялись при изменении цены или названия товара в каталоге.
### Промокоды
Таблица `promocodes` хранит сам промокод.
Таблица `promocode_targets` хранит ограничения:
- на категорию;
- на товар.
Если промокод действует на весь заказ, targets не нужны.
Для отображения выгодных цен в каталоге у промокодов есть поля:
- `show_in_price_tiers` - показывать как градацию цены;
- `price_tier_label` - подпись для карточки товара.
Так можно показывать покупателю базовую цену, цену от 20 000 руб. наличными и цену от 50 000 руб. наличными.
### Доставка
Таблица `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. Подготовить основу админки: вход администратора и список разделов.