-- db/init.sql -- Создаёт таблицы для хранения пользователей, ключей маркетплейсов, кейсов и файлов CREATE TABLE IF NOT EXISTS users ( id SERIAL PRIMARY KEY, username VARCHAR(50) UNIQUE NOT NULL, password_hash TEXT NOT NULL, role VARCHAR(20) DEFAULT 'admin', -- admin, manager, viewer parent_id INT REFERENCES users(id) ON DELETE CASCADE, plan VARCHAR(20) DEFAULT 'free', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE IF NOT EXISTS repricer_rules ( id SERIAL PRIMARY KEY, user_id INT REFERENCES users(id) ON DELETE CASCADE, product_name VARCHAR(255) NOT NULL, sku VARCHAR(100) NOT NULL, min_price DECIMAL(10, 2) NOT NULL, max_price DECIMAL(10, 2) NOT NULL, strategy VARCHAR(20) DEFAULT 'follow_competitor', -- follow_competitor, match_lowest is_active BOOLEAN DEFAULT TRUE, current_price DECIMAL(10, 2), last_run TIMESTAMP, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE IF NOT EXISTS credentials ( user_id INT REFERENCES users(id) ON DELETE CASCADE, platform VARCHAR(50), api_key TEXT, client_id TEXT, client_secret TEXT, other_data JSONB, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (user_id, platform) ); CREATE TABLE IF NOT EXISTS cases ( id SERIAL PRIMARY KEY, user_id INT REFERENCES users(id) ON DELETE CASCADE, platform VARCHAR(50) NOT NULL DEFAULT 'ozon', violator_url TEXT NOT NULL, violator_article VARCHAR(50) NOT NULL, my_article VARCHAR(50), comment TEXT, status VARCHAR(20) DEFAULT 'new', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE IF NOT EXISTS files ( id SERIAL PRIMARY KEY, case_id INT REFERENCES cases(id) ON DELETE CASCADE, file_path TEXT NOT NULL, uploaded_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE IF NOT EXISTS audit_log ( id SERIAL PRIMARY KEY, user_id INT REFERENCES users(id) ON DELETE CASCADE, action VARCHAR(100) NOT NULL, details JSONB, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE IF NOT EXISTS seo_keywords ( id SERIAL PRIMARY KEY, user_id INT REFERENCES users(id) ON DELETE CASCADE, keyword VARCHAR(255) NOT NULL, article VARCHAR(100) NOT NULL, platform VARCHAR(50) NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE IF NOT EXISTS seo_history ( id SERIAL PRIMARY KEY, keyword_id INT REFERENCES seo_keywords(id) ON DELETE CASCADE, position INT, checked_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE IF NOT EXISTS reference_images ( id SERIAL PRIMARY KEY, user_id INT REFERENCES users(id) ON DELETE CASCADE, file_path TEXT NOT NULL, image_hash VARCHAR(64), article VARCHAR(100), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP );