Fix Analytics

This commit is contained in:
Aditya Siregar 2025-08-05 22:50:12 +07:00
parent 5741243425
commit 073681d4d5
6 changed files with 14 additions and 20 deletions

View File

@ -36,6 +36,7 @@ func (h *AnalyticsHandler) GetPaymentMethodAnalytics(c *gin.Context) {
}
req.OrganizationID = contextInfo.OrganizationID
req.OutletID = &contextInfo.OutletID
modelReq := transformer.PaymentMethodAnalyticsContractToModel(&req)
response, err := h.analyticsService.GetPaymentMethodAnalytics(ctx, modelReq)
@ -44,12 +45,10 @@ func (h *AnalyticsHandler) GetPaymentMethodAnalytics(c *gin.Context) {
return
}
// Transform model to contract
contractResp := transformer.PaymentMethodAnalyticsModelToContract(response)
util.HandleResponse(c.Writer, c.Request, contract.BuildSuccessResponse(contractResp), "AnalyticsHandler::GetPaymentMethodAnalytics")
}
// GetSalesAnalytics handles the request to get sales analytics
func (h *AnalyticsHandler) GetSalesAnalytics(c *gin.Context) {
ctx := c.Request.Context()
contextInfo := appcontext.FromGinContext(ctx)
@ -61,21 +60,19 @@ func (h *AnalyticsHandler) GetSalesAnalytics(c *gin.Context) {
}
req.OrganizationID = contextInfo.OrganizationID
req.OutletID = &contextInfo.OutletID
modelReq := transformer.SalesAnalyticsContractToModel(&req)
// Call service
response, err := h.analyticsService.GetSalesAnalytics(ctx, modelReq)
if err != nil {
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{contract.NewResponseError("internal_error", "AnalyticsHandler::GetSalesAnalytics", err.Error())}), "AnalyticsHandler::GetSalesAnalytics")
return
}
// Transform model to contract
contractResp := transformer.SalesAnalyticsModelToContract(response)
util.HandleResponse(c.Writer, c.Request, contract.BuildSuccessResponse(contractResp), "AnalyticsHandler::GetSalesAnalytics")
}
// GetProductAnalytics handles the request to get product analytics
func (h *AnalyticsHandler) GetProductAnalytics(c *gin.Context) {
ctx := c.Request.Context()
contextInfo := appcontext.FromGinContext(ctx)
@ -87,22 +84,19 @@ func (h *AnalyticsHandler) GetProductAnalytics(c *gin.Context) {
}
req.OrganizationID = contextInfo.OrganizationID
// Transform contract to model
req.OutletID = &contextInfo.OutletID
modelReq := transformer.ProductAnalyticsContractToModel(&req)
// Call service
response, err := h.analyticsService.GetProductAnalytics(ctx, modelReq)
if err != nil {
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{contract.NewResponseError("internal_error", "AnalyticsHandler::GetProductAnalytics", err.Error())}), "AnalyticsHandler::GetProductAnalytics")
return
}
// Transform model to contract
contractResp := transformer.ProductAnalyticsModelToContract(response)
util.HandleResponse(c.Writer, c.Request, contract.BuildSuccessResponse(contractResp), "AnalyticsHandler::GetProductAnalytics")
}
// GetDashboardAnalytics handles the request to get dashboard analytics
func (h *AnalyticsHandler) GetDashboardAnalytics(c *gin.Context) {
ctx := c.Request.Context()
contextInfo := appcontext.FromGinContext(ctx)
@ -114,6 +108,7 @@ func (h *AnalyticsHandler) GetDashboardAnalytics(c *gin.Context) {
}
req.OrganizationID = contextInfo.OrganizationID
req.OutletID = &contextInfo.OutletID
modelReq := transformer.DashboardAnalyticsContractToModel(&req)
response, err := h.analyticsService.GetDashboardAnalytics(ctx, modelReq)
@ -122,7 +117,6 @@ func (h *AnalyticsHandler) GetDashboardAnalytics(c *gin.Context) {
return
}
// Transform model to contract
contractResp := transformer.DashboardAnalyticsModelToContract(response)
util.HandleResponse(c.Writer, c.Request, contract.BuildSuccessResponse(contractResp), "AnalyticsHandler::GetDashboardAnalytics")
}

View File

@ -44,6 +44,7 @@ func (m *AuthMiddleware) RequireAuth() gin.HandlerFunc {
setKeyInContext(c, appcontext.UserRoleKey, userResponse.Role)
setKeyInContext(c, appcontext.OrganizationIDKey, userResponse.OrganizationID.String())
setKeyInContext(c, appcontext.UserIDKey, userResponse.ID.String())
setKeyInContext(c, appcontext.OutletIDKey, userResponse.OutletID.String())
logger.FromContext(c.Request.Context()).Infof("AuthMiddleware::RequireAuth -> User authenticated: %s", userResponse.Email)
c.Next()

View File

@ -37,7 +37,6 @@ func (p *AnalyticsProcessorImpl) GetPaymentMethodAnalytics(ctx context.Context,
return nil, fmt.Errorf("failed to get payment method analytics: %w", err)
}
// Calculate summary
var totalAmount float64
var totalOrders int64
var totalPayments int64

View File

@ -23,13 +23,11 @@ func NewIngredientProcessor(ingredientRepo IngredientRepository, unitRepo UnitRe
}
func (p *IngredientProcessorImpl) CreateIngredient(ctx context.Context, req *models.CreateIngredientRequest) (*models.IngredientResponse, error) {
// Validate unit exists
_, err := p.unitRepo.GetByID(ctx, req.UnitID, req.OrganizationID)
if err != nil {
return nil, err
}
// Create ingredient entity
ingredient := &entities.Ingredient{
ID: uuid.New(),
OrganizationID: req.OrganizationID,

View File

@ -29,12 +29,10 @@ func NewAnalyticsServiceImpl(analyticsProcessor processor.AnalyticsProcessor) *A
}
func (s *AnalyticsServiceImpl) GetPaymentMethodAnalytics(ctx context.Context, req *models.PaymentMethodAnalyticsRequest) (*models.PaymentMethodAnalyticsResponse, error) {
// Validate request
if err := s.validatePaymentMethodAnalyticsRequest(req); err != nil {
return nil, fmt.Errorf("validation error: %w", err)
}
// Process analytics request
response, err := s.analyticsProcessor.GetPaymentMethodAnalytics(ctx, req)
if err != nil {
return nil, fmt.Errorf("failed to get payment method analytics: %w", err)
@ -106,7 +104,6 @@ func (s *AnalyticsServiceImpl) validatePaymentMethodAnalyticsRequest(req *models
return fmt.Errorf("date_from cannot be after date_to")
}
// Validate groupBy if provided
if req.GroupBy != "" {
validGroupBy := map[string]bool{
"day": true,

View File

@ -26,7 +26,7 @@ func PaymentMethodAnalyticsContractToModel(req *contract.PaymentMethodAnalyticsR
}
if req.DateFrom == req.DateTo {
dateTo.AddDate(0, 0, 1)
dateTo = dateTo.AddDate(0, 0, 1)
}
return &models.PaymentMethodAnalyticsRequest{
@ -89,7 +89,7 @@ func SalesAnalyticsContractToModel(req *contract.SalesAnalyticsRequest) *models.
}
if req.DateFrom == req.DateTo {
dateTo.AddDate(0, 0, 1)
dateTo = dateTo.AddDate(0, 0, 1)
}
return &models.SalesAnalyticsRequest{
@ -156,9 +156,9 @@ func ProductAnalyticsContractToModel(req *contract.ProductAnalyticsRequest) *mod
}
if req.DateFrom == req.DateTo {
dateTo.AddDate(0, 0, 1)
dateTo = dateTo.AddDate(0, 0, 1)
}
return &models.ProductAnalyticsRequest{
OrganizationID: req.OrganizationID,
OutletID: req.OutletID,
@ -212,6 +212,11 @@ func DashboardAnalyticsContractToModel(req *contract.DashboardAnalyticsRequest)
dateTo = dt
}
}
if req.DateFrom == req.DateTo {
dateTo = dateTo.AddDate(0, 0, 1)
}
return &models.DashboardAnalyticsRequest{
OrganizationID: req.OrganizationID,
OutletID: req.OutletID,