diff --git a/internal/handler/outlet_handler.go b/internal/handler/outlet_handler.go index 5029e7d..946d2d1 100644 --- a/internal/handler/outlet_handler.go +++ b/internal/handler/outlet_handler.go @@ -102,6 +102,37 @@ func (h *OutletHandler) GetOutlet(c *gin.Context) { util.HandleResponse(c.Writer, c.Request, outletResponse, "OutletHandler::GetOutlet") } +func (h *OutletHandler) CreateOutlet(c *gin.Context) { + ctx := c.Request.Context() + contextInfo := appcontext.FromGinContext(ctx) + + var req contract.CreateOutletRequest + if err := c.ShouldBindJSON(&req); err != nil { + logger.FromContext(ctx).WithError(err).Error("OutletHandler::CreateOutlet -> Failed to bind JSON") + validationResponseError := contract.NewResponseError(constants.MalformedFieldErrorCode, constants.RequestEntity, "Invalid request body") + util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{validationResponseError}), "OutletHandler::CreateOutlet") + return + } + + req.OrganizationID = contextInfo.OrganizationID + + validationError, validationErrorCode := h.outletValidator.ValidateCreateOutletRequest(&req) + if validationError != nil { + logger.FromContext(ctx).WithError(validationError).Error("OutletHandler::CreateOutlet -> request validation failed") + validationResponseError := contract.NewResponseError(validationErrorCode, constants.RequestEntity, validationError.Error()) + util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{validationResponseError}), "OutletHandler::CreateOutlet") + return + } + + outletResponse := h.outletService.CreateOutlet(ctx, &req) + if outletResponse.HasErrors() { + errorResp := outletResponse.GetErrors()[0] + logger.FromContext(ctx).WithError(errorResp).Error("OutletHandler::CreateOutlet -> Failed to create outlet from service") + } + + util.HandleResponse(c.Writer, c.Request, outletResponse, "OutletHandler::CreateOutlet") +} + func (h *OutletHandler) UpdateOutlet(c *gin.Context) { ctx := c.Request.Context() contextInfo := appcontext.FromGinContext(ctx)