64 lines
1.7 KiB
Go
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(database, 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)
|
|
}
|
|
}
|