// Package main is the entry point for the preferences-api service. package main import ( "context" "embed" "git.threesix.ai/jordan/slate-test-1770505673/pkg/app" "git.threesix.ai/jordan/slate-test-1770505673/pkg/database" "git.threesix.ai/jordan/slate-test-1770505673/pkg/logging" "git.threesix.ai/jordan/slate-test-1770505673/services/preferences-api/internal/adapter/postgres" "git.threesix.ai/jordan/slate-test-1770505673/services/preferences-api/internal/api" "git.threesix.ai/jordan/slate-test-1770505673/services/preferences-api/internal/config" "git.threesix.ai/jordan/slate-test-1770505673/services/preferences-api/internal/service" ) //go:embed migrations/*.sql var migrationsFS embed.FS func main() { logger := logging.Default() cfg := config.Load() // Connect to database pool := database.MustConnect(context.Background(), cfg.Database.URL, database.Options{ MaxOpenConns: cfg.Database.MaxOpenConns, MaxIdleConns: cfg.Database.MaxIdleConns, }) // Run migrations database.MustRunMigrations(context.Background(), pool, migrationsFS, "migrations") // Create adapters prefRepo := postgres.NewPreferenceRepository(pool.DB, logger) // Create services prefService := service.NewPreferenceService(prefRepo, logger) // Create application application := app.New("preferences-api", app.WithDefaultPort(8001)) // Close DB pool on shutdown application.OnShutdown(func(ctx context.Context) error { return pool.Close() }) // Register routes api.RegisterRoutes(application, prefService) // Start server application.Run() }