72 lines
1.5 KiB
Go
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,
|
|
})
|
|
}
|