This commit is contained in:
2026-05-15 20:41:36 +03:00
parent 41dd63655d
commit 302bb191a3

View File

@@ -35,6 +35,70 @@ UPLOAD_FOLDER = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'upload
os.makedirs(UPLOAD_FOLDER, exist_ok=True)
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
# Автоматическая инициализация таблиц при старте
def init_db():
try:
from .db import get_db_connection, release_db_connection
conn = get_db_connection()
cur = conn.cursor()
cur.execute("""
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',
parent_id INT REFERENCES users(id) ON DELETE CASCADE,
plan VARCHAR(20) DEFAULT 'free', created_at TIMESTAMP DEFAULT NOW()
);
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 NOW(), 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 NOW(), updated_at TIMESTAMP DEFAULT NOW()
);
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 NOW()
);
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 NOW()
);
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 NOW()
);
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 NOW()
);
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 NOW()
);
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',
is_active BOOLEAN DEFAULT TRUE, current_price DECIMAL(10,2),
last_run TIMESTAMP, created_at TIMESTAMP DEFAULT NOW()
);
""")
conn.commit()
release_db_connection(conn)
print("✅ База данных инициализирована успешно")
except Exception as e:
print(f"⚠️ Ошибка инициализации БД: {e}")
init_db()
# Register blueprints
from .routes.cases import cases_blueprint
from .routes.credentials import credentials_blueprint