import sqlite3 from loguru import logger as log def init_database(db_name='pipe_store.db'): conn = sqlite3.connect(db_name) cursor = conn.cursor() cursor.execute(''' CREATE TABLE IF NOT EXISTS categories ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL UNIQUE, description TEXT, parent_id INTEGER, image_path TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (parent_id) REFERENCES categories (id) ) ''') cursor.execute(''' CREATE TABLE IF NOT EXISTS products ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, full_name TEXT NOT NULL, description TEXT, category_id INTEGER NOT NULL, diameter INTEGER, wall_thickness REAL, length INTEGER, color TEXT, application_type TEXT, -- внутренняя/наружная stiffness_class TEXT, -- SN4, SN2 и т.д. image_path TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (category_id) REFERENCES categories (id) ) ''') cursor.execute(''' CREATE TABLE IF NOT EXISTS filters ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, filter_key TEXT NOT NULL UNIQUE, -- ключ для фильтрации filter_type TEXT DEFAULT 'single' -- 'single' или 'multiple' ) ''') cursor.execute(''' CREATE TABLE IF NOT EXISTS product_filters ( id INTEGER PRIMARY KEY AUTOINCREMENT, product_id INTEGER NOT NULL, filter_key TEXT NOT NULL, value TEXT NOT NULL, FOREIGN KEY (product_id) REFERENCES products (id), FOREIGN KEY (filter_key) REFERENCES filters (filter_key), UNIQUE(product_id, filter_key) ) ''') cursor.execute('CREATE INDEX IF NOT EXISTS idx_products_category ON products(category_id)') cursor.execute('CREATE INDEX IF NOT EXISTS idx_products_diameter ON products(diameter)') cursor.execute('CREATE INDEX IF NOT EXISTS idx_products_length ON products(length)') cursor.execute('CREATE INDEX IF NOT EXISTS idx_product_filters_key_value ON product_filters(filter_key, value)') conn.commit() conn.close() log.success("База данных успешно инициализирована!")