diff --git a/docs/docs.go b/docs/docs.go index 9f3b6ec..54f4d8f 100644 --- a/docs/docs.go +++ b/docs/docs.go @@ -34,6 +34,18 @@ const docTemplate = `{ "name": "type", "in": "query" }, + { + "type": "string", + "description": "Type id :id kategori, id spesialis, id sub-spesialis", + "name": "type_id", + "in": "query" + }, + { + "type": "string", + "description": "Status : 1, 2, 3, 4", + "name": "status", + "in": "query" + }, { "type": "string", "default": "10", @@ -343,6 +355,9 @@ const docTemplate = `{ "id": { "type": "string" }, + "jenisKelamin": { + "type": "string" + }, "kategori": { "type": "string" }, @@ -370,6 +385,9 @@ const docTemplate = `{ "spesialis": { "type": "string" }, + "statusOperasi": { + "type": "string" + }, "subSpesialis": { "type": "string" }, diff --git a/docs/swagger.json b/docs/swagger.json index fd3ae10..64b53e8 100644 --- a/docs/swagger.json +++ b/docs/swagger.json @@ -28,6 +28,18 @@ "name": "type", "in": "query" }, + { + "type": "string", + "description": "Type id :id kategori, id spesialis, id sub-spesialis", + "name": "type_id", + "in": "query" + }, + { + "type": "string", + "description": "Status : 1, 2, 3, 4", + "name": "status", + "in": "query" + }, { "type": "string", "default": "10", @@ -337,6 +349,9 @@ "id": { "type": "string" }, + "jenisKelamin": { + "type": "string" + }, "kategori": { "type": "string" }, @@ -364,6 +379,9 @@ "spesialis": { "type": "string" }, + "statusOperasi": { + "type": "string" + }, "subSpesialis": { "type": "string" }, diff --git a/docs/swagger.yaml b/docs/swagger.yaml index f2b82f3..ba36567 100644 --- a/docs/swagger.yaml +++ b/docs/swagger.yaml @@ -68,6 +68,8 @@ definitions: type: string id: type: string + jenisKelamin: + type: string kategori: type: string kodeDiagnosa: @@ -86,6 +88,8 @@ definitions: type: integer spesialis: type: string + statusOperasi: + type: string subSpesialis: type: string tglDaftar: @@ -219,6 +223,14 @@ paths: in: query name: type type: string + - description: Type id :id kategori, id spesialis, id sub-spesialis + in: query + name: type_id + type: string + - description: 'Status : 1, 2, 3, 4' + in: query + name: status + type: string - default: "10" description: Limit in: query diff --git a/internal/domain/antrian_operasi/handler.go b/internal/domain/antrian_operasi/handler.go index 6b5142c..697dee6 100644 --- a/internal/domain/antrian_operasi/handler.go +++ b/internal/domain/antrian_operasi/handler.go @@ -81,6 +81,8 @@ func (h AntrianOperasiHandler) CreateAntrianOperasi(c *gin.Context) { // @Tags Antrian Operasi // @Param search query string false "Search Keyword" // @Param type query string false "Type antrian : all, kategori, spesialis, sub-spesialis" +// @Param type_id query string false "Type id :id kategori, id spesialis, id sub-spesialis" +// @Param status query string false "Status : 1, 2, 3, 4" // @Param limit query string false "Limit" default(10) // @Param offset query string false "Offset" default(0) // @Success 200 {object} []PasienOperasi diff --git a/internal/domain/antrian_operasi/model.go b/internal/domain/antrian_operasi/model.go index e59fe6a..cd9a346 100644 --- a/internal/domain/antrian_operasi/model.go +++ b/internal/domain/antrian_operasi/model.go @@ -16,6 +16,8 @@ type PasienOperasi struct { KodeDiagnosa *string `db:"kode_diagnosa"` Diagnosa *string `db:"diagnosa"` Kategori *string `db:"kategori"` + StatusOperasi *string `db:"status_operasi"` + JenisKelamin *string `db:"jenis_kelamin"` 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 b6fb3cd..e8b97c3 100644 --- a/internal/domain/antrian_operasi/repository.go +++ b/internal/domain/antrian_operasi/repository.go @@ -6,6 +6,7 @@ import ( queryUtils "antrian-operasi/internal/utils/query" "log" "slices" + "strconv" "time" "github.com/gin-gonic/gin" @@ -273,13 +274,16 @@ func (r antrianOperasiRepo) SearchableListAntrianOperasi(c *gin.Context) (ListPa search := c.Query("search") availableType := []string{"all", "kategori", "spesialis", "sub-spesialis"} antrianType := c.Query("type") - + antrianTypeId, err := strconv.Atoi(c.Query("type_id")) + if err != nil { + antrianTypeId = 0 + } if !slices.Contains(availableType, antrianType) { antrianType = "all" } - limit := shared.ParseQueryLimit(c) offset := shared.ParseQueryOffset(c) + statusOp := c.Query("status") query := queryUtils.DynamicQuery{ From: TBL_NAME, @@ -290,6 +294,8 @@ func (r antrianOperasiRepo) SearchableListAntrianOperasi(c *gin.Context) (ListPa {Expression: "dpo.No_KTP", Alias: "no_ktp"}, {Expression: "dpo.No_rekam_medis", Alias: "no_rekam_medis"}, {Expression: "dpo.Nama_pasien", Alias: "nama_pasien"}, + {Expression: "dpo.Status_operasi", Alias: "status_operasi"}, + {Expression: "dpo.Jenis_kelamin", Alias: "jenis_kelamin"}, {Expression: "ds.Spesialis", Alias: "spesialis"}, {Expression: "dss.Subspesialis", Alias: "subspesialis"}, {Expression: "ddpo.Kode_diagnosa", Alias: "kode_diagnosa"}, @@ -320,17 +326,27 @@ func (r antrianOperasiRepo) SearchableListAntrianOperasi(c *gin.Context) (ListPa Alias: "no_urut_sub_spesialis", } + var selectFilter []queryUtils.DynamicFilter + typeIdColumn := "" + switch antrianType { case "kategori": + typeIdColumn = "dko.id" query.WindowFunctions = append(query.WindowFunctions, wfKategori, wfSpesialis, wfSubSpesialis) case "spesialis": + typeIdColumn = "ds.id" query.WindowFunctions = append(query.WindowFunctions, wfSpesialis, wfSubSpesialis) case "sub-spesialis": + typeIdColumn = "dss.id" query.WindowFunctions = append(query.WindowFunctions, wfSubSpesialis) default: query.WindowFunctions = append(query.WindowFunctions, wfKategori, wfSpesialis, wfSubSpesialis) } + if antrianTypeId != 0 && antrianType != "all" { + selectFilter = append(selectFilter, queryUtils.DynamicFilter{Column: typeIdColumn, Operator: queryUtils.OpEqual, Value: antrianTypeId}) + } + query.Joins = []queryUtils.Join{ { Type: "LEFT", @@ -393,7 +409,12 @@ func (r antrianOperasiRepo) SearchableListAntrianOperasi(c *gin.Context) (ListPa query.Filters = append(query.Filters, queryUtils.FilterGroup{Filters: searchFilters, LogicOp: "OR"}) } - // TODO Filtering status + if statusOp != "" { + selectFilter = append(selectFilter, queryUtils.DynamicFilter{Column: "dpo.Status_operasi", Operator: queryUtils.OpEqual, Value: statusOp}) + } + + // wiring all select filter + query.Filters = append(query.Filters, queryUtils.FilterGroup{Filters: selectFilter, LogicOp: "AND"}) dbconn, err := r.db.GetSQLXDB(DB_NAME) if err != nil {