Modularización de GKACHELE SaaS
This commit is contained in:
155
demo/database.py
Normal file
155
demo/database.py
Normal file
@@ -0,0 +1,155 @@
|
||||
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 'gimnasio',
|
||||
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}")
|
||||
Reference in New Issue
Block a user