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