omnix-sopiga/services/template-service/main.go

77 lines
1.8 KiB
Go
Raw Permalink Normal View History

2026-08-07 12:21:42 +07:00
package main
import (
"context"
"os"
"os/signal"
"syscall"
"time"
"github.com/gin-gonic/gin"
fwdb "github.com/yourorg/go-dw-platform/framework/db"
fwlogger "github.com/yourorg/go-dw-platform/framework/logger"
fwmiddleware "github.com/yourorg/go-dw-platform/framework/middleware"
"github.com/yourorg/go-dw-platform/services/template-service/handler"
"github.com/yourorg/go-dw-platform/services/template-service/repository"
"github.com/yourorg/go-dw-platform/services/template-service/service"
"github.com/yourorg/go-dw-platform/services/template-service/transformer"
)
func main() {
cfg := LoadConfig()
log := fwlogger.New("template-service")
ctx := context.Background()
pool, err := fwdb.NewPool(ctx, fwdb.Config{
DSN: cfg.DB.DSN,
MaxConns: cfg.DB.MaxConns,
MinConns: cfg.DB.MinConns,
MaxConnLifetime: cfg.DB.MaxConnLifetime,
MaxConnIdleTime: cfg.DB.MaxConnIdleTime,
})
if err != nil {
log.Error("failed to connect to database", "error", err)
os.Exit(1)
}
defer pool.Close()
repo := repository.New(pool)
tf := transformer.New()
svc := service.New(
repo,
tf,
cfg.Batch.Size,
time.Duration(cfg.Batch.TimeoutSec)*time.Second,
cfg.Batch.MaxRetries,
cfg.Batch.RetryDelay,
)
ingestHandler := handler.New(svc, log)
healthHandler := handler.NewHealthHandler(pool)
router := gin.New()
router.Use(fwmiddleware.Logging(log))
router.Use(gin.Recovery())
router.GET("/health", healthHandler.Health)
api := router.Group("/api")
api.Use(fwmiddleware.AuthMiddleware())
api.POST("/ingest", ingestHandler.IngestOrders)
go func() {
if err := router.Run(":" + cfg.Port); err != nil {
log.Error("server stopped", "error", err)
}
}()
sigChan := make(chan os.Signal, 1)
signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM)
<-sigChan
log.Info("shutting down gracefully")
}