API perbandingan kategori antrean

This commit is contained in:
renaldybrada
2026-02-11 11:32:17 +07:00
parent 4c98b6a7fd
commit d87474484f
7 changed files with 251 additions and 11 deletions

No files matched your search

+58 -3
View File
@@ -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/": { "/dashboard/perbandingan-status-antrian/": {
"get": { "get": {
"tags": [ "tags": [
@@ -852,16 +893,30 @@ const docTemplate = `{
} }
} }
}, },
"dashboard.PerbandinganStatusAntreanResponse": { "dashboard.PerbandinganKategoriAntrean": {
"type": "object", "type": "object",
"properties": { "properties": {
"idStatus": { "id_kategori": {
"type": "integer" "type": "integer"
}, },
"jumlah": { "jumlah": {
"type": "integer" "type": "integer"
}, },
"status": { "kategori": {
"type": "string"
}
}
},
"dashboard.PerbandinganStatusAntreanResponse": {
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"jumlah": {
"type": "integer"
},
"statust": {
"type": "string" "type": "string"
} }
} }
+58 -3
View File
@@ -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/": { "/dashboard/perbandingan-status-antrian/": {
"get": { "get": {
"tags": [ "tags": [
@@ -846,16 +887,30 @@
} }
} }
}, },
"dashboard.PerbandinganStatusAntreanResponse": { "dashboard.PerbandinganKategoriAntrean": {
"type": "object", "type": "object",
"properties": { "properties": {
"idStatus": { "id_kategori": {
"type": "integer" "type": "integer"
}, },
"jumlah": { "jumlah": {
"type": "integer" "type": "integer"
}, },
"status": { "kategori": {
"type": "string"
}
}
},
"dashboard.PerbandinganStatusAntreanResponse": {
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"jumlah": {
"type": "integer"
},
"statust": {
"type": "string" "type": "string"
} }
} }
+39 -3
View File
@@ -226,13 +226,22 @@ definitions:
subSpesialis: subSpesialis:
type: string type: string
type: object type: object
dashboard.PerbandinganStatusAntreanResponse: dashboard.PerbandinganKategoriAntrean:
properties: properties:
idStatus: id_kategori:
type: integer type: integer
jumlah: jumlah:
type: integer type: integer
status: kategori:
type: string
type: object
dashboard.PerbandinganStatusAntreanResponse:
properties:
id:
type: integer
jumlah:
type: integer
statust:
type: string type: string
type: object type: object
diagnosa.DiagnosaResponse: diagnosa.DiagnosaResponse:
@@ -508,6 +517,33 @@ paths:
summary: Get Antrian Per Spesialis summary: Get Antrian Per Spesialis
tags: tags:
- Dashboard - 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/: /dashboard/perbandingan-status-antrian/:
get: get:
parameters: parameters:
+41 -1
View File
@@ -74,7 +74,7 @@ func (h DashboardHandler) GetAntrianPerSpesialis(c *gin.Context) {
// @Success 200 {object} []PerbandinganStatusAntreanResponse // @Success 200 {object} []PerbandinganStatusAntreanResponse
// @Failure 500 {object} shared.BaseErrorResponse // @Failure 500 {object} shared.BaseErrorResponse
// @Router /dashboard/perbandingan-status-antrian/ [get] // @Router /dashboard/perbandingan-status-antrian/ [get]
func (h DashboardHandler) GetPerbandinganstatusAntrean(c *gin.Context) { func (h DashboardHandler) GetPerbandinganStatusAntrean(c *gin.Context) {
var req PeriodeDashboardRequest var req PeriodeDashboardRequest
if err := c.ShouldBindQuery(&req); err != nil { if err := c.ShouldBindQuery(&req); err != nil {
c.JSON(400, shared.BaseErrorResponse{ c.JSON(400, shared.BaseErrorResponse{
@@ -105,3 +105,43 @@ func (h DashboardHandler) GetPerbandinganstatusAntrean(c *gin.Context) {
c.JSON(http.StatusOK, response) 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)
}
+6
View File
@@ -38,6 +38,12 @@ type PerbandinganStatusAntreanResponse struct {
Status string `json:"statust"` 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 type ListModelAntrianPerSpesialis []AntrianPerSpesialisModel
func (list ListModelAntrianPerSpesialis) ParseToResponse() []AntrianPerSpesialisResponse { func (list ListModelAntrianPerSpesialis) ParseToResponse() []AntrianPerSpesialisResponse {
+47
View File
@@ -16,6 +16,7 @@ type IDashboardRepository interface {
GetAntrianPerKategori(c *gin.Context) ([]AntrianPerKategori, error) GetAntrianPerKategori(c *gin.Context) ([]AntrianPerKategori, error)
GetAntrianPerSpesialis(c *gin.Context) (ListModelAntrianPerSpesialis, error) GetAntrianPerSpesialis(c *gin.Context) (ListModelAntrianPerSpesialis, error)
GetPerbandinganStatusAntrean(c *gin.Context, req PeriodeDashboardRequest) (ListPerbandinganStatusAntrean, error) GetPerbandinganStatusAntrean(c *gin.Context, req PeriodeDashboardRequest) (ListPerbandinganStatusAntrean, error)
GetPerbandinganKategoriAntrean(c *gin.Context, req PeriodeDashboardRequest) ([]PerbandinganKategoriAntrean, error)
} }
type dashboardRepo struct { type dashboardRepo struct {
@@ -188,3 +189,49 @@ func (r dashboardRepo) GetPerbandinganStatusAntrean(c *gin.Context, req PeriodeD
return result, nil 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
}
+2 -1
View File
@@ -12,5 +12,6 @@ func RegisterRoutes(r *gin.RouterGroup, dbService database.Service) {
r.GET("/antrian-per-kategori", dashboardHandler.GetAntrianPerKategori) r.GET("/antrian-per-kategori", dashboardHandler.GetAntrianPerKategori)
r.GET("/antrian-per-spesialis", dashboardHandler.GetAntrianPerSpesialis) 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)
} }