Files
agent/backend/cmd/api/main.go

74 lines
2.3 KiB
Go

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)
}
}