Implementación inicial del sistema de automatización de redes sociales
- Estructura completa del proyecto con FastAPI - Modelos de base de datos (productos, servicios, posts, calendario, interacciones) - Publishers para X, Threads, Instagram, Facebook - Generador de contenido con DeepSeek API - Worker de Celery con tareas programadas - Dashboard básico con templates HTML - Docker Compose para despliegue - Documentación completa Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
180
scripts/seed_database.py
Normal file
180
scripts/seed_database.py
Normal file
@@ -0,0 +1,180 @@
|
||||
"""
|
||||
Script para poblar la base de datos con datos iniciales.
|
||||
"""
|
||||
|
||||
import json
|
||||
import sys
|
||||
from pathlib import Path
|
||||
from datetime import time
|
||||
|
||||
# Agregar el directorio raíz al path
|
||||
sys.path.insert(0, str(Path(__file__).parent.parent))
|
||||
|
||||
from app.core.database import SessionLocal, engine
|
||||
from app.models import Base, TipTemplate, ContentCalendar, Service
|
||||
|
||||
|
||||
def seed_tips():
|
||||
"""Cargar tips iniciales."""
|
||||
db = SessionLocal()
|
||||
|
||||
try:
|
||||
# Cargar JSON de tips
|
||||
tips_file = Path(__file__).parent.parent / "data" / "tips_iniciales.json"
|
||||
with open(tips_file, "r", encoding="utf-8") as f:
|
||||
tips_data = json.load(f)
|
||||
|
||||
for tip in tips_data:
|
||||
existing = db.query(TipTemplate).filter(
|
||||
TipTemplate.title == tip["title"]
|
||||
).first()
|
||||
|
||||
if not existing:
|
||||
new_tip = TipTemplate(
|
||||
category=tip["category"],
|
||||
title=tip["title"],
|
||||
template=tip["template"],
|
||||
difficulty=tip.get("difficulty", "basico"),
|
||||
is_active=True,
|
||||
is_evergreen=True
|
||||
)
|
||||
db.add(new_tip)
|
||||
|
||||
db.commit()
|
||||
print(f"✅ {len(tips_data)} tips cargados")
|
||||
|
||||
finally:
|
||||
db.close()
|
||||
|
||||
|
||||
def seed_calendar():
|
||||
"""Crear calendario inicial."""
|
||||
db = SessionLocal()
|
||||
|
||||
try:
|
||||
# Calendario de ejemplo
|
||||
calendar_entries = [
|
||||
# Tips diarios - mañana
|
||||
{"day": 0, "time": "09:00", "type": "tip_tech", "platforms": ["x", "threads", "instagram"]},
|
||||
{"day": 1, "time": "09:00", "type": "tip_tech", "platforms": ["x", "threads", "instagram"]},
|
||||
{"day": 2, "time": "09:00", "type": "tip_tech", "platforms": ["x", "threads", "instagram"]},
|
||||
{"day": 3, "time": "09:00", "type": "tip_tech", "platforms": ["x", "threads", "instagram"]},
|
||||
{"day": 4, "time": "09:00", "type": "tip_tech", "platforms": ["x", "threads", "instagram"]},
|
||||
|
||||
# Tips diarios - tarde
|
||||
{"day": 0, "time": "15:00", "type": "dato_curioso", "platforms": ["x", "threads"]},
|
||||
{"day": 1, "time": "15:00", "type": "dato_curioso", "platforms": ["x", "threads"]},
|
||||
{"day": 2, "time": "15:00", "type": "dato_curioso", "platforms": ["x", "threads"]},
|
||||
{"day": 3, "time": "15:00", "type": "dato_curioso", "platforms": ["x", "threads"]},
|
||||
{"day": 4, "time": "15:00", "type": "dato_curioso", "platforms": ["x", "threads"]},
|
||||
|
||||
# Productos - Lunes, Miércoles, Viernes
|
||||
{"day": 0, "time": "12:00", "type": "producto", "platforms": ["facebook", "instagram"], "approval": True},
|
||||
{"day": 2, "time": "12:00", "type": "producto", "platforms": ["facebook", "instagram"], "approval": True},
|
||||
{"day": 4, "time": "12:00", "type": "producto", "platforms": ["facebook", "instagram"], "approval": True},
|
||||
|
||||
# Servicios - Martes, Jueves
|
||||
{"day": 1, "time": "11:00", "type": "servicio", "platforms": ["x", "facebook", "instagram"], "approval": True},
|
||||
{"day": 3, "time": "11:00", "type": "servicio", "platforms": ["x", "facebook", "instagram"], "approval": True},
|
||||
|
||||
# Frases motivacionales - Lunes, Miércoles, Viernes
|
||||
{"day": 0, "time": "07:00", "type": "frase_motivacional", "platforms": ["instagram", "facebook"]},
|
||||
{"day": 2, "time": "07:00", "type": "frase_motivacional", "platforms": ["instagram", "facebook"]},
|
||||
{"day": 4, "time": "07:00", "type": "frase_motivacional", "platforms": ["instagram", "facebook"]},
|
||||
]
|
||||
|
||||
for entry in calendar_entries:
|
||||
hour, minute = map(int, entry["time"].split(":"))
|
||||
|
||||
new_entry = ContentCalendar(
|
||||
day_of_week=entry["day"],
|
||||
time=time(hour=hour, minute=minute),
|
||||
content_type=entry["type"],
|
||||
platforms=entry["platforms"],
|
||||
requires_approval=entry.get("approval", False),
|
||||
is_active=True
|
||||
)
|
||||
db.add(new_entry)
|
||||
|
||||
db.commit()
|
||||
print(f"✅ {len(calendar_entries)} entradas de calendario creadas")
|
||||
|
||||
finally:
|
||||
db.close()
|
||||
|
||||
|
||||
def seed_services():
|
||||
"""Crear servicios iniciales."""
|
||||
db = SessionLocal()
|
||||
|
||||
try:
|
||||
services = [
|
||||
{
|
||||
"name": "Chatbots Inteligentes",
|
||||
"description": "Implementamos chatbots con IA para WhatsApp e Instagram que atienden a tus clientes 24/7.",
|
||||
"short_description": "Chatbots IA para WhatsApp e Instagram",
|
||||
"category": "automatizacion",
|
||||
"target_sectors": ["retail", "servicios", "hoteles"],
|
||||
"benefits": ["Atención 24/7", "Respuestas instantáneas", "Integración con CRM", "Escalamiento a humanos"],
|
||||
"call_to_action": "Agenda una demo gratuita"
|
||||
},
|
||||
{
|
||||
"name": "Sistemas para Hoteles",
|
||||
"description": "Software completo para gestión hotelera: reservas, nómina, inventario y dashboards financieros.",
|
||||
"short_description": "Gestión hotelera integral",
|
||||
"category": "desarrollo",
|
||||
"target_sectors": ["hoteles", "turismo"],
|
||||
"benefits": ["Control de reservas", "Gestión de nómina", "Inventario automatizado", "Reportes en tiempo real"],
|
||||
"call_to_action": "Solicita una cotización"
|
||||
},
|
||||
{
|
||||
"name": "Automatización de Procesos",
|
||||
"description": "Automatizamos tareas repetitivas con bots y flujos de trabajo inteligentes.",
|
||||
"short_description": "Automatiza tareas repetitivas",
|
||||
"category": "automatizacion",
|
||||
"target_sectors": ["empresas", "pymes", "corporativos"],
|
||||
"benefits": ["Ahorro de tiempo", "Reducción de errores", "Mayor productividad", "ROI medible"],
|
||||
"call_to_action": "Cuéntanos tu proceso"
|
||||
},
|
||||
{
|
||||
"name": "Integración de IA",
|
||||
"description": "Integramos inteligencia artificial en tus procesos de negocio para tomar mejores decisiones.",
|
||||
"short_description": "IA para tu negocio",
|
||||
"category": "ia",
|
||||
"target_sectors": ["empresas", "pymes", "corporativos"],
|
||||
"benefits": ["Análisis predictivo", "Automatización inteligente", "Insights de datos", "Ventaja competitiva"],
|
||||
"call_to_action": "Descubre cómo la IA puede ayudarte"
|
||||
}
|
||||
]
|
||||
|
||||
for service in services:
|
||||
existing = db.query(Service).filter(Service.name == service["name"]).first()
|
||||
|
||||
if not existing:
|
||||
new_service = Service(**service, is_active=True)
|
||||
db.add(new_service)
|
||||
|
||||
db.commit()
|
||||
print(f"✅ {len(services)} servicios creados")
|
||||
|
||||
finally:
|
||||
db.close()
|
||||
|
||||
|
||||
def main():
|
||||
"""Ejecutar todos los seeds."""
|
||||
print("🌱 Iniciando seed de base de datos...\n")
|
||||
|
||||
# Crear tablas
|
||||
Base.metadata.create_all(bind=engine)
|
||||
print("✅ Tablas creadas\n")
|
||||
|
||||
seed_tips()
|
||||
seed_calendar()
|
||||
seed_services()
|
||||
|
||||
print("\n✅ Seed completado!")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user