Add outlet_id to use context or request

This commit is contained in:
ryan 2026-05-12 18:32:36 +07:00
parent f73a5d533c
commit c573b23d76
2 changed files with 36 additions and 6 deletions

View File

@ -8,6 +8,7 @@ import (
"apskel-pos-be/internal/util" "apskel-pos-be/internal/util"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/google/uuid"
) )
type AnalyticsHandler struct { 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) { func (h *AnalyticsHandler) GetPaymentMethodAnalytics(c *gin.Context) {
ctx := c.Request.Context() ctx := c.Request.Context()
contextInfo := appcontext.FromGinContext(ctx) contextInfo := appcontext.FromGinContext(ctx)
@ -36,7 +49,7 @@ func (h *AnalyticsHandler) GetPaymentMethodAnalytics(c *gin.Context) {
} }
req.OrganizationID = contextInfo.OrganizationID req.OrganizationID = contextInfo.OrganizationID
req.OutletID = &contextInfo.OutletID req.OutletID = h.resolveOutletID(c, contextInfo.OutletID)
modelReq := transformer.PaymentMethodAnalyticsContractToModel(&req) modelReq := transformer.PaymentMethodAnalyticsContractToModel(&req)
response, err := h.analyticsService.GetPaymentMethodAnalytics(ctx, modelReq) response, err := h.analyticsService.GetPaymentMethodAnalytics(ctx, modelReq)
@ -60,7 +73,7 @@ func (h *AnalyticsHandler) GetSalesAnalytics(c *gin.Context) {
} }
req.OrganizationID = contextInfo.OrganizationID req.OrganizationID = contextInfo.OrganizationID
req.OutletID = &contextInfo.OutletID req.OutletID = h.resolveOutletID(c, contextInfo.OutletID)
modelReq := transformer.SalesAnalyticsContractToModel(&req) modelReq := transformer.SalesAnalyticsContractToModel(&req)
response, err := h.analyticsService.GetSalesAnalytics(ctx, modelReq) response, err := h.analyticsService.GetSalesAnalytics(ctx, modelReq)
@ -84,7 +97,7 @@ func (h *AnalyticsHandler) GetProductAnalytics(c *gin.Context) {
} }
req.OrganizationID = contextInfo.OrganizationID req.OrganizationID = contextInfo.OrganizationID
req.OutletID = &contextInfo.OutletID req.OutletID = h.resolveOutletID(c, contextInfo.OutletID)
modelReq := transformer.ProductAnalyticsContractToModel(&req) modelReq := transformer.ProductAnalyticsContractToModel(&req)
response, err := h.analyticsService.GetProductAnalytics(ctx, modelReq) response, err := h.analyticsService.GetProductAnalytics(ctx, modelReq)
@ -108,7 +121,7 @@ func (h *AnalyticsHandler) GetProductAnalyticsPerCategory(c *gin.Context) {
} }
req.OrganizationID = contextInfo.OrganizationID req.OrganizationID = contextInfo.OrganizationID
req.OutletID = &contextInfo.OutletID req.OutletID = h.resolveOutletID(c, contextInfo.OutletID)
modelReq := transformer.ProductAnalyticsPerCategoryContractToModel(&req) modelReq := transformer.ProductAnalyticsPerCategoryContractToModel(&req)
response, err := h.analyticsService.GetProductAnalyticsPerCategory(ctx, modelReq) response, err := h.analyticsService.GetProductAnalyticsPerCategory(ctx, modelReq)
@ -132,7 +145,7 @@ func (h *AnalyticsHandler) GetDashboardAnalytics(c *gin.Context) {
} }
req.OrganizationID = contextInfo.OrganizationID req.OrganizationID = contextInfo.OrganizationID
req.OutletID = &contextInfo.OutletID req.OutletID = h.resolveOutletID(c, contextInfo.OutletID)
modelReq := transformer.DashboardAnalyticsContractToModel(&req) modelReq := transformer.DashboardAnalyticsContractToModel(&req)
response, err := h.analyticsService.GetDashboardAnalytics(ctx, modelReq) response, err := h.analyticsService.GetDashboardAnalytics(ctx, modelReq)
@ -156,6 +169,7 @@ func (h *AnalyticsHandler) GetProfitLossAnalytics(c *gin.Context) {
} }
req.OrganizationID = contextInfo.OrganizationID req.OrganizationID = contextInfo.OrganizationID
req.OutletID = h.resolveOutletID(c, contextInfo.OutletID)
modelReq, err := transformer.ProfitLossAnalyticsContractToModel(&req) modelReq, err := transformer.ProfitLossAnalyticsContractToModel(&req)
if err != nil { if err != nil {
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{contract.NewResponseError("invalid_request", "AnalyticsHandler::GetProfitLossAnalytics", err.Error())}), "AnalyticsHandler::GetProfitLossAnalytics") util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{contract.NewResponseError("invalid_request", "AnalyticsHandler::GetProfitLossAnalytics", err.Error())}), "AnalyticsHandler::GetProfitLossAnalytics")

View File

@ -8,6 +8,7 @@ import (
"time" "time"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/google/uuid"
) )
type ReportHandler struct { type ReportHandler struct {
@ -19,11 +20,26 @@ func NewReportHandler(reportService service.ReportService, userService UserServi
return &ReportHandler{reportService: reportService, userService: userService} 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) { func (h *ReportHandler) GetDailyTransactionReportPDF(c *gin.Context) {
ctx := c.Request.Context() ctx := c.Request.Context()
ci := appcontext.FromGinContext(ctx) ci := appcontext.FromGinContext(ctx)
outletID := c.Param("outlet_id") outletID := h.resolveOutletID(c, ci.OutletID)
var dayPtr *time.Time var dayPtr *time.Time
if d := c.Query("date"); d != "" { if d := c.Query("date"); d != "" {
if t, err := time.Parse("2006-01-02", d); err == nil { if t, err := time.Parse("2006-01-02", d); err == nil {