package main import ( "flag" "log" "github.com/gofiber/fiber/v2/middleware/cors" "github.com/pyroscope-io/pyroscope/pkg/agent/profiler" "github.com/sujit-baniya/fiber-boilerplate/app" "github.com/sujit-baniya/fiber-boilerplate/migrations" "github.com/sujit-baniya/fiber-boilerplate/pkg/models" "github.com/sujit-baniya/fiber-boilerplate/pkg/services" "github.com/sujit-baniya/fiber-boilerplate/rest/routes" ) func main() { configFile := flag.String("config", "config.yml", "User Config file from user") migrate := flag.Bool("migrate", false, "Update db structure") flag.Parse() // Cargar configuración app.Load(*configFile) // Configurar Pyroscope profiler if app.Http.Profiler.Enabled { _, _ = profiler.Start(profiler.Config{ ApplicationName: app.Http.Server.Name, ServerAddress: app.Http.Profiler.Server, }) } // Actualizar versión del servidor app.Http.Server.Version = app.Version // Habilitar CORS app.Http.Server.App.Use(cors.New(cors.Config{ AllowOrigins: "*", AllowMethods: "GET,POST,PUT,DELETE,OPTIONS", AllowHeaders: "Content-Type, Authorization", })) if *migrate { // Ejecutar migraciones migrations.Migrate() } else { // Crear/actualizar tablas de Renovaciones e idempotente) migrations.MigrateRenovaciones() // Crear/actualizar tablas de Portal, Telegram y Proyectos migrations.MigratePortal() // Crear tablas de integraciones y pasarelas si no existen app.Http.Database.DB.AutoMigrate( &models.QueryHistory{}, &models.HostingerConfig{}, &models.CloudflareConfig{}, &models.BoldConfig{}, &models.BoldWebhookLog{}, &models.BoldCallbackLog{}, &models.DlocalPaymentLog{}, // Documentación por SaaS &models.SaasProducto{}, &models.DocCategoria{}, &models.DocPagina{}, // Integraciones SaaS (dispatcher de pagos) &models.SaasApiConfig{}, &models.SaasDispatchLog{}, // Notificaciones &models.NotifEventoConfig{}, &models.SistemaNotificacion{}, // Shield &models.ShieldConfig{}, // Partner &models.PartnerRecurso{}, &models.PartnerComunicado{}, // Portal: recuperación de contraseña &models.PortalPasswordResetToken{}, // Integración VCard API Admin &models.VcardApiConfig{}, ) // Seed automático (idempotente) de módulos del sistema migrations.SeedRenovaciones() migrations.SeedIntegraciones() migrations.SeedPasarelas() migrations.SeedSaas() migrations.SeedServidores() migrations.SeedAdministracion() migrations.SeedPlantillasBase() migrations.SeedTelegram() migrations.SeedPortalClientes() migrations.SeedNotifDefaults() migrations.SeedShield() migrations.SeedPartnerRecursos() // Iniciar cron de vencimientos services.IniciarCron() defer services.DetenerCron() // Cargar rutas routes.LoadRoutes(app.Http.Server.App) app.Http.Route404() log.Fatal(app.Http.Server.ServeWithGraceFullShutdown()) } }