158 lines
6.9 KiB
Go
158 lines
6.9 KiB
Go
|
|
package handler
|
||
|
|
|
||
|
|
import (
|
||
|
|
"apskel-pos-be/internal/appcontext"
|
||
|
|
"apskel-pos-be/internal/contract"
|
||
|
|
"apskel-pos-be/internal/service"
|
||
|
|
"apskel-pos-be/internal/transformer"
|
||
|
|
"apskel-pos-be/internal/util"
|
||
|
|
|
||
|
|
"github.com/gin-gonic/gin"
|
||
|
|
)
|
||
|
|
|
||
|
|
type AnalyticsHandler struct {
|
||
|
|
analyticsService service.AnalyticsService
|
||
|
|
transformer transformer.Transformer
|
||
|
|
}
|
||
|
|
|
||
|
|
func NewAnalyticsHandler(
|
||
|
|
analyticsService service.AnalyticsService,
|
||
|
|
transformer transformer.Transformer,
|
||
|
|
) *AnalyticsHandler {
|
||
|
|
return &AnalyticsHandler{
|
||
|
|
analyticsService: analyticsService,
|
||
|
|
transformer: transformer,
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func (h *AnalyticsHandler) GetPaymentMethodAnalytics(c *gin.Context) {
|
||
|
|
ctx := c.Request.Context()
|
||
|
|
contextInfo := appcontext.FromGinContext(ctx)
|
||
|
|
|
||
|
|
var req contract.PaymentMethodAnalyticsRequest
|
||
|
|
if err := c.ShouldBindQuery(&req); err != nil {
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{contract.NewResponseError("invalid_request", "AnalyticsHandler::GetPaymentMethodAnalytics", err.Error())}), "AnalyticsHandler::GetPaymentMethodAnalytics")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
req.OrganizationID = contextInfo.OrganizationID
|
||
|
|
modelReq := transformer.PaymentMethodAnalyticsContractToModel(&req)
|
||
|
|
|
||
|
|
response, err := h.analyticsService.GetPaymentMethodAnalytics(ctx, modelReq)
|
||
|
|
if err != nil {
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{contract.NewResponseError("internal_error", "AnalyticsHandler::GetPaymentMethodAnalytics", err.Error())}), "AnalyticsHandler::GetPaymentMethodAnalytics")
|
||
|
|
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)
|
||
|
|
|
||
|
|
var req contract.SalesAnalyticsRequest
|
||
|
|
if err := c.ShouldBindQuery(&req); err != nil {
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{contract.NewResponseError("invalid_request", "AnalyticsHandler::GetSalesAnalytics", err.Error())}), "AnalyticsHandler::GetSalesAnalytics")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
req.OrganizationID = contextInfo.OrganizationID
|
||
|
|
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)
|
||
|
|
|
||
|
|
var req contract.ProductAnalyticsRequest
|
||
|
|
if err := c.ShouldBindQuery(&req); err != nil {
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{contract.NewResponseError("invalid_request", "AnalyticsHandler::GetProductAnalytics", err.Error())}), "AnalyticsHandler::GetProductAnalytics")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
req.OrganizationID = contextInfo.OrganizationID
|
||
|
|
// Transform contract to model
|
||
|
|
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)
|
||
|
|
|
||
|
|
var req contract.DashboardAnalyticsRequest
|
||
|
|
if err := c.ShouldBindQuery(&req); err != nil {
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{contract.NewResponseError("invalid_request", "AnalyticsHandler::GetDashboardAnalytics", err.Error())}), "AnalyticsHandler::GetDashboardAnalytics")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
req.OrganizationID = contextInfo.OrganizationID
|
||
|
|
modelReq := transformer.DashboardAnalyticsContractToModel(&req)
|
||
|
|
|
||
|
|
response, err := h.analyticsService.GetDashboardAnalytics(ctx, modelReq)
|
||
|
|
if err != nil {
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{contract.NewResponseError("internal_error", "AnalyticsHandler::GetDashboardAnalytics", err.Error())}), "AnalyticsHandler::GetDashboardAnalytics")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
// Transform model to contract
|
||
|
|
contractResp := transformer.DashboardAnalyticsModelToContract(response)
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildSuccessResponse(contractResp), "AnalyticsHandler::GetDashboardAnalytics")
|
||
|
|
}
|
||
|
|
|
||
|
|
func (h *AnalyticsHandler) GetProfitLossAnalytics(c *gin.Context) {
|
||
|
|
ctx := c.Request.Context()
|
||
|
|
contextInfo := appcontext.FromGinContext(ctx)
|
||
|
|
|
||
|
|
var req contract.ProfitLossAnalyticsRequest
|
||
|
|
if err := c.ShouldBindQuery(&req); err != nil {
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{contract.NewResponseError("invalid_request", "AnalyticsHandler::GetProfitLossAnalytics", err.Error())}), "AnalyticsHandler::GetProfitLossAnalytics")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
req.OrganizationID = contextInfo.OrganizationID
|
||
|
|
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")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
// Call service
|
||
|
|
response, err := h.analyticsService.GetProfitLossAnalytics(ctx, modelReq)
|
||
|
|
if err != nil {
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{contract.NewResponseError("internal_error", "AnalyticsHandler::GetProfitLossAnalytics", err.Error())}), "AnalyticsHandler::GetProfitLossAnalytics")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
// Transform model to contract
|
||
|
|
contractResp := transformer.ProfitLossAnalyticsModelToContract(response)
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildSuccessResponse(contractResp), "AnalyticsHandler::GetProfitLossAnalytics")
|
||
|
|
}
|