Files
gkachele-saas/demo/routes/dashboard.py
2026-01-17 11:40:17 +01:00

81 lines
3.0 KiB
Python

from flask import Blueprint, render_template, session, redirect, url_for, request, jsonify
import sqlite3
import secrets
import json
from config import MAIN_DB
from utils.auth_decorators import login_required
dashboard_bp = Blueprint('dashboard', __name__)
@dashboard_bp.route('/dashboard')
@login_required
def dashboard_view():
"""Panel del cliente"""
user_id = session['user_id']
conn = sqlite3.connect(MAIN_DB)
c = conn.cursor()
c.execute('SELECT email, plan FROM users WHERE id = ?', (user_id,))
user_info = c.fetchone()
c.execute('SELECT id, slug, theme, status, created_at FROM sites WHERE user_id = ?', (user_id,))
sites = [{'id': r[0], 'slug': r[1], 'theme': r[2], 'status': r[3], 'created_at': r[4]}
for r in c.fetchall()]
c.execute('SELECT COUNT(*) FROM media WHERE user_id = ?', (user_id,))
media_count = c.fetchone()[0]
conn.close()
return render_template('dashboard.html',
sites=sites,
user_email=user_info[0] if user_info else '',
user_plan=user_info[1] if user_info else 'base',
media_count=media_count)
@dashboard_bp.route('/dashboard/admin')
@login_required
def client_admin():
"""Admin del cliente - gestionar media, config, etc."""
user_id = session['user_id']
conn = sqlite3.connect(MAIN_DB)
c = conn.cursor()
c.execute('SELECT email, plan FROM users WHERE id = ?', (user_id,))
user_info = c.fetchone()
c.execute('SELECT id, slug, theme, status FROM sites WHERE user_id = ?', (user_id,))
sites = [{'id': r[0], 'slug': r[1], 'theme': r[2], 'status': r[3]} for r in c.fetchall()]
conn.close()
return render_template('client_admin.html',
user_email=user_info[0] if user_info else '',
user_plan=user_info[1] if user_info else 'base',
sites=sites)
@dashboard_bp.route('/dashboard/create', methods=['GET', 'POST'])
@login_required
def create_site():
"""Crear nuevo sitio"""
if request.method == 'POST':
data = request.get_json()
user_id = session['user_id']
slug = data.get('slug', f'site-{secrets.token_hex(4)}')
theme = data.get('theme', 'default')
content = json.dumps({
'site_name': data.get('site_name', 'Mi Sitio'),
'hero_title': data.get('hero_title', 'Bienvenido'),
'colors': {'primary': '#ff4d4d', 'secondary': '#1a1a1a', 'text': '#333333'}
})
conn = sqlite3.connect(MAIN_DB)
c = conn.cursor()
c.execute('INSERT INTO sites (user_id, slug, theme, content_json) VALUES (?, ?, ?, ?)',
(user_id, slug, theme, content))
conn.commit()
conn.close()
return jsonify({'success': True, 'redirect': url_for('dashboard.dashboard_view')})
return render_template('create_site.html')