From c573b23d7604ef81f6681146e2d7286344c1a8e2 Mon Sep 17 00:00:00 2001 From: ryan Date: Tue, 12 May 2026 18:32:36 +0700 Subject: [PATCH] Add outlet_id to use context or request --- internal/handler/analytics_handler.go | 24 +++++++++++++++++++----- internal/handler/report_handler.go | 18 +++++++++++++++++- 2 files changed, 36 insertions(+), 6 deletions(-) diff --git a/internal/handler/analytics_handler.go b/internal/handler/analytics_handler.go index f7a3e04..debe736 100644 --- a/internal/handler/analytics_handler.go +++ b/internal/handler/analytics_handler.go @@ -8,6 +8,7 @@ import ( "apskel-pos-be/internal/util" "github.com/gin-gonic/gin" + "github.com/google/uuid" ) type AnalyticsHandler struct { @@ -25,6 +26,18 @@ func NewAnalyticsHandler( } } +func (h *AnalyticsHandler) resolveOutletID(c *gin.Context, contextOutletID uuid.UUID) *uuid.UUID { + if outletIDStr := c.Query("outlet_id"); outletIDStr != "" { + if parsedID, err := uuid.Parse(outletIDStr); err == nil { + return &parsedID + } + } + if contextOutletID != uuid.Nil { + return &contextOutletID + } + return nil +} + func (h *AnalyticsHandler) GetPaymentMethodAnalytics(c *gin.Context) { ctx := c.Request.Context() contextInfo := appcontext.FromGinContext(ctx) @@ -36,7 +49,7 @@ func (h *AnalyticsHandler) GetPaymentMethodAnalytics(c *gin.Context) { } req.OrganizationID = contextInfo.OrganizationID - req.OutletID = &contextInfo.OutletID + req.OutletID = h.resolveOutletID(c, contextInfo.OutletID) modelReq := transformer.PaymentMethodAnalyticsContractToModel(&req) response, err := h.analyticsService.GetPaymentMethodAnalytics(ctx, modelReq) @@ -60,7 +73,7 @@ func (h *AnalyticsHandler) GetSalesAnalytics(c *gin.Context) { } req.OrganizationID = contextInfo.OrganizationID - req.OutletID = &contextInfo.OutletID + req.OutletID = h.resolveOutletID(c, contextInfo.OutletID) modelReq := transformer.SalesAnalyticsContractToModel(&req) response, err := h.analyticsService.GetSalesAnalytics(ctx, modelReq) @@ -84,7 +97,7 @@ func (h *AnalyticsHandler) GetProductAnalytics(c *gin.Context) { } req.OrganizationID = contextInfo.OrganizationID - req.OutletID = &contextInfo.OutletID + req.OutletID = h.resolveOutletID(c, contextInfo.OutletID) modelReq := transformer.ProductAnalyticsContractToModel(&req) response, err := h.analyticsService.GetProductAnalytics(ctx, modelReq) @@ -108,7 +121,7 @@ func (h *AnalyticsHandler) GetProductAnalyticsPerCategory(c *gin.Context) { } req.OrganizationID = contextInfo.OrganizationID - req.OutletID = &contextInfo.OutletID + req.OutletID = h.resolveOutletID(c, contextInfo.OutletID) modelReq := transformer.ProductAnalyticsPerCategoryContractToModel(&req) response, err := h.analyticsService.GetProductAnalyticsPerCategory(ctx, modelReq) @@ -132,7 +145,7 @@ func (h *AnalyticsHandler) GetDashboardAnalytics(c *gin.Context) { } req.OrganizationID = contextInfo.OrganizationID - req.OutletID = &contextInfo.OutletID + req.OutletID = h.resolveOutletID(c, contextInfo.OutletID) modelReq := transformer.DashboardAnalyticsContractToModel(&req) response, err := h.analyticsService.GetDashboardAnalytics(ctx, modelReq) @@ -156,6 +169,7 @@ func (h *AnalyticsHandler) GetProfitLossAnalytics(c *gin.Context) { } req.OrganizationID = contextInfo.OrganizationID + req.OutletID = h.resolveOutletID(c, contextInfo.OutletID) modelReq, err := transformer.ProfitLossAnalyticsContractToModel(&req) if err != nil { util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{contract.NewResponseError("invalid_request", "AnalyticsHandler::GetProfitLossAnalytics", err.Error())}), "AnalyticsHandler::GetProfitLossAnalytics") diff --git a/internal/handler/report_handler.go b/internal/handler/report_handler.go index 4c00c24..dfc5c75 100644 --- a/internal/handler/report_handler.go +++ b/internal/handler/report_handler.go @@ -8,6 +8,7 @@ import ( "time" "github.com/gin-gonic/gin" + "github.com/google/uuid" ) type ReportHandler struct { @@ -19,11 +20,26 @@ func NewReportHandler(reportService service.ReportService, userService UserServi return &ReportHandler{reportService: reportService, userService: userService} } +func (h *ReportHandler) resolveOutletID(c *gin.Context, contextOutletID uuid.UUID) string { + if outletIDStr := c.Query("outlet_id"); outletIDStr != "" { + if _, err := uuid.Parse(outletIDStr); err == nil { + return outletIDStr + } + } + if pathOutletID := c.Param("outlet_id"); pathOutletID != "" { + return pathOutletID + } + if contextOutletID != uuid.Nil { + return contextOutletID.String() + } + return "" +} + func (h *ReportHandler) GetDailyTransactionReportPDF(c *gin.Context) { ctx := c.Request.Context() ci := appcontext.FromGinContext(ctx) - outletID := c.Param("outlet_id") + outletID := h.resolveOutletID(c, ci.OutletID) var dayPtr *time.Time if d := c.Query("date"); d != "" { if t, err := time.Parse("2006-01-02", d); err == nil {