From 7185a9381fb0823e9be25684f0209ec340d3da03 Mon Sep 17 00:00:00 2001 From: renaldybrada Date: Wed, 4 Mar 2026 10:00:44 +0700 Subject: [PATCH] add sort --- docs/docs.go | 12 + docs/swagger.json | 12 + docs/swagger.yaml | 8 + internal/domain/antrian_operasi/handler.go | 9 +- internal/domain/antrian_operasi/repository.go | 593 +++++++----------- internal/domain/antrian_operasi/request.go | 16 +- 6 files changed, 272 insertions(+), 378 deletions(-) diff --git a/docs/docs.go b/docs/docs.go index 23a1678..212681c 100644 --- a/docs/docs.go +++ b/docs/docs.go @@ -283,6 +283,18 @@ const docTemplate = `{ "description": "Offset", "name": "offset", "in": "query" + }, + { + "type": "string", + "description": "Type sort : tanggal_daftar no_urut_kategori no_urut_spesialis", + "name": "sort_by", + "in": "query" + }, + { + "type": "string", + "description": "Type sort order : ASC DESC", + "name": "sort_order", + "in": "query" } ], "responses": { diff --git a/docs/swagger.json b/docs/swagger.json index 6fb8f4f..51d20dc 100644 --- a/docs/swagger.json +++ b/docs/swagger.json @@ -277,6 +277,18 @@ "description": "Offset", "name": "offset", "in": "query" + }, + { + "type": "string", + "description": "Type sort : tanggal_daftar no_urut_kategori no_urut_spesialis", + "name": "sort_by", + "in": "query" + }, + { + "type": "string", + "description": "Type sort order : ASC DESC", + "name": "sort_order", + "in": "query" } ], "responses": { diff --git a/docs/swagger.yaml b/docs/swagger.yaml index 9fa930e..4947c8a 100644 --- a/docs/swagger.yaml +++ b/docs/swagger.yaml @@ -718,6 +718,14 @@ paths: in: query name: offset type: string + - description: 'Type sort : tanggal_daftar no_urut_kategori no_urut_spesialis' + in: query + name: sort_by + type: string + - description: 'Type sort order : ASC DESC' + in: query + name: sort_order + type: string responses: "200": description: OK diff --git a/internal/domain/antrian_operasi/handler.go b/internal/domain/antrian_operasi/handler.go index 1573f35..d2dcdcb 100644 --- a/internal/domain/antrian_operasi/handler.go +++ b/internal/domain/antrian_operasi/handler.go @@ -96,13 +96,20 @@ func (h AntrianOperasiHandler) CreateAntrianOperasi(c *gin.Context) { // @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) +// @Param sort_by query string false "Type sort : tanggal_daftar no_urut_kategori no_urut_spesialis" +// @Param sort_order query string false "Type sort order : ASC DESC" // @Success 200 {object} []PasienOperasi // @Failure 500 {object} shared.BaseErrorResponse // @Router /antrian-operasi/ [get] func (h AntrianOperasiHandler) GetListAntrianOperasi(c *gin.Context) { var query AntrianQuery if err := c.ShouldBindQuery(&query); err != nil { - c.JSON(400, gin.H{"error": err.Error()}) + c.JSON(400, shared.BaseErrorResponse{ + Success: false, + Code: 400, + Message: "error bind json", + Errors: shared.ValidationError(err), + }) return } diff --git a/internal/domain/antrian_operasi/repository.go b/internal/domain/antrian_operasi/repository.go index fddf60f..65a16de 100644 --- a/internal/domain/antrian_operasi/repository.go +++ b/internal/domain/antrian_operasi/repository.go @@ -48,7 +48,7 @@ func NewRepository(dbService database.Service) IAntrianOperasiRepository { "\"FK_pasien_operasi_telepon_pasien_operasi_ID\"", "FK_pasien_operasi_telepon_pasien_operasi_ID", "\"Kode_diagnosa\"", "\"Diagnosa\"", "\"Jenis_diagnosa\"", "\"FK_pasien_operasi_diagnosa_pasien_operasi_ID\"", "FK_pasien_operasi_diagnosa_pasien_operasi_ID", "\"Kode_tindakan\"", "\"Tindakan\"", "\"Tindakan_tambahan\"", "\"FK_pasien_operasi_tindakan_pasien_operasi_ID\"", "FK_pasien_operasi_tindakan_pasien_operasi_ID", - "\"data_pasien_operasi_id\"", "\"data_pegawai_id\"", "data_pasien_operasi_id", + "\"data_pasien_operasi_id\"", "\"data_pegawai_id\"", "data_pasien_operasi_id", "tanggal_daftar", "no_urut_kategori", "no_urut_spesialis", "no_urut_sub_spesialis", "no_ktp", "no_rekam_medis", "nama_pasien", "status_operasi", "id_kategori", "id_spesialis", "id_subspesialis", }). SetAllowedTables([]string{TBL_NAME, TBL_DIAGNOSA_OPERASI}) @@ -60,236 +60,6 @@ func NewRepository(dbService database.Service) IAntrianOperasiRepository { } } -func (r antrianOperasiRepo) insertAntrianChildTables(c context.Context, tx *sql.Tx, idAntrian string, req CreatePasienOperasiRequest) error { - returningCols := []string{ - "id", - } - - // INSERT data_telepon_pasien_operasi - if len(req.FormData.NoTelepon) != 0 { - var valuesInsertTelepon [][]interface{} - - for _, telp := range req.FormData.NoTelepon { - idTelepon := uuid.New().String() - itemValues := []interface{}{idTelepon, telp, idAntrian} - valuesInsertTelepon = append(valuesInsertTelepon, itemValues) - } - - insertTeleponQuery := queryUtils.InsertBulkData{ - Columns: []string{ - "id", - "\"Nomor_telepon\"", - "\"FK_pasien_operasi_telepon_pasien_operasi_ID\"", - }, - Values: valuesInsertTelepon, - } - - sql, args, err := r.queryBuilder.BuildBulkInsertQuery(TBL_PASIEN_TELEPHONE, insertTeleponQuery, returningCols...) - if err != nil { - log.Printf("error building query telepon %s", err) - - return err - } - _, err = tx.ExecContext(c, sql, args...) - if err != nil { - log.Println(err) - return err - } - log.Printf("success insert telepon") - } - - // INSERT data_diagnosa_pasien_operasi - var valuesDiagnosa [][]interface{} - - for _, diagnosa := range req.DiagnosisItem { - idDiagnosa := uuid.New().String() - itemValues := []interface{}{ - idDiagnosa, - diagnosa.KodeDiagnosa, - diagnosa.Diagnosa, - diagnosa.JenisDiagnosa, - idAntrian, - } - valuesDiagnosa = append(valuesDiagnosa, itemValues) - } - - insertDiagnosaQuery := queryUtils.InsertBulkData{ - Columns: []string{ - "id", - "\"Kode_diagnosa\"", - "\"Diagnosa\"", - "\"Jenis_diagnosa\"", - "\"FK_pasien_operasi_diagnosa_pasien_operasi_ID\"", - }, - Values: valuesDiagnosa, - } - - sql, args, err := r.queryBuilder.BuildBulkInsertQuery(TBL_DIAGNOSA_OPERASI, insertDiagnosaQuery, returningCols...) - if err != nil { - log.Printf("error building query diagnosa %s", err) - return err - } - _, err = tx.ExecContext(c, sql, args...) - if err != nil { - log.Println(err) - return err - } - log.Printf("success insert diagnosa") - - // INSERT data_tindakan_pasien_operasi - var valuesTindakan [][]interface{} - - for _, tindakan := range req.TindakanItems { - idTindakan := uuid.New().String() - itemValues := []interface{}{ - idTindakan, - tindakan.KodeTindakan, - tindakan.Tindakan, - tindakan.TindakanTambahan, - idAntrian, - } - valuesTindakan = append(valuesTindakan, itemValues) - } - - insertTindakanQuery := queryUtils.InsertBulkData{ - Columns: []string{ - "id", - "\"Kode_tindakan\"", - "\"Tindakan\"", - "\"Tindakan_tambahan\"", - "\"FK_pasien_operasi_tindakan_pasien_operasi_ID\"", - }, - Values: valuesTindakan, - } - - sql, args, err = r.queryBuilder.BuildBulkInsertQuery(TBL_TINDAKAN_OPERASI, insertTindakanQuery, returningCols...) - if err != nil { - log.Printf("error building query tindakan %s", err) - return err - } - _, err = tx.ExecContext(c, sql, args...) - if err != nil { - log.Println(err) - return err - } - log.Printf("success insert tindakan") - - // INSERT data_pasien_operasi_data_pegawai - if len(req.DokterPelaksanaItems) != 0 { - var valuesDokterPelaksana [][]interface{} - - for _, dokter := range req.DokterPelaksanaItems { - itemValues := []interface{}{ - idAntrian, - dokter.Id, - } - valuesDokterPelaksana = append(valuesDokterPelaksana, itemValues) - } - - insertDokterPelaksanaQuery := queryUtils.InsertBulkData{ - Columns: []string{ - "\"data_pasien_operasi_id\"", - "\"data_pegawai_id\"", - }, - Values: valuesDokterPelaksana, - } - - sql, args, err = r.queryBuilder.BuildBulkInsertQuery(TBL_DOKTER_OPERASI, insertDokterPelaksanaQuery, returningCols...) - if err != nil { - log.Printf("error building query dokter pelaksana %s", err) - return err - } - _, err = tx.ExecContext(c, sql, args...) - if err != nil { - log.Println(err) - return err - } - } - - return nil -} - -func (r antrianOperasiRepo) deleteAntrianChildTables(c context.Context, tx *sql.Tx, idAntrian string) error { - // parsedId := uuid.MustParse(idAntrian) - // delete telephone - filters := []queryUtils.FilterGroup{ - { - Filters: []queryUtils.DynamicFilter{ - {Column: "FK_pasien_operasi_telepon_pasien_operasi_ID", Operator: queryUtils.OpEqual, Value: idAntrian}, - }, - }, - } - sql, args, err := r.queryBuilder.BuildDeleteQuery(TBL_PASIEN_TELEPHONE, filters) - if err != nil { - log.Printf("Unable to create delete phone query : %v", err) - return err - } - _, err = tx.ExecContext(c, sql, args...) - if err != nil { - log.Printf("Unable to executing delete phone : %v", err) - return err - } - - // delete diagnosa - filters = []queryUtils.FilterGroup{ - { - Filters: []queryUtils.DynamicFilter{ - {Column: "FK_pasien_operasi_diagnosa_pasien_operasi_ID", Operator: queryUtils.OpEqual, Value: idAntrian}, - }, - }, - } - sql, args, err = r.queryBuilder.BuildDeleteQuery(TBL_DIAGNOSA_OPERASI, filters) - if err != nil { - log.Printf("Unable to create delete diagnosa query : %v", err) - return err - } - _, err = tx.ExecContext(c, sql, args...) - if err != nil { - log.Printf("Unable to executing delete diagnosa : %v", err) - return err - } - - // delete tindakan - filters = []queryUtils.FilterGroup{ - { - Filters: []queryUtils.DynamicFilter{ - {Column: "FK_pasien_operasi_tindakan_pasien_operasi_ID", Operator: queryUtils.OpEqual, Value: idAntrian}, - }, - }, - } - sql, args, err = r.queryBuilder.BuildDeleteQuery(TBL_TINDAKAN_OPERASI, filters) - if err != nil { - log.Printf("Unable to create delete tindakan query : %v", err) - return err - } - _, err = tx.ExecContext(c, sql, args...) - if err != nil { - log.Printf("Unable to executing delete tindakan : %v", err) - return err - } - - // delete dokter - filters = []queryUtils.FilterGroup{ - { - Filters: []queryUtils.DynamicFilter{ - {Column: "data_pasien_operasi_id", Operator: queryUtils.OpEqual, Value: idAntrian}, - }, - }, - } - sql, args, err = r.queryBuilder.BuildDeleteQuery(TBL_DOKTER_OPERASI, filters) - if err != nil { - log.Printf("Unable to create delete dokter operasi query : %v", err) - return err - } - _, err = tx.ExecContext(c, sql, args...) - if err != nil { - log.Printf("Unable to executing delete dokter operasi : %v", err) - return err - } - - return nil -} - func (r antrianOperasiRepo) CreateAntrianOperasi(c context.Context, req CreatePasienOperasiRequest) (CreatePasienOperasiRequest, error) { db, err := r.db.GetSQLXDB(DB_NAME) if err != nil { @@ -371,8 +141,7 @@ func (r antrianOperasiRepo) SearchableListAntrianOperasi(c context.Context, q An return result, err } - // result, err = r.oldListAntrian(c, dbconn, q) - result, err = r.fixingListAntrian(c, dbconn, q) + result, err = r.getNumberedListAntrian(c, dbconn, q) if err != nil { return result, nil } @@ -839,157 +608,237 @@ func (r antrianOperasiRepo) DeleteStatusAntrianOperasi(c context.Context, id str // private functions -// this code will be deleted soon, change to fixingListAntrion() methods. -func (r antrianOperasiRepo) oldListAntrian(c context.Context, dbconn *sqlx.DB, q AntrianQuery) (ListPasienOperasiPaginate, error) { - var result ListPasienOperasiPaginate - - query := queryUtils.DynamicQuery{ - From: TBL_NAME, - Aliases: "dpo", - Fields: []queryUtils.SelectField{ - {Expression: "dpo.id"}, - {Expression: "dpo.Tanggal_daftar", Alias: "tanggal_daftar"}, - {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: "dko.Kategori", Alias: "kategori"}, - }, - Sort: []queryUtils.SortField{ - {Column: "dpo.Tanggal_daftar", Order: "ASC"}, - }, +func (r antrianOperasiRepo) insertAntrianChildTables(c context.Context, tx *sql.Tx, idAntrian string, req CreatePasienOperasiRequest) error { + returningCols := []string{ + "id", } - wfKategori := queryUtils.WindowFunction{ - Function: "ROW_NUMBER", - Over: "\"dpo\".\"Kategori_operasi\"", - OrderBy: "\"dpo\".\"Tanggal_daftar\"", - Alias: "no_urut_kategori", - } + // INSERT data_telepon_pasien_operasi + if len(req.FormData.NoTelepon) != 0 { + var valuesInsertTelepon [][]interface{} - wfSpesialis := queryUtils.WindowFunction{ - Function: "ROW_NUMBER", - Over: "\"dpo\".\"Spesialis\"", - OrderBy: "\"dpo\".\"Tanggal_daftar\", \"dpo\".\"date_created\", \"dpo\".\"date_updated\"", - Alias: "no_urut_spesialis", - } - wfSubSpesialis := queryUtils.WindowFunction{ - Function: "ROW_NUMBER", - Over: "\"dpo\".\"Sub_spesialis\"", - OrderBy: "\"dpo\".\"Tanggal_daftar\", \"dpo\".\"date_created\", \"dpo\".\"date_updated\"", - Alias: "no_urut_sub_spesialis", - } - - var selectFilter []queryUtils.DynamicFilter - typeIdColumn := "" - - switch q.Type { - case "kategori": - typeIdColumn = "dko.id" - query.WindowFunctions = append(query.WindowFunctions, wfKategori, wfSpesialis, wfSubSpesialis) - query.Sort = append(query.Sort, queryUtils.SortField{Column: "no_urut_kategori", Order: "ASC"}) - case "spesialis": - typeIdColumn = "ds.id" - query.WindowFunctions = append(query.WindowFunctions, wfSpesialis, wfSubSpesialis) - query.Sort = append(query.Sort, queryUtils.SortField{Column: "no_urut_spesialis", Order: "ASC"}) - case "sub-spesialis": - typeIdColumn = "dss.id" - query.WindowFunctions = append(query.WindowFunctions, wfSubSpesialis) - query.Sort = append(query.Sort, queryUtils.SortField{Column: "no_urut_sub_spesialis", Order: "ASC"}) - default: - query.WindowFunctions = append(query.WindowFunctions, wfKategori, wfSpesialis, wfSubSpesialis) - } - - if q.TypeID != 0 && q.Type != "all" { - selectFilter = append(selectFilter, queryUtils.DynamicFilter{Column: typeIdColumn, Operator: queryUtils.OpEqual, Value: q.TypeID}) - } - - query.Joins = []queryUtils.Join{ - { - Type: "LEFT", - Table: "daftar_spesialis", - Alias: "ds", - OnConditions: queryUtils.FilterGroup{ - Filters: []queryUtils.DynamicFilter{ - { - Column: "ds.id", Operator: queryUtils.OpEqual, Value: "dpo.Spesialis", - }, - }, - }, - }, - { - Type: "LEFT", - Table: "daftar_subspesialis", - Alias: "dss", - OnConditions: queryUtils.FilterGroup{ - Filters: []queryUtils.DynamicFilter{ - { - Column: "dpo.Sub_spesialis", Operator: queryUtils.OpEqual, Value: "dss.id", - }, - }, - }, - }, - { - Type: "LEFT", - Table: "daftar_kategori_operasi", - Alias: "dko", - OnConditions: queryUtils.FilterGroup{ - Filters: []queryUtils.DynamicFilter{ - { - Column: "dpo.Kategori_operasi", Operator: queryUtils.OpEqual, Value: "dko.id", - }, - }, - }, - }, - } - - // filtering search results - if q.Search != "" { - searchFilters := []queryUtils.DynamicFilter{ - {Column: "dpo.No_KTP", Operator: queryUtils.OpILike, Value: "%" + q.Search + "%"}, - {Column: "dpo.No_rekam_medis", Operator: queryUtils.OpILike, Value: "%" + q.Search + "%"}, - {Column: "dpo.Nama_pasien", Operator: queryUtils.OpILike, Value: "%" + q.Search + "%"}, + for _, telp := range req.FormData.NoTelepon { + idTelepon := uuid.New().String() + itemValues := []interface{}{idTelepon, telp, idAntrian} + valuesInsertTelepon = append(valuesInsertTelepon, itemValues) } - query.Filters = append(query.Filters, queryUtils.FilterGroup{Filters: searchFilters, LogicOp: "OR"}) + insertTeleponQuery := queryUtils.InsertBulkData{ + Columns: []string{ + "id", + "\"Nomor_telepon\"", + "\"FK_pasien_operasi_telepon_pasien_operasi_ID\"", + }, + Values: valuesInsertTelepon, + } + + sql, args, err := r.queryBuilder.BuildBulkInsertQuery(TBL_PASIEN_TELEPHONE, insertTeleponQuery, returningCols...) + if err != nil { + log.Printf("error building query telepon %s", err) + + return err + } + _, err = tx.ExecContext(c, sql, args...) + if err != nil { + log.Println(err) + return err + } + log.Printf("success insert telepon") } - if q.Status != "" { - selectFilter = append(selectFilter, queryUtils.DynamicFilter{Column: "dpo.Status_operasi", Operator: queryUtils.OpEqual, Value: q.Status}) + // INSERT data_diagnosa_pasien_operasi + var valuesDiagnosa [][]interface{} + + for _, diagnosa := range req.DiagnosisItem { + idDiagnosa := uuid.New().String() + itemValues := []interface{}{ + idDiagnosa, + diagnosa.KodeDiagnosa, + diagnosa.Diagnosa, + diagnosa.JenisDiagnosa, + idAntrian, + } + valuesDiagnosa = append(valuesDiagnosa, itemValues) } - // wiring all select filter - query.Filters = append(query.Filters, queryUtils.FilterGroup{Filters: selectFilter, LogicOp: "AND"}) + insertDiagnosaQuery := queryUtils.InsertBulkData{ + Columns: []string{ + "id", + "\"Kode_diagnosa\"", + "\"Diagnosa\"", + "\"Jenis_diagnosa\"", + "\"FK_pasien_operasi_diagnosa_pasien_operasi_ID\"", + }, + Values: valuesDiagnosa, + } - // query count - countData, err := r.queryBuilder.ExecuteCount(c, dbconn, query) + sql, args, err := r.queryBuilder.BuildBulkInsertQuery(TBL_DIAGNOSA_OPERASI, insertDiagnosaQuery, returningCols...) if err != nil { - log.Printf("Unable to execute query count : %s ", err) - return result, err + log.Printf("error building query diagnosa %s", err) + return err } - result.Paging.Limit = q.Limit - result.Paging.Offset = q.Offset - result.Paging.Total = int(countData) - result.Paging.CalculatePagingInfo() - - // query data - queryData := query - queryData.Limit = q.Limit - queryData.Offset = q.Offset - err = r.queryBuilder.ExecuteQuery( - c, dbconn, queryData, &result.Data) + _, err = tx.ExecContext(c, sql, args...) if err != nil { - log.Printf("Unable to execute query data : %s", err) - return result, err + log.Println(err) + return err + } + log.Printf("success insert diagnosa") + + // INSERT data_tindakan_pasien_operasi + var valuesTindakan [][]interface{} + + for _, tindakan := range req.TindakanItems { + idTindakan := uuid.New().String() + itemValues := []interface{}{ + idTindakan, + tindakan.KodeTindakan, + tindakan.Tindakan, + tindakan.TindakanTambahan, + idAntrian, + } + valuesTindakan = append(valuesTindakan, itemValues) } - return result, nil + insertTindakanQuery := queryUtils.InsertBulkData{ + Columns: []string{ + "id", + "\"Kode_tindakan\"", + "\"Tindakan\"", + "\"Tindakan_tambahan\"", + "\"FK_pasien_operasi_tindakan_pasien_operasi_ID\"", + }, + Values: valuesTindakan, + } + + sql, args, err = r.queryBuilder.BuildBulkInsertQuery(TBL_TINDAKAN_OPERASI, insertTindakanQuery, returningCols...) + if err != nil { + log.Printf("error building query tindakan %s", err) + return err + } + _, err = tx.ExecContext(c, sql, args...) + if err != nil { + log.Println(err) + return err + } + log.Printf("success insert tindakan") + + // INSERT data_pasien_operasi_data_pegawai + if len(req.DokterPelaksanaItems) != 0 { + var valuesDokterPelaksana [][]interface{} + + for _, dokter := range req.DokterPelaksanaItems { + itemValues := []interface{}{ + idAntrian, + dokter.Id, + } + valuesDokterPelaksana = append(valuesDokterPelaksana, itemValues) + } + + insertDokterPelaksanaQuery := queryUtils.InsertBulkData{ + Columns: []string{ + "\"data_pasien_operasi_id\"", + "\"data_pegawai_id\"", + }, + Values: valuesDokterPelaksana, + } + + sql, args, err = r.queryBuilder.BuildBulkInsertQuery(TBL_DOKTER_OPERASI, insertDokterPelaksanaQuery, returningCols...) + if err != nil { + log.Printf("error building query dokter pelaksana %s", err) + return err + } + _, err = tx.ExecContext(c, sql, args...) + if err != nil { + log.Println(err) + return err + } + } + + return nil } -func (r antrianOperasiRepo) fixingListAntrian(c context.Context, dbconn *sqlx.DB, q AntrianQuery) (ListPasienOperasiPaginate, error) { +func (r antrianOperasiRepo) deleteAntrianChildTables(c context.Context, tx *sql.Tx, idAntrian string) error { + // parsedId := uuid.MustParse(idAntrian) + // delete telephone + filters := []queryUtils.FilterGroup{ + { + Filters: []queryUtils.DynamicFilter{ + {Column: "FK_pasien_operasi_telepon_pasien_operasi_ID", Operator: queryUtils.OpEqual, Value: idAntrian}, + }, + }, + } + sql, args, err := r.queryBuilder.BuildDeleteQuery(TBL_PASIEN_TELEPHONE, filters) + if err != nil { + log.Printf("Unable to create delete phone query : %v", err) + return err + } + _, err = tx.ExecContext(c, sql, args...) + if err != nil { + log.Printf("Unable to executing delete phone : %v", err) + return err + } + + // delete diagnosa + filters = []queryUtils.FilterGroup{ + { + Filters: []queryUtils.DynamicFilter{ + {Column: "FK_pasien_operasi_diagnosa_pasien_operasi_ID", Operator: queryUtils.OpEqual, Value: idAntrian}, + }, + }, + } + sql, args, err = r.queryBuilder.BuildDeleteQuery(TBL_DIAGNOSA_OPERASI, filters) + if err != nil { + log.Printf("Unable to create delete diagnosa query : %v", err) + return err + } + _, err = tx.ExecContext(c, sql, args...) + if err != nil { + log.Printf("Unable to executing delete diagnosa : %v", err) + return err + } + + // delete tindakan + filters = []queryUtils.FilterGroup{ + { + Filters: []queryUtils.DynamicFilter{ + {Column: "FK_pasien_operasi_tindakan_pasien_operasi_ID", Operator: queryUtils.OpEqual, Value: idAntrian}, + }, + }, + } + sql, args, err = r.queryBuilder.BuildDeleteQuery(TBL_TINDAKAN_OPERASI, filters) + if err != nil { + log.Printf("Unable to create delete tindakan query : %v", err) + return err + } + _, err = tx.ExecContext(c, sql, args...) + if err != nil { + log.Printf("Unable to executing delete tindakan : %v", err) + return err + } + + // delete dokter + filters = []queryUtils.FilterGroup{ + { + Filters: []queryUtils.DynamicFilter{ + {Column: "data_pasien_operasi_id", Operator: queryUtils.OpEqual, Value: idAntrian}, + }, + }, + } + sql, args, err = r.queryBuilder.BuildDeleteQuery(TBL_DOKTER_OPERASI, filters) + if err != nil { + log.Printf("Unable to create delete dokter operasi query : %v", err) + return err + } + _, err = tx.ExecContext(c, sql, args...) + if err != nil { + log.Printf("Unable to executing delete dokter operasi : %v", err) + return err + } + + return nil +} + +func (r antrianOperasiRepo) getNumberedListAntrian(c context.Context, dbconn *sqlx.DB, q AntrianQuery) (ListPasienOperasiPaginate, error) { var result ListPasienOperasiPaginate numberedRowsName := "numbered" @@ -1070,9 +919,13 @@ func (r antrianOperasiRepo) fixingListAntrian(c context.Context, dbconn *sqlx.DB {Expression: "kategori"}, }, From: numberedRowsName, - Sort: []queryUtils.SortField{ - {Column: "tanggal_daftar", Order: "ASC"}, - }, + } + + // sort condition + if q.SortBy != "" && q.SortOrder != "" { + query.Sort = append(query.Sort, queryUtils.SortField{Column: q.SortBy, Order: q.SortOrder}) + } else { + query.Sort = append(query.Sort, queryUtils.SortField{Column: "tanggal_daftar", Order: "ASC"}) } // windows functions diff --git a/internal/domain/antrian_operasi/request.go b/internal/domain/antrian_operasi/request.go index 2c262c4..fbd99ab 100644 --- a/internal/domain/antrian_operasi/request.go +++ b/internal/domain/antrian_operasi/request.go @@ -62,11 +62,13 @@ type CreatePasienOperasiRequest struct { } type AntrianQuery struct { - Id string `form:"id"` - Search string `form:"search"` - Type string `form:"type,default=all" binding:"omitempty,oneof=all kategori spesialis sub-spesialis"` - TypeID int `form:"type_id,default=0"` - Status string `form:"status" binding:"omitempty,oneof=1 2 3 4"` - Limit int `form:"limit,default=10"` - Offset int `form:"offset,default=0"` + Id string `form:"id"` + Search string `form:"search"` + Type string `form:"type,default=all" binding:"omitempty,oneof=all kategori spesialis sub-spesialis"` + TypeID int `form:"type_id,default=0"` + Status string `form:"status" binding:"omitempty,oneof=1 2 3 4"` + Limit int `form:"limit,default=10"` + Offset int `form:"offset,default=0"` + SortBy string `form:"sort_by" binding:"omitempty,oneof=tanggal_daftar no_urut_kategori no_urut_spesialis"` + SortOrder string `form:"sort_order" binding:"omitempty,oneof=ASC DESC"` }