slate-test-1770505673/services/preferences-api/cmd/server/main.go
rdev-worker 868f79c67a
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
build: /implement-feature user-preferences
2026-02-07 23:47:42 +00:00

53 lines
1.5 KiB
Go

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