sp4-v2-1770499323/services/chat-svc/cmd/server/main.go
rdev-worker 34f37a44b8
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
build: /implement-feature mesh-interop --requirements 'Chat Service must cal...
2026-02-07 21:49:45 +00:00

71 lines
2.3 KiB
Go

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