diff --git a/internal/domain/antrian_operasi/handler.go b/internal/domain/antrian_operasi/handler.go index 9fad65c..5504ef0 100644 --- a/internal/domain/antrian_operasi/handler.go +++ b/internal/domain/antrian_operasi/handler.go @@ -68,3 +68,17 @@ func (h AntrianOperasiHandler) CreateAntrianOperasi(c *gin.Context) { c.JSON(201, shared.ToBaseResponse(res, true, 201, "success insert antrian operasi")) } + +func (h AntrianOperasiHandler) GetListAntrianOperasi(c *gin.Context) { + res, err := h.repo.SearchableListAntrianOperasi(c) + if err != nil { + c.JSON(500, shared.BaseErrorResponse{ + Success: false, + Code: 500, + Message: err.Error(), + }) + return + } + + c.JSON(200, shared.ToBaseResponse(res, true, 200, "success get list antrian operasi")) +} diff --git a/internal/domain/antrian_operasi/model.go b/internal/domain/antrian_operasi/model.go index b087a9a..f4998f0 100644 --- a/internal/domain/antrian_operasi/model.go +++ b/internal/domain/antrian_operasi/model.go @@ -1,50 +1,16 @@ package antrianoperasi -import "database/sql" +import "time" -type ListDiagnosaPasienOperasi struct { - ID int `json:"id" db:"id"` - KodeDiagnosa string `json:"kode_diagnosa" db:"Kode_diagnosa"` - Diagnosa string `json:"diagnosa" db:"Diagnosa"` - Keterangan string `json:"keterangan" db:"Keterangan"` - JenisDiagnosa string `json:"jenis_diagnosa" db:"Jenis_diagnosa"` -} - -type ListTindakanPasienOperasi struct { - ID int `json:"id" db:"id"` - KodeTindakan string `json:"kode_tindakan" db:"Kode_tindakan"` - Tindakan string `json:"tindakan" db:"Tindakan"` - TindakanTambahan string `json:"tindakan_tambahan" db:"Tindakan_tambahan"` -} - -type ListTeleponPasienOperasi struct { - ID int `json:"id" db:"id"` - NoTelepon string `json:"no_telepon" db:"Nomor_telepon"` -} - -type ListPasienOperasi struct { - ID string `db:"id"` - Status string `db:"status"` - NoRekamMedis string `db:"No_rekam_medis"` - NoKtp string `db:"No_KTP"` - NamaPasien string `db:"Nama_pasien"` - JenisKelamin string `db:"Jenis_kelamin"` - TglLahir sql.NullTime `db:"Tanggal_lahir"` - Umur string `db:"Umur"` - Alamat string `db:"Alamat"` - TglDaftar sql.NullTime `db:"Tanggal_daftar"` - IdKategoriOperasi int `db:"Kategori_operasi"` - RencanaOperasi string `db:"Rencana_operasi"` - Keterangan string `db:"Keterangan"` - TglSelesaiOperasi sql.NullTime `db:"Tanggal_selesai_operasi"` - StatusOperasi string `db:"Status_operasi"` - Nomor int `db:"Nomor"` - OldKategori int `db:"Old_kategori"` - IdSpesialis int `db:"Spesialis"` - IdSubSpesialis int `db:"Sub_spesialis"` - KeteranganStatusPasien string `db:"Keterangan_status_pasien"` - NomorSpesialis int `db:"Nomor_spesialis"` - NomorSubSpesialis int `db:"Nomor_sub_spesialis"` - OldSpesialis int `db:"Old_spesialis"` - OldSubSpesialis int `db:"Old_sub_spesialis"` +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"` } diff --git a/internal/domain/antrian_operasi/repository.go b/internal/domain/antrian_operasi/repository.go index fcc500e..b28f0af 100644 --- a/internal/domain/antrian_operasi/repository.go +++ b/internal/domain/antrian_operasi/repository.go @@ -11,10 +11,11 @@ import ( ) const DB_NAME = "db_antrian" -const TABLE_NAME = "data_pasien_operasi" +const TBL_NAME = "data_pasien_operasi" type IAntrianOperasiRepository interface { CreateAntrianOperasi(c *gin.Context, req CreatePasienOperasiRequest) (CreatePasienOperasiRequest, error) + SearchableListAntrianOperasi(c *gin.Context) ([]PasienOperasi, error) } type antrianOperasiRepo struct { @@ -264,3 +265,105 @@ func (r antrianOperasiRepo) CreateAntrianOperasi(c *gin.Context, req CreatePasie return req, nil } + +func (r antrianOperasiRepo) SearchableListAntrianOperasi(c *gin.Context) ([]PasienOperasi, error) { + var result []PasienOperasi + search := c.Query("search") + + 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: "ds.Spesialis", Alias: "spesialis"}, + {Expression: "dss.Subspesialis", Alias: "subspesialis"}, + {Expression: "ddpo.Kode_diagnosa", Alias: "kode_diagnosa"}, + {Expression: "ddpo.Diagnosa", Alias: "diagnosa"}, + {Expression: "dko.Kategori", Alias: "kategori"}, + }, + Limit: 10, + Sort: []queryUtils.SortField{ + {Column: "created_at", Order: "DESC"}}, + } + + 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", + }, + }, + }, + }, + { + Type: "LEFT", + Table: "data_diagnosa_pasien_operasi", + Alias: "ddpo", + OnConditions: queryUtils.FilterGroup{ + Filters: []queryUtils.DynamicFilter{ + { + Column: "dpo.id", Operator: queryUtils.OpEqual, Value: "ddpo.FK_pasien_operasi_diagnosa_pasien_operasi_ID", + }, + }, + }, + }, + } + + // filtering search results + if search != "" { + searchFilters := []queryUtils.DynamicFilter{ + {Column: "dpo.No_KTP", Operator: queryUtils.OpILike, Value: "%" + search + "%"}, + {Column: "dpo.No_rekam_medis", Operator: queryUtils.OpILike, Value: "%" + search + "%"}, + {Column: "dpo.Nama_pasien", Operator: queryUtils.OpILike, Value: "%" + search + "%"}, + } + + query.Filters = append(query.Filters, queryUtils.FilterGroup{Filters: searchFilters, LogicOp: "OR"}) + } + + dbconn, err := r.db.GetSQLXDB(DB_NAME) + if err != nil { + log.Printf("Unable to connect db : %s", err) + return result, err + } + + err = r.queryBuilder.ExecuteQuery( + c, dbconn, query, &result) + if err != nil { + log.Printf("Unable to execute query : %s", err) + return result, err + } + + return result, nil +} diff --git a/internal/domain/antrian_operasi/routes.go b/internal/domain/antrian_operasi/routes.go index 4e40bc6..e2a3650 100644 --- a/internal/domain/antrian_operasi/routes.go +++ b/internal/domain/antrian_operasi/routes.go @@ -19,4 +19,5 @@ func RegisterRoutes(r *gin.RouterGroup, dbService database.Service) { antrianOperasiRepo, kategoriRepo, spesialisRepo, dokterRepo) r.POST("/antrian-operasi", antrianOperasiHandler.CreateAntrianOperasi) + r.GET("/antrian-operasi", antrianOperasiHandler.GetListAntrianOperasi) }