package dashboard import ( "net/http" "antrian-operasi/internal/shared" baseResponse "antrian-operasi/internal/shared" "time" "github.com/gin-gonic/gin" ) type DashboardHandler struct { repo IDashboardRepository } func NewDashboardHandler(repo IDashboardRepository) DashboardHandler { return DashboardHandler{repo} } // GetAntrianPerKategori godoc // @Summary Get Antrian Per Kategori // @Tags Dashboard // @Success 200 {object} []AntrianPerKategori // @Failure 500 {object} shared.BaseErrorResponse // @Router /dashboard/antrian-per-kategori/ [get] func (h DashboardHandler) GetAntrianPerKategori(c *gin.Context) { data, err := h.repo.GetAntrianPerKategori(c) if err != nil { errorResponse := baseResponse.BaseErrorResponse{ Success: false, Code: 500, Message: err.Error(), } c.JSON(http.StatusInternalServerError, errorResponse) return } response := baseResponse.ToBaseResponse(data, true, 200, "success get jumlah antrian per kategori") c.JSON(http.StatusOK, response) } // GetAntrianPerSpesialis godoc // @Summary Get Antrian Per Spesialis // @Tags Dashboard // @Success 200 {object} []AntrianPerSpesialisResponse // @Failure 500 {object} shared.BaseErrorResponse // @Router /dashboard/antrian-per-spesialis/ [get] func (h DashboardHandler) GetAntrianPerSpesialis(c *gin.Context) { data, err := h.repo.GetAntrianPerSpesialis(c) if err != nil { errorResponse := baseResponse.BaseErrorResponse{ Success: false, Code: 500, Message: err.Error(), } c.JSON(http.StatusInternalServerError, errorResponse) } response := baseResponse.ToBaseResponse( data.ParseToResponse(), true, 200, "success get jumlah antrian per spesialis") c.JSON(http.StatusOK, response) } // GetPerbandinganStatusAntrean godoc // @Summary Get Perbandingan Status Antrean // @Tags Dashboard // @Param year query int true "tahun dalam int" // @Param month query int true "bulan dalam int" // @Success 200 {object} []PerbandinganStatusAntreanResponse // @Failure 500 {object} shared.BaseErrorResponse // @Router /dashboard/perbandingan-status-antrian/ [get] func (h DashboardHandler) GetPerbandinganStatusAntrean(c *gin.Context) { var req PeriodeDashboardRequest if err := c.ShouldBindQuery(&req); err != nil { c.JSON(400, shared.BaseErrorResponse{ Success: false, Code: 500, Message: "error bind json", Errors: shared.ValidationError(err), }) return } data, err := h.repo.GetPerbandinganStatusAntrean(c, req) if err != nil { errorResponse := baseResponse.BaseErrorResponse{ Success: false, Code: 500, Message: err.Error(), } c.JSON(http.StatusInternalServerError, errorResponse) return } response := baseResponse.ToBaseResponse( data.MapToResponse(), true, 200, "success get perbandingan status antrean") c.JSON(http.StatusOK, response) } // GetPerbandinganKategoriAntrean godoc // @Summary Get Perbandingan Kategori Antrean // @Tags Dashboard // @Param year query int true "tahun dalam int" // @Param month query int true "bulan dalam int" // @Success 200 {object} []PerbandinganKategoriAntrean // @Failure 500 {object} shared.BaseErrorResponse // @Router /dashboard/perbandingan-kategori-antrian/ [get] func (h DashboardHandler) GetPerbandinganKategoriAntrean(c *gin.Context) { var req PeriodeDashboardRequest if err := c.ShouldBindQuery(&req); err != nil { c.JSON(400, shared.BaseErrorResponse{ Success: false, Code: 400, Message: "error bind json", Errors: shared.ValidationError(err), }) return } data, err := h.repo.GetPerbandinganKategoriAntrean(c, req) if err != nil { errorResponse := baseResponse.BaseErrorResponse{ Success: false, Code: 500, Message: err.Error(), } c.JSON(http.StatusInternalServerError, errorResponse) return } response := baseResponse.ToBaseResponse( data, true, 200, "success get perbandingan kategori antrean") c.JSON(http.StatusOK, response) } // GetAntrianPerHari godoc // @Summary Get Antrian per Hari // @Tags Dashboard // @Param year query int true "tahun dalam int" // @Param month query int true "bulan dalam int" // @Success 200 {object} []AntrianPerHari // @Failure 500 {object} shared.BaseErrorResponse // @Router /dashboard/antrian-per-hari/ [get] func (h DashboardHandler) GetAntrianPerHari(c *gin.Context) { var req PeriodeDashboardRequest if err := c.ShouldBindQuery(&req); err != nil { c.JSON(400, shared.BaseErrorResponse{ Success: false, Code: 400, Message: "error bind json", Errors: shared.ValidationError(err), }) return } data, err := h.repo.GetAntrianPerHari(c, req) if err != nil { errorResponse := baseResponse.BaseErrorResponse{ Success: false, Code: 500, Message: err.Error(), } c.JSON(http.StatusInternalServerError, errorResponse) return } response := baseResponse.ToBaseResponse( ListAntrianPerHari(data).ParseToResponse(req.Year, time.Month(req.Month)), true, 200, "success get antrean per hari") c.JSON(http.StatusOK, response) } // GetTableAntrianPerSpesialis godoc // @Summary Get Table Antrian per Spesialis // @Tags Dashboard // @Param year query int true "tahun dalam int" // @Param month query int true "bulan dalam int" // @Success 200 {object} []TableAntreanPerSpesialis // @Failure 500 {object} shared.BaseErrorResponse // @Router /dashboard/table-antrian-per-spesialis/ [get] func (h DashboardHandler) GetTableAntrianPerSpesialis(c *gin.Context) { var req PeriodeDashboardRequest if err := c.ShouldBindQuery(&req); err != nil { c.JSON(400, shared.BaseErrorResponse{ Success: false, Code: 400, Message: "error bind json", Errors: shared.ValidationError(err), }) return } data, err := h.repo.GetTableAntrianPerSpesialis(c, req) if err != nil { errorResponse := baseResponse.BaseErrorResponse{ Success: false, Code: 500, Message: err.Error(), } c.JSON(http.StatusInternalServerError, errorResponse) return } response := baseResponse.ToBaseResponse( data, true, 200, "success get table antrean per spesialis") c.JSON(http.StatusOK, response) } // GetTableAntrianPerSubSpesialis godoc // @Summary Get Table Antrian per Sub Spesialis // @Tags Dashboard // @Param year query int true "tahun dalam int" // @Param month query int true "bulan dalam int" // @Success 200 {object} []TableAntreanPerSubSpesialis // @Failure 500 {object} shared.BaseErrorResponse // @Router /dashboard/table-antrian-per-subspesialis/ [get] func (h DashboardHandler) GetTableAntrianPerSubSpesialis(c *gin.Context) { var req PeriodeDashboardRequest if err := c.ShouldBindQuery(&req); err != nil { c.JSON(400, shared.BaseErrorResponse{ Success: false, Code: 400, Message: "error bind json", Errors: shared.ValidationError(err), }) return } data, err := h.repo.GetTableAntrianPerSubSpesialis(c, req) if err != nil { errorResponse := baseResponse.BaseErrorResponse{ Success: false, Code: 500, Message: err.Error(), } c.JSON(http.StatusInternalServerError, errorResponse) return } response := baseResponse.ToBaseResponse( data, true, 200, "success get table antrean per spesialis") c.JSON(http.StatusOK, response) }