omnix-sopiga/services/template-service/handler/ingest.go
2026-08-07 12:21:42 +07:00

72 lines
1.5 KiB
Go

package handler
import (
"errors"
"github.com/gin-gonic/gin"
fwlogger "github.com/yourorg/go-dw-platform/framework/logger"
"github.com/yourorg/go-dw-platform/services/template-service/dto"
"github.com/yourorg/go-dw-platform/services/template-service/service"
)
type Handler struct {
service *service.Service
logger *fwlogger.Logger
}
func New(svc *service.Service, log *fwlogger.Logger) *Handler {
return &Handler{service: svc, logger: log}
}
func (h *Handler) IngestOrders(c *gin.Context) {
ctx := c.Request.Context()
requestID := c.GetString("request_id")
var req dto.IngestRequest
if err := c.ShouldBindJSON(&req); err != nil {
h.logger.Error("validation failed",
"request_id", requestID,
"error", err)
c.JSON(400, dto.ErrorResponse{
Success: false,
Message: "validation failed",
ErrorCode: "VALIDATION_ERROR",
RequestID: requestID,
})
return
}
result, err := h.service.Process(ctx, &req)
if err != nil {
if errors.Is(err, service.ErrDuplicate) {
c.JSON(409, dto.ErrorResponse{
Success: false,
Message: "duplicate order",
ErrorCode: "DUPLICATE_ORDER",
RequestID: requestID,
})
return
}
h.logger.Error("process failed",
"request_id", requestID,
"error", err)
c.JSON(500, dto.ErrorResponse{
Success: false,
Message: "failed to process order",
ErrorCode: "INTERNAL_ERROR",
RequestID: requestID,
})
return
}
c.JSON(200, dto.SuccessResponse{
Success: true,
Message: "order processed successfully",
Data: result,
RequestID: requestID,
})
}