шаг 4 завершен

This commit is contained in:
Alisa
2026-06-04 01:30:45 +03:00
parent 62ce8c4d01
commit 238831ad3a
26 changed files with 1703 additions and 70 deletions
+228
View File
@@ -7,11 +7,23 @@ SET FOREIGN_KEY_CHECKS = 0;
DROP TABLE IF EXISTS order_status_history;
DROP TABLE IF EXISTS order_items;
DROP TABLE IF EXISTS orders;
DROP TABLE IF EXISTS price_requests;
DROP TABLE IF EXISTS delivery_calculations;
DROP TABLE IF EXISTS promocode_targets;
DROP TABLE IF EXISTS promocodes;
DROP TABLE IF EXISTS product_search_terms;
DROP TABLE IF EXISTS product_events;
DROP TABLE IF EXISTS product_relations;
DROP TABLE IF EXISTS recommendation_rules;
DROP TABLE IF EXISTS product_badge_links;
DROP TABLE IF EXISTS product_badges;
DROP TABLE IF EXISTS product_segment_links;
DROP TABLE IF EXISTS product_segments;
DROP TABLE IF EXISTS product_images;
DROP TABLE IF EXISTS variant_attribute_values;
DROP TABLE IF EXISTS product_attribute_groups;
DROP TABLE IF EXISTS attribute_values;
DROP TABLE IF EXISTS attribute_groups;
DROP TABLE IF EXISTS product_variants;
DROP TABLE IF EXISTS popular_products;
DROP TABLE IF EXISTS promo_block_items;
@@ -111,12 +123,17 @@ CREATE TABLE product_variants (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
product_id BIGINT UNSIGNED NOT NULL,
name VARCHAR(190) NOT NULL,
code VARCHAR(100) NULL,
article VARCHAR(100) NULL,
unit ENUM('kg', 'g', 'l', 'ml', 'pcs', 'pack') NOT NULL DEFAULT 'kg',
package_quantity DECIMAL(10,3) NOT NULL DEFAULT 1.000,
step_quantity DECIMAL(10,3) NOT NULL DEFAULT 1.000,
price_per_unit DECIMAL(12,2) NULL,
package_price DECIMAL(12,2) NOT NULL,
old_package_price DECIMAL(12,2) NULL,
discount_type ENUM('none', 'manual_old_price', 'percent') NOT NULL DEFAULT 'none',
discount_percent DECIMAL(5,2) NULL,
volume_or_pieces DECIMAL(12,4) NULL,
min_order_quantity DECIMAL(10,3) NOT NULL DEFAULT 1.000,
stock_quantity DECIMAL(12,3) NULL,
is_default TINYINT(1) NOT NULL DEFAULT 0,
@@ -127,12 +144,79 @@ CREATE TABLE product_variants (
updated_at DATETIME NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (id),
KEY idx_variants_product (product_id),
KEY idx_variants_code (code),
KEY idx_variants_article (article),
KEY idx_variants_public (product_id, is_published, is_available, sort_order),
CONSTRAINT fk_variants_product
FOREIGN KEY (product_id) REFERENCES products(id)
ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE attribute_groups (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
name VARCHAR(190) NOT NULL,
slug VARCHAR(190) NOT NULL,
display_type ENUM('select', 'radio', 'swatch') NOT NULL DEFAULT 'select',
is_filterable TINYINT(1) NOT NULL DEFAULT 1,
sort_order INT NOT NULL DEFAULT 100,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (id),
UNIQUE KEY uq_attribute_groups_slug (slug)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE attribute_values (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
group_id BIGINT UNSIGNED NOT NULL,
value VARCHAR(190) NOT NULL,
slug VARCHAR(190) NOT NULL,
sort_order INT NOT NULL DEFAULT 100,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (id),
UNIQUE KEY uq_attribute_value (group_id, slug),
KEY idx_attribute_values_group (group_id, sort_order),
CONSTRAINT fk_attribute_values_group
FOREIGN KEY (group_id) REFERENCES attribute_groups(id)
ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE product_attribute_groups (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
product_id BIGINT UNSIGNED NOT NULL,
group_id BIGINT UNSIGNED NOT NULL,
sort_order INT NOT NULL DEFAULT 100,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id),
UNIQUE KEY uq_product_attribute_group (product_id, group_id),
CONSTRAINT fk_product_attribute_groups_product
FOREIGN KEY (product_id) REFERENCES products(id)
ON DELETE CASCADE,
CONSTRAINT fk_product_attribute_groups_group
FOREIGN KEY (group_id) REFERENCES attribute_groups(id)
ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE variant_attribute_values (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
variant_id BIGINT UNSIGNED NOT NULL,
group_id BIGINT UNSIGNED NOT NULL,
value_id BIGINT UNSIGNED NOT NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id),
UNIQUE KEY uq_variant_attribute (variant_id, group_id),
KEY idx_variant_attribute_value (value_id),
CONSTRAINT fk_variant_attribute_variant
FOREIGN KEY (variant_id) REFERENCES product_variants(id)
ON DELETE CASCADE,
CONSTRAINT fk_variant_attribute_group
FOREIGN KEY (group_id) REFERENCES attribute_groups(id)
ON DELETE CASCADE,
CONSTRAINT fk_variant_attribute_value
FOREIGN KEY (value_id) REFERENCES attribute_values(id)
ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE product_images (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
product_id BIGINT UNSIGNED NOT NULL,
@@ -161,6 +245,111 @@ CREATE TABLE product_search_terms (
ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE product_segments (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
name VARCHAR(190) NOT NULL,
slug VARCHAR(190) NOT NULL,
description TEXT NULL,
sort_order INT NOT NULL DEFAULT 100,
is_active TINYINT(1) NOT NULL DEFAULT 1,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (id),
UNIQUE KEY uq_product_segments_slug (slug),
KEY idx_product_segments_active (is_active, sort_order)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE product_segment_links (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
product_id BIGINT UNSIGNED NOT NULL,
segment_id BIGINT UNSIGNED NOT NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id),
UNIQUE KEY uq_product_segment_link (product_id, segment_id),
KEY idx_segment_links_segment (segment_id),
CONSTRAINT fk_segment_links_product
FOREIGN KEY (product_id) REFERENCES products(id)
ON DELETE CASCADE,
CONSTRAINT fk_segment_links_segment
FOREIGN KEY (segment_id) REFERENCES product_segments(id)
ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE product_badges (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
name VARCHAR(190) NOT NULL,
slug VARCHAR(190) NOT NULL,
color VARCHAR(40) NULL,
sort_order INT NOT NULL DEFAULT 100,
is_active TINYINT(1) NOT NULL DEFAULT 1,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (id),
UNIQUE KEY uq_product_badges_slug (slug),
KEY idx_product_badges_active (is_active, sort_order)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE product_badge_links (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
product_id BIGINT UNSIGNED NOT NULL,
badge_id BIGINT UNSIGNED NOT NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id),
UNIQUE KEY uq_product_badge_link (product_id, badge_id),
KEY idx_badge_links_badge (badge_id),
CONSTRAINT fk_badge_links_product
FOREIGN KEY (product_id) REFERENCES products(id)
ON DELETE CASCADE,
CONSTRAINT fk_badge_links_badge
FOREIGN KEY (badge_id) REFERENCES product_badges(id)
ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE recommendation_rules (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
title VARCHAR(190) NOT NULL,
source_type ENUM('home', 'category', 'product', 'cart', 'segment') NOT NULL DEFAULT 'product',
target_type ENUM('similar', 'bought_together', 'upsell', 'scenario', 'manual') NOT NULL DEFAULT 'similar',
segment_id BIGINT UNSIGNED NULL,
category_id BIGINT UNSIGNED NULL,
max_items TINYINT UNSIGNED NOT NULL DEFAULT 12,
is_active TINYINT(1) NOT NULL DEFAULT 1,
sort_order INT NOT NULL DEFAULT 100,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (id),
KEY idx_recommendation_rules_active (is_active, source_type, target_type, sort_order),
KEY idx_recommendation_rules_segment (segment_id),
KEY idx_recommendation_rules_category (category_id),
CONSTRAINT fk_recommendation_rules_segment
FOREIGN KEY (segment_id) REFERENCES product_segments(id)
ON DELETE SET NULL,
CONSTRAINT fk_recommendation_rules_category
FOREIGN KEY (category_id) REFERENCES categories(id)
ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE product_relations (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
source_product_id BIGINT UNSIGNED NOT NULL,
target_product_id BIGINT UNSIGNED NOT NULL,
relation_type ENUM('bought_together', 'similar', 'upsell', 'scenario', 'manual') NOT NULL DEFAULT 'manual',
weight SMALLINT UNSIGNED NOT NULL DEFAULT 100,
is_active TINYINT(1) NOT NULL DEFAULT 1,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (id),
UNIQUE KEY uq_product_relation (source_product_id, target_product_id, relation_type),
KEY idx_product_relations_source (source_product_id, relation_type, is_active, weight),
KEY idx_product_relations_target (target_product_id),
CONSTRAINT fk_product_relations_source
FOREIGN KEY (source_product_id) REFERENCES products(id)
ON DELETE CASCADE,
CONSTRAINT fk_product_relations_target
FOREIGN KEY (target_product_id) REFERENCES products(id)
ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE promocodes (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
code VARCHAR(80) NOT NULL,
@@ -218,6 +407,26 @@ CREATE TABLE delivery_calculations (
KEY idx_delivery_type_created (delivery_type, created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE price_requests (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
customer_name VARCHAR(120) NULL,
phone VARCHAR(40) NULL,
email VARCHAR(190) NULL,
company_name VARCHAR(190) NULL,
request_text MEDIUMTEXT NULL,
file_path VARCHAR(255) NULL,
status ENUM('new', 'in_progress', 'answered', 'archived') NOT NULL DEFAULT 'new',
admin_comment TEXT NULL,
client_ip VARCHAR(45) NULL,
user_agent VARCHAR(255) NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (id),
KEY idx_price_requests_status (status, created_at),
KEY idx_price_requests_email (email),
KEY idx_price_requests_phone (phone)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE orders (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
order_number VARCHAR(40) NOT NULL,
@@ -254,6 +463,25 @@ CREATE TABLE orders (
ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE product_events (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
event_type ENUM('view', 'add_to_cart', 'order', 'compare', 'recommendation_click') NOT NULL,
product_id BIGINT UNSIGNED NOT NULL,
session_id VARCHAR(120) NULL,
order_id BIGINT UNSIGNED NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id),
KEY idx_product_events_product (product_id, event_type, created_at),
KEY idx_product_events_session (session_id, created_at),
KEY idx_product_events_order (order_id),
CONSTRAINT fk_product_events_product
FOREIGN KEY (product_id) REFERENCES products(id)
ON DELETE CASCADE,
CONSTRAINT fk_product_events_order
FOREIGN KEY (order_id) REFERENCES orders(id)
ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE order_items (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
order_id BIGINT UNSIGNED NOT NULL,
+135
View File
@@ -261,6 +261,140 @@ INSERT INTO categories (parent_id, name, slug, sort_order, is_active) VALUES
((SELECT id FROM categories c WHERE c.slug = 'molochnaya-produkciya'), 'Сливки', 'slivki', 20, 1),
((SELECT id FROM categories c WHERE c.slug = 'molochnaya-produkciya'), 'Сливочное масло', 'slivochnoe-maslo', 30, 1);
INSERT INTO attribute_groups (name, slug, display_type, is_filterable, sort_order) VALUES
('Упаковка', 'upakovka', 'select', 1, 10),
('Размер рыбы', 'razmer-ryby', 'select', 1, 20),
('Размер креветки', 'razmer-krevetki', 'select', 1, 30),
('Тип обработки', 'tip-obrabotki', 'select', 1, 40),
('Тип заморозки', 'tip-zamorozki', 'select', 1, 50),
('Происхождение', 'proishozhdenie', 'select', 1, 60),
('Размер / калибр', 'razmer-kalibr', 'select', 1, 70),
('Вид приготовления', 'vid-prigotovleniya', 'select', 1, 80),
('Тип фасовки', 'tip-fasovki', 'select', 1, 90);
INSERT INTO attribute_values (group_id, value, slug, sort_order) VALUES
((SELECT id FROM attribute_groups g WHERE g.slug = 'upakovka'), '55 кг', '55kg', 10),
((SELECT id FROM attribute_groups g WHERE g.slug = 'upakovka'), '42 кг', '42kg', 20),
((SELECT id FROM attribute_groups g WHERE g.slug = 'upakovka'), '35 кг', '35kg', 30),
((SELECT id FROM attribute_groups g WHERE g.slug = 'upakovka'), '31.5 кг', '31-5kg', 40),
((SELECT id FROM attribute_groups g WHERE g.slug = 'upakovka'), '30 кг', '30kg', 50),
((SELECT id FROM attribute_groups g WHERE g.slug = 'upakovka'), '25 кг', '25kg', 60),
((SELECT id FROM attribute_groups g WHERE g.slug = 'upakovka'), '22 кг', '22kg', 70),
((SELECT id FROM attribute_groups g WHERE g.slug = 'upakovka'), '21 кг', '21kg', 80),
((SELECT id FROM attribute_groups g WHERE g.slug = 'upakovka'), '20 кг', '20kg', 90),
((SELECT id FROM attribute_groups g WHERE g.slug = 'upakovka'), '15 кг', '15kg', 100),
((SELECT id FROM attribute_groups g WHERE g.slug = 'upakovka'), '14 кг', '14kg', 110),
((SELECT id FROM attribute_groups g WHERE g.slug = 'upakovka'), '12 кг', '12kg', 120),
((SELECT id FROM attribute_groups g WHERE g.slug = 'upakovka'), '10 кг', '10kg', 130),
((SELECT id FROM attribute_groups g WHERE g.slug = 'upakovka'), '7 кг', '7kg', 140),
((SELECT id FROM attribute_groups g WHERE g.slug = 'upakovka'), '6 кг', '6kg', 150),
((SELECT id FROM attribute_groups g WHERE g.slug = 'upakovka'), '5 кг', '5kg', 160),
((SELECT id FROM attribute_groups g WHERE g.slug = 'upakovka'), '4 кг', '4kg', 170),
((SELECT id FROM attribute_groups g WHERE g.slug = 'upakovka'), '3 кг', '3kg', 180),
((SELECT id FROM attribute_groups g WHERE g.slug = 'upakovka'), '2 кг', '2kg', 190),
((SELECT id FROM attribute_groups g WHERE g.slug = 'upakovka'), '1 кг', '1kg', 200),
((SELECT id FROM attribute_groups g WHERE g.slug = 'upakovka'), '500 г', '500g', 210),
((SELECT id FROM attribute_groups g WHERE g.slug = 'upakovka'), '400 г', '400g', 220),
((SELECT id FROM attribute_groups g WHERE g.slug = 'upakovka'), '300 г', '300g', 230),
((SELECT id FROM attribute_groups g WHERE g.slug = 'upakovka'), '250 г', '250g', 240),
((SELECT id FROM attribute_groups g WHERE g.slug = 'upakovka'), '200 г', '200g', 250),
((SELECT id FROM attribute_groups g WHERE g.slug = 'upakovka'), '100 г', '100g', 260),
((SELECT id FROM attribute_groups g WHERE g.slug = 'razmer-ryby'), '100 г', '100g', 10),
((SELECT id FROM attribute_groups g WHERE g.slug = 'razmer-ryby'), '200 г', '200g', 20),
((SELECT id FROM attribute_groups g WHERE g.slug = 'razmer-ryby'), '300 г', '300g', 30),
((SELECT id FROM attribute_groups g WHERE g.slug = 'razmer-ryby'), '400 г', '400g', 40),
((SELECT id FROM attribute_groups g WHERE g.slug = 'razmer-ryby'), '500 г', '500g', 50),
((SELECT id FROM attribute_groups g WHERE g.slug = 'razmer-ryby'), '1 кг+', '1kg-plus', 60),
((SELECT id FROM attribute_groups g WHERE g.slug = 'razmer-krevetki'), '16/20', '16-20', 10),
((SELECT id FROM attribute_groups g WHERE g.slug = 'razmer-krevetki'), '21/25', '21-25', 20),
((SELECT id FROM attribute_groups g WHERE g.slug = 'razmer-krevetki'), '26/30', '26-30', 30),
((SELECT id FROM attribute_groups g WHERE g.slug = 'razmer-krevetki'), '31/40', '31-40', 40),
((SELECT id FROM attribute_groups g WHERE g.slug = 'razmer-krevetki'), '40/60', '40-60', 50),
((SELECT id FROM attribute_groups g WHERE g.slug = 'razmer-krevetki'), '50/70', '50-70', 60),
((SELECT id FROM attribute_groups g WHERE g.slug = 'tip-obrabotki'), 'Неразделанная', 'nerazdelannaya', 10),
((SELECT id FROM attribute_groups g WHERE g.slug = 'tip-obrabotki'), 'Потрошеная', 'potroshenaya', 20),
((SELECT id FROM attribute_groups g WHERE g.slug = 'tip-obrabotki'), 'Без головы', 'bez-golovy', 30),
((SELECT id FROM attribute_groups g WHERE g.slug = 'tip-obrabotki'), 'С головой', 's-golovoj', 40),
((SELECT id FROM attribute_groups g WHERE g.slug = 'tip-obrabotki'), 'Разделанная с головой', 'razdelannaya-s-golovoj', 50),
((SELECT id FROM attribute_groups g WHERE g.slug = 'tip-obrabotki'), 'Потрошеная без головы', 'potroshenaya-bez-golovy', 60),
((SELECT id FROM attribute_groups g WHERE g.slug = 'tip-obrabotki'), 'Без кожи', 'bez-kozhi', 70),
((SELECT id FROM attribute_groups g WHERE g.slug = 'tip-obrabotki'), 'Филе', 'file', 80),
((SELECT id FROM attribute_groups g WHERE g.slug = 'tip-obrabotki'), 'Стейк', 'stejk', 90),
((SELECT id FROM attribute_groups g WHERE g.slug = 'tip-zamorozki'), 'Штучная заморозка', 'shtuchnaya-zamorozka', 10),
((SELECT id FROM attribute_groups g WHERE g.slug = 'tip-zamorozki'), 'Монолитная заморозка', 'monolitnaya-zamorozka', 20),
((SELECT id FROM attribute_groups g WHERE g.slug = 'tip-zamorozki'), 'Свежемороженые', 'svezhemorozhenye', 30),
((SELECT id FROM attribute_groups g WHERE g.slug = 'tip-zamorozki'), 'Охлажденная', 'ohlazhdennaya', 40),
((SELECT id FROM attribute_groups g WHERE g.slug = 'proishozhdenie'), 'Вьетнам', 'vetnam', 10),
((SELECT id FROM attribute_groups g WHERE g.slug = 'proishozhdenie'), 'Камчатка', 'kamchatka', 20),
((SELECT id FROM attribute_groups g WHERE g.slug = 'proishozhdenie'), 'Япономорская', 'yaponomorskaya', 30),
((SELECT id FROM attribute_groups g WHERE g.slug = 'proishozhdenie'), 'Сахалин', 'sahalin', 40),
((SELECT id FROM attribute_groups g WHERE g.slug = 'proishozhdenie'), 'Каспийская', 'kaspijskaya', 50),
((SELECT id FROM attribute_groups g WHERE g.slug = 'proishozhdenie'), 'Цимлянская', 'cimlyanskaya', 60),
((SELECT id FROM attribute_groups g WHERE g.slug = 'proishozhdenie'), 'Чили', 'chili', 70),
((SELECT id FROM attribute_groups g WHERE g.slug = 'proishozhdenie'), 'Армения', 'armeniya', 80),
((SELECT id FROM attribute_groups g WHERE g.slug = 'proishozhdenie'), 'Средиземноморская', 'sredizemnomorskaya', 90),
((SELECT id FROM attribute_groups g WHERE g.slug = 'proishozhdenie'), 'Севанская', 'sevanskaya', 100),
((SELECT id FROM attribute_groups g WHERE g.slug = 'razmer-kalibr'), '1 кг и более', '1kg-i-bolee', 10),
((SELECT id FROM attribute_groups g WHERE g.slug = 'razmer-kalibr'), '4 кг и более', '4kg-i-bolee', 20),
((SELECT id FROM attribute_groups g WHERE g.slug = 'razmer-kalibr'), '7-8 кг', '7-8kg', 30),
((SELECT id FROM attribute_groups g WHERE g.slug = 'razmer-kalibr'), 'L2', 'l2', 40),
((SELECT id FROM attribute_groups g WHERE g.slug = 'razmer-kalibr'), 'U4', 'u4', 50),
((SELECT id FROM attribute_groups g WHERE g.slug = 'razmer-kalibr'), '16-20', '16-20', 60),
((SELECT id FROM attribute_groups g WHERE g.slug = 'vid-prigotovleniya'), 'Слабосоленая', 'slabosolenaya', 10),
((SELECT id FROM attribute_groups g WHERE g.slug = 'vid-prigotovleniya'), 'Вяленая', 'vyalenaya', 20),
((SELECT id FROM attribute_groups g WHERE g.slug = 'vid-prigotovleniya'), 'Горячего копчения', 'goryachego-kopcheniya', 30),
((SELECT id FROM attribute_groups g WHERE g.slug = 'vid-prigotovleniya'), 'Холодного копчения', 'holodnogo-kopcheniya', 40),
((SELECT id FROM attribute_groups g WHERE g.slug = 'vid-prigotovleniya'), 'В кляре', 'v-klyare', 50),
((SELECT id FROM attribute_groups g WHERE g.slug = 'vid-prigotovleniya'), 'В масле', 'v-masle', 60),
((SELECT id FROM attribute_groups g WHERE g.slug = 'vid-prigotovleniya'), 'С морской капустой', 's-morskoj-kapustoj', 70),
((SELECT id FROM attribute_groups g WHERE g.slug = 'tip-fasovki'), 'Крупная фасовка', 'krupnaya-fasovka', 10),
((SELECT id FROM attribute_groups g WHERE g.slug = 'tip-fasovki'), 'Малая фасовка', 'malaya-fasovka', 20),
((SELECT id FROM attribute_groups g WHERE g.slug = 'tip-fasovki'), 'Порционная фасовка', 'porcionnaya-fasovka', 30),
((SELECT id FROM attribute_groups g WHERE g.slug = 'tip-fasovki'), 'Весовой товар', 'vesovoj-tovar', 40);
INSERT INTO product_segments (name, slug, description, sort_order, is_active) VALUES
('Для дома', 'dlya-doma', 'Небольшие и понятные позиции для обычной домашней покупки.', 10, 1),
('Для семьи', 'dlya-semi', 'Фасовки и продукты, которые удобно покупать на семью.', 20, 1),
('Для совместной покупки', 'dlya-sovmestnoj-pokupki', 'Крупные упаковки, которые удобно делить с родственниками или соседями.', 30, 1),
('Большая фасовка', 'bolshaya-fasovka', 'Короба и упаковки, где покупателю важна выгода за объем.', 40, 1),
('HoReCa', 'horeca', 'Позиции для кафе, ресторанов, магазинов и производств.', 50, 1),
('Премиум', 'premium', 'Икра, деликатесы, премиальная рыба, морепродукты и сыры.', 60, 1),
('К пиву', 'k-pivu', 'Вяленая, копченая рыба, снеки и закусочные позиции.', 70, 1),
('Быстро приготовить', 'bystro-prigotovit', 'Полуфабрикаты и продукты для быстрого ужина.', 80, 1),
('Для суши', 'dlya-sushi-segment', 'Рыба, морепродукты, рис, нори, соусы и сопутствующие товары для суши.', 90, 1),
('Диетическое', 'dieticheskoe', 'Филе, белая рыба, индейка, овощи и легкие продукты.', 100, 1),
('Консервы и банки', 'konservy-i-banki', 'Штучные товары в банках и фиксированной фасовке.', 110, 1),
('Овощи и заморозка', 'ovoschi-i-zamorozka', 'Овощные смеси, ягоды, грибы и замороженные гарниры.', 120, 1),
('Мясо для дома', 'myaso-dlya-doma', 'Мясо и птица в понятных домашних сценариях.', 130, 1);
INSERT INTO product_badges (name, slug, color, sort_order, is_active) VALUES
('Малая фасовка', 'malaya-fasovka', '#3f7f5f', 10, 1),
('Крупная фасовка', 'krupnaya-fasovka', '#8a5a2b', 20, 1),
('Штучная заморозка', 'shtuchnaya-zamorozka', '#2f6f9f', 30, 1),
('Монолитная заморозка', 'monolitnaya-zamorozka', '#5f6f7f', 40, 1),
('Без кожи', 'bez-kozhi', '#5b7c8a', 50, 1),
('Без головы', 'bez-golovy', '#6a7a55', 60, 1),
('С головой', 's-golovoj', '#7a6655', 70, 1),
('Премиум', 'premium', '#9a6a2f', 80, 1),
('В рассоле или масле', 'v-rassole-ili-masle', '#6b6b90', 90, 1),
('Для суши', 'dlya-sushi', '#3b7f7a', 100, 1),
('К пиву', 'k-pivu', '#8c6a2f', 110, 1),
('Для семьи', 'dlya-semi', '#4f7a4f', 120, 1),
('Для ресторана', 'dlya-restorana', '#575f7a', 130, 1),
('Можно разделить с соседями', 'mozhno-razdelit-s-sosedyami', '#7a5f8a', 140, 1),
('Без предоплаты', 'bez-predoplaty', '#3f805f', 150, 1);
INSERT INTO recommendation_rules
(title, source_type, target_type, segment_id, category_id, max_items, is_active, sort_order)
VALUES
('Похожие товары в той же категории', 'product', 'similar', NULL, NULL, 12, 1, 10),
('С этим обычно покупают', 'product', 'bought_together', NULL, NULL, 12, 1, 20),
('Выгоднее крупной фасовкой', 'product', 'upsell', (SELECT id FROM product_segments s WHERE s.slug = 'bolshaya-fasovka'), NULL, 8, 1, 30),
('Подходит для домашней покупки', 'product', 'scenario', (SELECT id FROM product_segments s WHERE s.slug = 'dlya-doma'), NULL, 8, 1, 40),
('Собрать набор для суши', 'cart', 'scenario', (SELECT id FROM product_segments s WHERE s.slug = 'dlya-sushi-segment'), NULL, 12, 1, 50),
('Закуски к копченой и вяленой рыбе', 'product', 'scenario', (SELECT id FROM product_segments s WHERE s.slug = 'k-pivu'), NULL, 12, 1, 60),
('Быстрый ужин и полуфабрикаты', 'home', 'scenario', (SELECT id FROM product_segments s WHERE s.slug = 'bystro-prigotovit'), NULL, 12, 1, 70);
INSERT INTO promocodes
(code, title, discount_type, discount_value, min_order_amount, applies_to, is_active, is_featured, show_in_price_tiers, price_tier_label)
VALUES
@@ -271,6 +405,7 @@ VALUES
INSERT INTO site_settings (setting_key, setting_value, value_type, group_name) VALUES
('site_phone', '+7-977-736-33-63', 'string', 'contacts'),
('admin_email', '', 'string', 'mail'),
('price_request_email', '', 'string', 'mail'),
('inside_mkad_free_from', '5000', 'number', 'delivery'),
('inside_mkad_paid_price', '599', 'number', 'delivery'),
('outside_mkad_base_price', '199', 'number', 'delivery'),