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, }) }