Fix Analytics
This commit is contained in:
parent
5741243425
commit
073681d4d5
@ -36,6 +36,7 @@ func (h *AnalyticsHandler) GetPaymentMethodAnalytics(c *gin.Context) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
req.OrganizationID = contextInfo.OrganizationID
|
req.OrganizationID = contextInfo.OrganizationID
|
||||||
|
req.OutletID = &contextInfo.OutletID
|
||||||
modelReq := transformer.PaymentMethodAnalyticsContractToModel(&req)
|
modelReq := transformer.PaymentMethodAnalyticsContractToModel(&req)
|
||||||
|
|
||||||
response, err := h.analyticsService.GetPaymentMethodAnalytics(ctx, modelReq)
|
response, err := h.analyticsService.GetPaymentMethodAnalytics(ctx, modelReq)
|
||||||
@ -44,12 +45,10 @@ func (h *AnalyticsHandler) GetPaymentMethodAnalytics(c *gin.Context) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// Transform model to contract
|
|
||||||
contractResp := transformer.PaymentMethodAnalyticsModelToContract(response)
|
contractResp := transformer.PaymentMethodAnalyticsModelToContract(response)
|
||||||
util.HandleResponse(c.Writer, c.Request, contract.BuildSuccessResponse(contractResp), "AnalyticsHandler::GetPaymentMethodAnalytics")
|
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) {
|
func (h *AnalyticsHandler) GetSalesAnalytics(c *gin.Context) {
|
||||||
ctx := c.Request.Context()
|
ctx := c.Request.Context()
|
||||||
contextInfo := appcontext.FromGinContext(ctx)
|
contextInfo := appcontext.FromGinContext(ctx)
|
||||||
@ -61,21 +60,19 @@ func (h *AnalyticsHandler) GetSalesAnalytics(c *gin.Context) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
req.OrganizationID = contextInfo.OrganizationID
|
req.OrganizationID = contextInfo.OrganizationID
|
||||||
|
req.OutletID = &contextInfo.OutletID
|
||||||
modelReq := transformer.SalesAnalyticsContractToModel(&req)
|
modelReq := transformer.SalesAnalyticsContractToModel(&req)
|
||||||
|
|
||||||
// Call service
|
|
||||||
response, err := h.analyticsService.GetSalesAnalytics(ctx, modelReq)
|
response, err := h.analyticsService.GetSalesAnalytics(ctx, modelReq)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{contract.NewResponseError("internal_error", "AnalyticsHandler::GetSalesAnalytics", err.Error())}), "AnalyticsHandler::GetSalesAnalytics")
|
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{contract.NewResponseError("internal_error", "AnalyticsHandler::GetSalesAnalytics", err.Error())}), "AnalyticsHandler::GetSalesAnalytics")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// Transform model to contract
|
|
||||||
contractResp := transformer.SalesAnalyticsModelToContract(response)
|
contractResp := transformer.SalesAnalyticsModelToContract(response)
|
||||||
util.HandleResponse(c.Writer, c.Request, contract.BuildSuccessResponse(contractResp), "AnalyticsHandler::GetSalesAnalytics")
|
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) {
|
func (h *AnalyticsHandler) GetProductAnalytics(c *gin.Context) {
|
||||||
ctx := c.Request.Context()
|
ctx := c.Request.Context()
|
||||||
contextInfo := appcontext.FromGinContext(ctx)
|
contextInfo := appcontext.FromGinContext(ctx)
|
||||||
@ -87,22 +84,19 @@ func (h *AnalyticsHandler) GetProductAnalytics(c *gin.Context) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
req.OrganizationID = contextInfo.OrganizationID
|
req.OrganizationID = contextInfo.OrganizationID
|
||||||
// Transform contract to model
|
req.OutletID = &contextInfo.OutletID
|
||||||
modelReq := transformer.ProductAnalyticsContractToModel(&req)
|
modelReq := transformer.ProductAnalyticsContractToModel(&req)
|
||||||
|
|
||||||
// Call service
|
|
||||||
response, err := h.analyticsService.GetProductAnalytics(ctx, modelReq)
|
response, err := h.analyticsService.GetProductAnalytics(ctx, modelReq)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{contract.NewResponseError("internal_error", "AnalyticsHandler::GetProductAnalytics", err.Error())}), "AnalyticsHandler::GetProductAnalytics")
|
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{contract.NewResponseError("internal_error", "AnalyticsHandler::GetProductAnalytics", err.Error())}), "AnalyticsHandler::GetProductAnalytics")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// Transform model to contract
|
|
||||||
contractResp := transformer.ProductAnalyticsModelToContract(response)
|
contractResp := transformer.ProductAnalyticsModelToContract(response)
|
||||||
util.HandleResponse(c.Writer, c.Request, contract.BuildSuccessResponse(contractResp), "AnalyticsHandler::GetProductAnalytics")
|
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) {
|
func (h *AnalyticsHandler) GetDashboardAnalytics(c *gin.Context) {
|
||||||
ctx := c.Request.Context()
|
ctx := c.Request.Context()
|
||||||
contextInfo := appcontext.FromGinContext(ctx)
|
contextInfo := appcontext.FromGinContext(ctx)
|
||||||
@ -114,6 +108,7 @@ func (h *AnalyticsHandler) GetDashboardAnalytics(c *gin.Context) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
req.OrganizationID = contextInfo.OrganizationID
|
req.OrganizationID = contextInfo.OrganizationID
|
||||||
|
req.OutletID = &contextInfo.OutletID
|
||||||
modelReq := transformer.DashboardAnalyticsContractToModel(&req)
|
modelReq := transformer.DashboardAnalyticsContractToModel(&req)
|
||||||
|
|
||||||
response, err := h.analyticsService.GetDashboardAnalytics(ctx, modelReq)
|
response, err := h.analyticsService.GetDashboardAnalytics(ctx, modelReq)
|
||||||
@ -122,7 +117,6 @@ func (h *AnalyticsHandler) GetDashboardAnalytics(c *gin.Context) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// Transform model to contract
|
|
||||||
contractResp := transformer.DashboardAnalyticsModelToContract(response)
|
contractResp := transformer.DashboardAnalyticsModelToContract(response)
|
||||||
util.HandleResponse(c.Writer, c.Request, contract.BuildSuccessResponse(contractResp), "AnalyticsHandler::GetDashboardAnalytics")
|
util.HandleResponse(c.Writer, c.Request, contract.BuildSuccessResponse(contractResp), "AnalyticsHandler::GetDashboardAnalytics")
|
||||||
}
|
}
|
||||||
|
|||||||
@ -44,6 +44,7 @@ func (m *AuthMiddleware) RequireAuth() gin.HandlerFunc {
|
|||||||
setKeyInContext(c, appcontext.UserRoleKey, userResponse.Role)
|
setKeyInContext(c, appcontext.UserRoleKey, userResponse.Role)
|
||||||
setKeyInContext(c, appcontext.OrganizationIDKey, userResponse.OrganizationID.String())
|
setKeyInContext(c, appcontext.OrganizationIDKey, userResponse.OrganizationID.String())
|
||||||
setKeyInContext(c, appcontext.UserIDKey, userResponse.ID.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)
|
logger.FromContext(c.Request.Context()).Infof("AuthMiddleware::RequireAuth -> User authenticated: %s", userResponse.Email)
|
||||||
c.Next()
|
c.Next()
|
||||||
|
|||||||
@ -37,7 +37,6 @@ func (p *AnalyticsProcessorImpl) GetPaymentMethodAnalytics(ctx context.Context,
|
|||||||
return nil, fmt.Errorf("failed to get payment method analytics: %w", err)
|
return nil, fmt.Errorf("failed to get payment method analytics: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Calculate summary
|
|
||||||
var totalAmount float64
|
var totalAmount float64
|
||||||
var totalOrders int64
|
var totalOrders int64
|
||||||
var totalPayments int64
|
var totalPayments int64
|
||||||
|
|||||||
@ -23,13 +23,11 @@ func NewIngredientProcessor(ingredientRepo IngredientRepository, unitRepo UnitRe
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (p *IngredientProcessorImpl) CreateIngredient(ctx context.Context, req *models.CreateIngredientRequest) (*models.IngredientResponse, error) {
|
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)
|
_, err := p.unitRepo.GetByID(ctx, req.UnitID, req.OrganizationID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create ingredient entity
|
|
||||||
ingredient := &entities.Ingredient{
|
ingredient := &entities.Ingredient{
|
||||||
ID: uuid.New(),
|
ID: uuid.New(),
|
||||||
OrganizationID: req.OrganizationID,
|
OrganizationID: req.OrganizationID,
|
||||||
|
|||||||
@ -29,12 +29,10 @@ func NewAnalyticsServiceImpl(analyticsProcessor processor.AnalyticsProcessor) *A
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s *AnalyticsServiceImpl) GetPaymentMethodAnalytics(ctx context.Context, req *models.PaymentMethodAnalyticsRequest) (*models.PaymentMethodAnalyticsResponse, error) {
|
func (s *AnalyticsServiceImpl) GetPaymentMethodAnalytics(ctx context.Context, req *models.PaymentMethodAnalyticsRequest) (*models.PaymentMethodAnalyticsResponse, error) {
|
||||||
// Validate request
|
|
||||||
if err := s.validatePaymentMethodAnalyticsRequest(req); err != nil {
|
if err := s.validatePaymentMethodAnalyticsRequest(req); err != nil {
|
||||||
return nil, fmt.Errorf("validation error: %w", err)
|
return nil, fmt.Errorf("validation error: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Process analytics request
|
|
||||||
response, err := s.analyticsProcessor.GetPaymentMethodAnalytics(ctx, req)
|
response, err := s.analyticsProcessor.GetPaymentMethodAnalytics(ctx, req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("failed to get payment method analytics: %w", err)
|
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")
|
return fmt.Errorf("date_from cannot be after date_to")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Validate groupBy if provided
|
|
||||||
if req.GroupBy != "" {
|
if req.GroupBy != "" {
|
||||||
validGroupBy := map[string]bool{
|
validGroupBy := map[string]bool{
|
||||||
"day": true,
|
"day": true,
|
||||||
|
|||||||
@ -26,7 +26,7 @@ func PaymentMethodAnalyticsContractToModel(req *contract.PaymentMethodAnalyticsR
|
|||||||
}
|
}
|
||||||
|
|
||||||
if req.DateFrom == req.DateTo {
|
if req.DateFrom == req.DateTo {
|
||||||
dateTo.AddDate(0, 0, 1)
|
dateTo = dateTo.AddDate(0, 0, 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
return &models.PaymentMethodAnalyticsRequest{
|
return &models.PaymentMethodAnalyticsRequest{
|
||||||
@ -89,7 +89,7 @@ func SalesAnalyticsContractToModel(req *contract.SalesAnalyticsRequest) *models.
|
|||||||
}
|
}
|
||||||
|
|
||||||
if req.DateFrom == req.DateTo {
|
if req.DateFrom == req.DateTo {
|
||||||
dateTo.AddDate(0, 0, 1)
|
dateTo = dateTo.AddDate(0, 0, 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
return &models.SalesAnalyticsRequest{
|
return &models.SalesAnalyticsRequest{
|
||||||
@ -156,9 +156,9 @@ func ProductAnalyticsContractToModel(req *contract.ProductAnalyticsRequest) *mod
|
|||||||
}
|
}
|
||||||
|
|
||||||
if req.DateFrom == req.DateTo {
|
if req.DateFrom == req.DateTo {
|
||||||
dateTo.AddDate(0, 0, 1)
|
dateTo = dateTo.AddDate(0, 0, 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
return &models.ProductAnalyticsRequest{
|
return &models.ProductAnalyticsRequest{
|
||||||
OrganizationID: req.OrganizationID,
|
OrganizationID: req.OrganizationID,
|
||||||
OutletID: req.OutletID,
|
OutletID: req.OutletID,
|
||||||
@ -212,6 +212,11 @@ func DashboardAnalyticsContractToModel(req *contract.DashboardAnalyticsRequest)
|
|||||||
dateTo = dt
|
dateTo = dt
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if req.DateFrom == req.DateTo {
|
||||||
|
dateTo = dateTo.AddDate(0, 0, 1)
|
||||||
|
}
|
||||||
|
|
||||||
return &models.DashboardAnalyticsRequest{
|
return &models.DashboardAnalyticsRequest{
|
||||||
OrganizationID: req.OrganizationID,
|
OrganizationID: req.OrganizationID,
|
||||||
OutletID: req.OutletID,
|
OutletID: req.OutletID,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user