53 lines
1.5 KiB
Go
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()
|
|
}
|