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