58 lines
1.4 KiB
Go
58 lines
1.4 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)
|
|
|
|
fileSvc := service.NewFileService(queries, cfg)
|
|
ocrSvc := service.NewOCRService(cfg, fileSvc)
|
|
conversionSvc := service.NewConversionService(queries, cfg)
|
|
urlSvc := service.NewURLService(cfg.HMACSecret, cfg.ServerHost, cfg.URLExpiryMinutes)
|
|
authSvc, err := auth.NewAuthService(queries, cfg)
|
|
if err != nil {
|
|
log.Fatalf("Failed to create auth service: %v", err)
|
|
}
|
|
|
|
ocrSvc.Start()
|
|
defer ocrSvc.Stop()
|
|
|
|
conversionSvc.Start()
|
|
defer conversionSvc.Stop()
|
|
|
|
h := handler.New(fileSvc, ocrSvc, urlSvc, auth.NewAuthHandler(authSvc), conversionSvc)
|
|
|
|
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)
|
|
}
|
|
}
|