package main import ( "context" "log" "senlinai-agent/backend/internal/config" "senlinai-agent/backend/internal/crontab" "senlinai-agent/backend/internal/httpx" "senlinai-agent/backend/internal/initdb" "senlinai-agent/backend/internal/logic/ai" "senlinai-agent/backend/internal/logic/auth" "senlinai-agent/backend/internal/logic/dataset" "senlinai-agent/backend/internal/logic/documents" "senlinai-agent/backend/internal/logic/inbox" "senlinai-agent/backend/internal/logic/projects" "senlinai-agent/backend/internal/logic/search" "senlinai-agent/backend/internal/logic/tasks" "senlinai-agent/backend/internal/models" ) func main() { cfg := config.Load() err := models.New(cfg.DSN) if err != nil { log.Fatal(err) } if err := initdb.New(models.DBService); err != nil { log.Fatal(err) } authService := auth.NewService(cfg.AuthSecret) datasetService := dataset.NewService(models.DBService) datasetHandler := dataset.NewHandler(datasetService) datasetScheduler := crontab.NewDatasetScheduler(datasetService, log.Default()) projectService := projects.NewService() documentService := documents.NewService(models.DBService, cfg.StorageDir) taskService := tasks.NewService(models.DBService) projectHandler := projects.NewHandler(projectService) tagHandler := projects.NewTagHandler(projectService) channelHandler := projects.NewChannelHandler(projectService) cronHandler := projects.NewCronHandler(projectService) taskHandler := tasks.NewHandler(taskService) documentHandler := documents.NewHandler(documentService, cfg.MaxUploadBytes) inboxHandler := inbox.NewHandler(inbox.NewService(inbox.StaticAnalyzer{})) searchHandler := search.NewHandler(search.NewService(models.DBService)) aiGateway := ai.NewGatewayWithSecret(cfg.SystemAIKey, cfg.AIKeyEncryptionSecret) aiHandler := ai.NewHandler(ai.NewSessionService(aiGateway)) authHandler := auth.NewHandler(authService) appRouter := httpx.NewProtectedRouter( cfg, authService.VerifySession, authHandler, datasetHandler, projectHandler, tagHandler, channelHandler, cronHandler, taskHandler, documentHandler, inboxHandler, searchHandler, aiHandler, ) schedulerContext, stopScheduler := context.WithCancel(context.Background()) defer stopScheduler() go datasetScheduler.Run(schedulerContext) if err := appRouter.Run(":" + cfg.Port); err != nil { log.Fatal(err) } }