diff --git a/docs/docs.go b/docs/docs.go index ed38ae3..2104ebe 100644 --- a/docs/docs.go +++ b/docs/docs.go @@ -27,6 +27,12 @@ const docTemplate = `{ "description": "Search Keyword", "name": "search", "in": "query" + }, + { + "type": "string", + "description": "Type antrian : all, kategori, spesialis, sub-spesialis", + "name": "type", + "in": "query" } ], "responses": { @@ -338,6 +344,15 @@ const docTemplate = `{ "noRekamMedis": { "type": "string" }, + "noUrutKategori": { + "type": "integer" + }, + "noUrutSpesialis": { + "type": "integer" + }, + "noUrutSubSpesialis": { + "type": "integer" + }, "spesialis": { "type": "string" }, diff --git a/docs/swagger.json b/docs/swagger.json index 770639f..d3e17db 100644 --- a/docs/swagger.json +++ b/docs/swagger.json @@ -21,6 +21,12 @@ "description": "Search Keyword", "name": "search", "in": "query" + }, + { + "type": "string", + "description": "Type antrian : all, kategori, spesialis, sub-spesialis", + "name": "type", + "in": "query" } ], "responses": { @@ -332,6 +338,15 @@ "noRekamMedis": { "type": "string" }, + "noUrutKategori": { + "type": "integer" + }, + "noUrutSpesialis": { + "type": "integer" + }, + "noUrutSubSpesialis": { + "type": "integer" + }, "spesialis": { "type": "string" }, diff --git a/docs/swagger.yaml b/docs/swagger.yaml index df66577..039ee1a 100644 --- a/docs/swagger.yaml +++ b/docs/swagger.yaml @@ -78,6 +78,12 @@ definitions: type: string noRekamMedis: type: string + noUrutKategori: + type: integer + noUrutSpesialis: + type: integer + noUrutSubSpesialis: + type: integer spesialis: type: string subSpesialis: @@ -209,6 +215,10 @@ paths: in: query name: search type: string + - description: 'Type antrian : all, kategori, spesialis, sub-spesialis' + in: query + name: type + type: string responses: "200": description: OK diff --git a/internal/domain/antrian_operasi/handler.go b/internal/domain/antrian_operasi/handler.go index 9a8c1b4..e9c7d7a 100644 --- a/internal/domain/antrian_operasi/handler.go +++ b/internal/domain/antrian_operasi/handler.go @@ -80,6 +80,7 @@ func (h AntrianOperasiHandler) CreateAntrianOperasi(c *gin.Context) { // @Summary Get List Antrian Operasi // @Tags Antrian Operasi // @Param search query string false "Search Keyword" +// @Param type query string false "Type antrian : all, kategori, spesialis, sub-spesialis" // @Success 200 {object} []PasienOperasi // @Failure 500 {object} shared.BaseErrorResponse // @Router /antrian-operasi/ [get] diff --git a/internal/domain/antrian_operasi/model.go b/internal/domain/antrian_operasi/model.go index f4998f0..f8cde3b 100644 --- a/internal/domain/antrian_operasi/model.go +++ b/internal/domain/antrian_operasi/model.go @@ -3,14 +3,17 @@ package antrianoperasi import "time" type PasienOperasi struct { - ID string `db:"id" json:"id"` - TglDaftar time.Time `db:"tanggal_daftar"` - NoKtp *string `db:"no_ktp"` - NoRekamMedis *string `db:"no_rekam_medis"` - NamaPasien *string `db:"nama_pasien"` - Spesialis *string `db:"spesialis"` - SubSpesialis *string `db:"subspesialis"` - KodeDiagnosa *string `db:"kode_diagnosa"` - Diagnosa *string `db:"diagnosa"` - Kategori *string `db:"kategori"` + ID string `db:"id" json:"id"` + TglDaftar time.Time `db:"tanggal_daftar"` + NoKtp *string `db:"no_ktp"` + NoRekamMedis *string `db:"no_rekam_medis"` + NamaPasien *string `db:"nama_pasien"` + Spesialis *string `db:"spesialis"` + SubSpesialis *string `db:"subspesialis"` + KodeDiagnosa *string `db:"kode_diagnosa"` + Diagnosa *string `db:"diagnosa"` + Kategori *string `db:"kategori"` + NoUrutKategori int `db:"no_urut_kategori"` + NoUrutSpesialis int `db:"no_urut_spesialis"` + NoUrutSubSpesialis int `db:"no_urut_sub_spesialis"` } diff --git a/internal/domain/antrian_operasi/repository.go b/internal/domain/antrian_operasi/repository.go index b28f0af..b4d4002 100644 --- a/internal/domain/antrian_operasi/repository.go +++ b/internal/domain/antrian_operasi/repository.go @@ -4,6 +4,7 @@ import ( "antrian-operasi/internal/database" queryUtils "antrian-operasi/internal/utils/query" "log" + "slices" "time" "github.com/gin-gonic/gin" @@ -269,6 +270,12 @@ func (r antrianOperasiRepo) CreateAntrianOperasi(c *gin.Context, req CreatePasie func (r antrianOperasiRepo) SearchableListAntrianOperasi(c *gin.Context) ([]PasienOperasi, error) { var result []PasienOperasi search := c.Query("search") + availableType := []string{"all", "kategori", "spesialis", "sub-spesialis"} + antrianType := c.Query("type") + + if !slices.Contains(availableType, antrianType) { + antrianType = "all" + } query := queryUtils.DynamicQuery{ From: TBL_NAME, @@ -287,7 +294,38 @@ func (r antrianOperasiRepo) SearchableListAntrianOperasi(c *gin.Context) ([]Pasi }, Limit: 10, Sort: []queryUtils.SortField{ - {Column: "created_at", Order: "DESC"}}, + {Column: "dpo.Tanggal_daftar", Order: "ASC"}}, + } + + wfKategori := queryUtils.WindowFunction{ + Function: "ROW_NUMBER", + Over: "\"dpo\".\"Kategori_operasi\"", + OrderBy: "\"dpo\".\"Tanggal_daftar\"", + Alias: "no_urut_kategori", + } + + wfSpesialis := queryUtils.WindowFunction{ + Function: "ROW_NUMBER", + Over: "\"dpo\".\"Kategori_operasi\", \"dpo\".\"Spesialis\"", + OrderBy: "\"dpo\".\"Tanggal_daftar\"", + Alias: "no_urut_spesialis", + } + wfSubSpesialis := queryUtils.WindowFunction{ + Function: "ROW_NUMBER", + Over: "\"dpo\".\"Kategori_operasi\", \"dpo\".\"Spesialis\", \"dpo\".\"Sub_spesialis\"", + OrderBy: "\"dpo\".\"Tanggal_daftar\"", + Alias: "no_urut_sub_spesialis", + } + + switch antrianType { + case "kategori": + query.WindowFunctions = append(query.WindowFunctions, wfKategori, wfSpesialis, wfSubSpesialis) + case "spesialis": + query.WindowFunctions = append(query.WindowFunctions, wfSpesialis, wfSubSpesialis) + case "sub-spesialis": + query.WindowFunctions = append(query.WindowFunctions, wfSubSpesialis) + default: + query.WindowFunctions = append(query.WindowFunctions, wfKategori, wfSpesialis, wfSubSpesialis) } query.Joins = []queryUtils.Join{