import sqlite3 from config import MAIN_DB def get_db(): conn = sqlite3.connect(MAIN_DB) # Habilitar soporte para diccionarios si se prefiere, # pero el código actual usa índices, así que seguiremos así para no romper nada. return conn def init_db(): """Inicializar base de datos principal - GKACHELE™ SaaS""" try: conn = get_db() c = conn.cursor() # Usuarios c.execute('''CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY AUTOINCREMENT, email TEXT UNIQUE NOT NULL, password TEXT NOT NULL, role TEXT DEFAULT 'subscriber', plan TEXT DEFAULT 'base', rubro TEXT DEFAULT 'restaurante', status TEXT DEFAULT 'active', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP )''') # Migraciones rápidas de columnas for col, default in [('role', 'subscriber'), ('status', 'active')]: try: c.execute(f'ALTER TABLE users ADD COLUMN {col} TEXT DEFAULT "{default}"') except: pass # Administrador Inicial c.execute('SELECT COUNT(*) FROM users WHERE id = 1') if c.fetchone()[0] == 0: from werkzeug.security import generate_password_hash admin_password = generate_password_hash('admin123') c.execute('''INSERT INTO users (id, email, password, role, plan, rubro, status) VALUES (1, 'admin@gkachele.com', ?, 'administrator', 'premium', 'admin', 'active')''', (admin_password,)) print("✅ Usuario administrador creado: admin@gkachele.com / admin123") # Sitios c.execute('''CREATE TABLE IF NOT EXISTS sites ( id INTEGER PRIMARY KEY AUTOINCREMENT, user_id INTEGER NOT NULL, slug TEXT UNIQUE NOT NULL, theme TEXT DEFAULT 'default', status TEXT DEFAULT 'draft', content_json TEXT, repo_url TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (user_id) REFERENCES users(id) )''') try: c.execute('ALTER TABLE sites ADD COLUMN repo_url TEXT') except: pass # Solicitudes c.execute('''CREATE TABLE IF NOT EXISTS requests ( id INTEGER PRIMARY KEY AUTOINCREMENT, site_id INTEGER NOT NULL, user_id INTEGER NOT NULL, slug TEXT, status TEXT DEFAULT 'pending', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (site_id) REFERENCES sites(id), FOREIGN KEY (user_id) REFERENCES users(id) )''') try: c.execute('ALTER TABLE requests ADD COLUMN slug TEXT') except: pass # Media c.execute('''CREATE TABLE IF NOT EXISTS media ( id INTEGER PRIMARY KEY AUTOINCREMENT, user_id INTEGER NOT NULL, site_id INTEGER NOT NULL, filename TEXT NOT NULL, filepath TEXT NOT NULL, file_type TEXT DEFAULT 'image', uploaded_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (user_id) REFERENCES users(id), FOREIGN KEY (site_id) REFERENCES sites(id) )''') # Content c.execute('''CREATE TABLE IF NOT EXISTS content ( id INTEGER PRIMARY KEY AUTOINCREMENT, user_id INTEGER NOT NULL, site_id INTEGER NOT NULL, section TEXT NOT NULL, data_json TEXT, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (user_id) REFERENCES users(id), FOREIGN KEY (site_id) REFERENCES sites(id) )''') # Settings c.execute('''CREATE TABLE IF NOT EXISTS settings ( id INTEGER PRIMARY KEY AUTOINCREMENT, user_id INTEGER NOT NULL, site_id INTEGER, key TEXT NOT NULL, value TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (user_id) REFERENCES users(id), FOREIGN KEY (site_id) REFERENCES sites(id), UNIQUE(user_id, site_id, key) )''') # Menus c.execute('''CREATE TABLE IF NOT EXISTS menus ( id INTEGER PRIMARY KEY AUTOINCREMENT, user_id INTEGER NOT NULL, site_id INTEGER NOT NULL, location TEXT NOT NULL, title TEXT NOT NULL, url TEXT NOT NULL, order_index INTEGER DEFAULT 0, parent_id INTEGER, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (user_id) REFERENCES users(id), FOREIGN KEY (site_id) REFERENCES sites(id), FOREIGN KEY (parent_id) REFERENCES menus(id) )''') # Widgets c.execute('''CREATE TABLE IF NOT EXISTS widgets ( id INTEGER PRIMARY KEY AUTOINCREMENT, user_id INTEGER NOT NULL, site_id INTEGER NOT NULL, area TEXT NOT NULL, type TEXT NOT NULL, title TEXT, content TEXT, order_index INTEGER DEFAULT 0, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (user_id) REFERENCES users(id), FOREIGN KEY (site_id) REFERENCES sites(id) )''') conn.commit() conn.close() print("Base de datos GKACHELE inicializada correctamente.") except Exception as e: print(f" Error inicializando DB: {e}")