sp2-verify-1770324794/services/api/cmd/server/main.go
rdev-worker 154c535204
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
build: /implement-feature async-jobs --requirements 'API: POST /jobs pushes ...
2026-02-05 21:04:47 +00:00

57 lines
1.6 KiB
Go

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