// Package main is the entry point for the chat-svc service. package main import ( "context" "git.threesix.ai/jordan/sp4-v2-1770499323/pkg/app" "git.threesix.ai/jordan/sp4-v2-1770499323/pkg/database" "git.threesix.ai/jordan/sp4-v2-1770499323/pkg/logging" "git.threesix.ai/jordan/sp4-v2-1770499323/pkg/queue" "git.threesix.ai/jordan/sp4-v2-1770499323/services/chat-svc/internal/adapter/authclient" "git.threesix.ai/jordan/sp4-v2-1770499323/services/chat-svc/internal/adapter/jobqueue" "git.threesix.ai/jordan/sp4-v2-1770499323/services/chat-svc/internal/adapter/memory" "git.threesix.ai/jordan/sp4-v2-1770499323/services/chat-svc/internal/api" "git.threesix.ai/jordan/sp4-v2-1770499323/services/chat-svc/internal/config" "git.threesix.ai/jordan/sp4-v2-1770499323/services/chat-svc/internal/port" "git.threesix.ai/jordan/sp4-v2-1770499323/services/chat-svc/internal/service" ) func main() { // Create logger logger := logging.Default() // Load config cfg := config.Load() // Create adapters (repositories) exampleRepo := memory.NewExampleRepository() // Create adapters (inter-service auth client) var authValidator port.AuthValidator authClient, err := authclient.New() if err != nil { logger.Warn("auth-svc client not configured, token validation disabled", "error", err) } else { authValidator = authClient } // Create adapters (job queue producer) var taskProducer port.TaskProducer if cfg.Database.URL != "" { pool, err := database.Connect(context.Background(), cfg.Database.URL, database.Options{ MaxOpenConns: cfg.Database.MaxOpenConns, MaxIdleConns: cfg.Database.MaxIdleConns, ConnMaxLifetime: cfg.Database.ConnMaxLifetime, }) if err != nil { logger.Warn("database not available, task queue disabled", "error", err) } else { defer pool.Close() jobQueue := queue.NewPostgresQueue(pool.DB, logger) taskProducer = jobqueue.New(jobQueue) logger.Info("task queue enabled") } } else { logger.Warn("DATABASE_URL not configured, task queue disabled") } // Create services (business logic) exampleService := service.NewExampleService(exampleRepo, logger) // Create application application := app.New("chat-svc", app.WithDefaultPort(8001)) // Register routes with dependency injection api.RegisterRoutes(application, exampleService, authValidator, taskProducer) // Start server application.Run() }