list antrian operasi

This commit is contained in:
renaldybrada
2026-01-30 14:51:43 +07:00
parent 1dbdb47afb
commit 16bfe4a1e5
4 changed files with 131 additions and 47 deletions
@@ -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"))
}
+12 -46
View File
@@ -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"`
}
+104 -1
View File
@@ -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
}
@@ -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)
}