Files
Kazier/backend/cmd/server/main.go
T
2026-07-29 18:56:26 +02:00

64 lines
1.7 KiB
Go

package main
import (
"log"
"github.com/gin-gonic/gin"
"github.com/joho/godotenv"
"github.com/vaultdrop/backend/internal/auth"
"github.com/vaultdrop/backend/internal/config"
"github.com/vaultdrop/backend/internal/db"
"github.com/vaultdrop/backend/internal/handler"
"github.com/vaultdrop/backend/internal/service"
)
func main() {
_ = godotenv.Load()
cfg := config.Load()
database, err := db.Connect()
if err != nil {
log.Fatalf("Failed to connect to database: %v", err)
}
defer database.Close()
migrationsPath := "file://internal/db/migrations"
if err := db.RunMigrations(migrationsPath); err != nil {
log.Fatalf("Failed to run migrations: %v", err)
}
queries := db.New(database)
eventBroker := service.NewEventBroker()
resourceSvc := service.NewResourceService(database, queries, cfg)
ocrSvc := service.NewOCRService(database, queries, cfg, resourceSvc, eventBroker)
conversionSvc := service.NewConversionService(queries, cfg)
urlSvc := service.NewURLService(cfg.HMACSecret, cfg.ServerHost, cfg.URLExpiryMinutes)
authSvc, err := auth.NewAuthService(database, queries, cfg)
if err != nil {
log.Fatalf("Failed to create auth service: %v", err)
}
rebacSvc := service.NewRebacService(queries)
placementSvc := service.NewPlacementService(queries)
syncSvc := service.NewSyncService(queries)
ocrSvc.Start(cfg.OCRWorkers)
defer ocrSvc.Stop()
conversionSvc.Start(cfg.ConversionWorkers)
defer conversionSvc.Stop()
h := handler.New(resourceSvc, ocrSvc, urlSvc, auth.NewAuthHandler(authSvc), conversionSvc, rebacSvc, placementSvc, syncSvc, eventBroker)
r := gin.Default()
handler.SetupRoutes(r, h, authSvc)
log.Printf("Server starting on port %s", cfg.Port)
if err := r.Run(":" + cfg.Port); err != nil {
log.Fatal(err)
}
}