156 lines
5.9 KiB
Python
156 lines
5.9 KiB
Python
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}")
|