71 lines
2.3 KiB
Go
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()
|
|
}
|