Files
gkachele-saas/demo/database.py

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}")