// Package main is the entry point for the api service. package main import ( "os" "github.com/redis/go-redis/v9" "git.threesix.ai/jordan/sp2-verify-1770324794/pkg/app" "git.threesix.ai/jordan/sp2-verify-1770324794/pkg/logging" "git.threesix.ai/jordan/sp2-verify-1770324794/pkg/redisqueue" "git.threesix.ai/jordan/sp2-verify-1770324794/services/api/internal/adapter/memory" "git.threesix.ai/jordan/sp2-verify-1770324794/services/api/internal/api" "git.threesix.ai/jordan/sp2-verify-1770324794/services/api/internal/config" "git.threesix.ai/jordan/sp2-verify-1770324794/services/api/internal/service" ) func main() { // Create logger logger := logging.Default() // Load configuration cfg := config.Load() // Create Redis client redisOpts, err := redis.ParseURL(cfg.RedisURL) if err != nil { logger.Error("failed to parse redis url", "error", err) os.Exit(1) } redisClient := redis.NewClient(redisOpts) // Create adapters (repositories) exampleRepo := memory.NewExampleRepository() jobQueue := redisqueue.NewRedisQueue(redisClient, logger) // Create services (business logic) exampleService := service.NewExampleService(exampleRepo, logger) jobService := service.NewJobService(jobQueue, logger) // Create application application := app.New("api", app.WithDefaultPort(8001)) // Close Redis on shutdown application.OnShutdown(func() { if err := redisClient.Close(); err != nil { logger.Error("failed to close redis client", "error", err) } }) // Register routes with dependency injection api.RegisterRoutes(application, exampleService, jobService) // Start server application.Run() }