diff --git a/docs/docs.go b/docs/docs.go index 6fa1d8c..8bb8a0e 100644 --- a/docs/docs.go +++ b/docs/docs.go @@ -223,6 +223,47 @@ const docTemplate = `{ } } }, + "/dashboard/perbandingan-kategori-antrian/": { + "get": { + "tags": [ + "Dashboard" + ], + "summary": "Get Perbandingan Kategori Antrean", + "parameters": [ + { + "type": "integer", + "description": "tahun dalam int", + "name": "year", + "in": "query", + "required": true + }, + { + "type": "integer", + "description": "bulan dalam int", + "name": "month", + "in": "query", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/dashboard.PerbandinganKategoriAntrean" + } + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/shared.BaseErrorResponse" + } + } + } + } + }, "/dashboard/perbandingan-status-antrian/": { "get": { "tags": [ @@ -852,16 +893,30 @@ const docTemplate = `{ } } }, - "dashboard.PerbandinganStatusAntreanResponse": { + "dashboard.PerbandinganKategoriAntrean": { "type": "object", "properties": { - "idStatus": { + "id_kategori": { "type": "integer" }, "jumlah": { "type": "integer" }, - "status": { + "kategori": { + "type": "string" + } + } + }, + "dashboard.PerbandinganStatusAntreanResponse": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "jumlah": { + "type": "integer" + }, + "statust": { "type": "string" } } diff --git a/docs/swagger.json b/docs/swagger.json index ccf136a..378df5a 100644 --- a/docs/swagger.json +++ b/docs/swagger.json @@ -217,6 +217,47 @@ } } }, + "/dashboard/perbandingan-kategori-antrian/": { + "get": { + "tags": [ + "Dashboard" + ], + "summary": "Get Perbandingan Kategori Antrean", + "parameters": [ + { + "type": "integer", + "description": "tahun dalam int", + "name": "year", + "in": "query", + "required": true + }, + { + "type": "integer", + "description": "bulan dalam int", + "name": "month", + "in": "query", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/dashboard.PerbandinganKategoriAntrean" + } + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/shared.BaseErrorResponse" + } + } + } + } + }, "/dashboard/perbandingan-status-antrian/": { "get": { "tags": [ @@ -846,16 +887,30 @@ } } }, - "dashboard.PerbandinganStatusAntreanResponse": { + "dashboard.PerbandinganKategoriAntrean": { "type": "object", "properties": { - "idStatus": { + "id_kategori": { "type": "integer" }, "jumlah": { "type": "integer" }, - "status": { + "kategori": { + "type": "string" + } + } + }, + "dashboard.PerbandinganStatusAntreanResponse": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "jumlah": { + "type": "integer" + }, + "statust": { "type": "string" } } diff --git a/docs/swagger.yaml b/docs/swagger.yaml index b06e544..28d2cc9 100644 --- a/docs/swagger.yaml +++ b/docs/swagger.yaml @@ -226,13 +226,22 @@ definitions: subSpesialis: type: string type: object - dashboard.PerbandinganStatusAntreanResponse: + dashboard.PerbandinganKategoriAntrean: properties: - idStatus: + id_kategori: type: integer jumlah: type: integer - status: + kategori: + type: string + type: object + dashboard.PerbandinganStatusAntreanResponse: + properties: + id: + type: integer + jumlah: + type: integer + statust: type: string type: object diagnosa.DiagnosaResponse: @@ -508,6 +517,33 @@ paths: summary: Get Antrian Per Spesialis tags: - Dashboard + /dashboard/perbandingan-kategori-antrian/: + get: + parameters: + - description: tahun dalam int + in: query + name: year + required: true + type: integer + - description: bulan dalam int + in: query + name: month + required: true + type: integer + responses: + "200": + description: OK + schema: + items: + $ref: '#/definitions/dashboard.PerbandinganKategoriAntrean' + type: array + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/shared.BaseErrorResponse' + summary: Get Perbandingan Kategori Antrean + tags: + - Dashboard /dashboard/perbandingan-status-antrian/: get: parameters: diff --git a/internal/domain/dashboard/handler.go b/internal/domain/dashboard/handler.go index 16c5471..1001953 100644 --- a/internal/domain/dashboard/handler.go +++ b/internal/domain/dashboard/handler.go @@ -74,7 +74,7 @@ func (h DashboardHandler) GetAntrianPerSpesialis(c *gin.Context) { // @Success 200 {object} []PerbandinganStatusAntreanResponse // @Failure 500 {object} shared.BaseErrorResponse // @Router /dashboard/perbandingan-status-antrian/ [get] -func (h DashboardHandler) GetPerbandinganstatusAntrean(c *gin.Context) { +func (h DashboardHandler) GetPerbandinganStatusAntrean(c *gin.Context) { var req PeriodeDashboardRequest if err := c.ShouldBindQuery(&req); err != nil { c.JSON(400, shared.BaseErrorResponse{ @@ -105,3 +105,43 @@ func (h DashboardHandler) GetPerbandinganstatusAntrean(c *gin.Context) { 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) +} diff --git a/internal/domain/dashboard/model.go b/internal/domain/dashboard/model.go index 7465265..1bf742e 100644 --- a/internal/domain/dashboard/model.go +++ b/internal/domain/dashboard/model.go @@ -38,6 +38,12 @@ type PerbandinganStatusAntreanResponse struct { Status string `json:"statust"` } +type PerbandinganKategoriAntrean struct { + IdKategori int `db:"id_kategori" json:"id_kategori"` + Kategori string `db:"kategori" json:"kategori"` + Jumlah int `db:"jumlah" json:"jumlah"` +} + type ListModelAntrianPerSpesialis []AntrianPerSpesialisModel func (list ListModelAntrianPerSpesialis) ParseToResponse() []AntrianPerSpesialisResponse { diff --git a/internal/domain/dashboard/repository.go b/internal/domain/dashboard/repository.go index a247b06..4e95314 100644 --- a/internal/domain/dashboard/repository.go +++ b/internal/domain/dashboard/repository.go @@ -16,6 +16,7 @@ type IDashboardRepository interface { GetAntrianPerKategori(c *gin.Context) ([]AntrianPerKategori, error) GetAntrianPerSpesialis(c *gin.Context) (ListModelAntrianPerSpesialis, error) GetPerbandinganStatusAntrean(c *gin.Context, req PeriodeDashboardRequest) (ListPerbandinganStatusAntrean, error) + GetPerbandinganKategoriAntrean(c *gin.Context, req PeriodeDashboardRequest) ([]PerbandinganKategoriAntrean, error) } type dashboardRepo struct { @@ -188,3 +189,49 @@ func (r dashboardRepo) GetPerbandinganStatusAntrean(c *gin.Context, req PeriodeD return result, nil } + +func (r dashboardRepo) GetPerbandinganKategoriAntrean(c *gin.Context, req PeriodeDashboardRequest) ([]PerbandinganKategoriAntrean, error) { + var result []PerbandinganKategoriAntrean + + startDate, endDate := GenerateStartEndDate(req) + + query := queryUtils.DynamicQuery{ + From: "daftar_kategori_operasi", + Aliases: "dko", + Fields: []queryUtils.SelectField{ + {Expression: "dko.id", Alias: "id_kategori"}, + {Expression: "dko.Kategori", Alias: "kategori"}, + {Expression: "COUNT(dpo.id)", Alias: "jumlah"}, + }, + Joins: []queryUtils.Join{ + { + Type: "LEFT", + Table: TBL_NAME, + Alias: "dpo", + OnConditions: queryUtils.FilterGroup{ + Filters: []queryUtils.DynamicFilter{ + {Column: "dpo.Kategori_operasi", Operator: queryUtils.OpEqual, Value: "dko.id"}, + {Column: "dpo.Tanggal_daftar", Operator: queryUtils.OpBetween, Value: []string{startDate, endDate}}, + }, LogicOp: "AND", + }, + }, + }, + GroupBy: []string{"dko.id", "dko.Kategori"}, + Sort: []queryUtils.SortField{ + {Column: "dko.id", Order: "ASC"}, + }, + } + + dbconn, err := r.db.GetSQLXDB(DB_NAME) + if err != nil { + return result, err + } + + err = r.queryBuilder.ExecuteQuery( + c, dbconn, query, &result) + if err != nil { + return result, err + } + + return result, nil +} diff --git a/internal/domain/dashboard/routes.go b/internal/domain/dashboard/routes.go index d430f45..8ed04fc 100644 --- a/internal/domain/dashboard/routes.go +++ b/internal/domain/dashboard/routes.go @@ -12,5 +12,6 @@ func RegisterRoutes(r *gin.RouterGroup, dbService database.Service) { r.GET("/antrian-per-kategori", dashboardHandler.GetAntrianPerKategori) r.GET("/antrian-per-spesialis", dashboardHandler.GetAntrianPerSpesialis) - r.GET("/perbandingan-status-antrian", dashboardHandler.GetPerbandinganstatusAntrean) + r.GET("/perbandingan-status-antrian", dashboardHandler.GetPerbandinganStatusAntrean) + r.GET("/perbandingan-kategori-antrian", dashboardHandler.GetPerbandinganKategoriAntrean) }