fixing list query diagnosis antrian

This commit is contained in:
renaldybrada
2026-02-04 13:12:06 +07:00
parent c50c5f9d9e
commit 354a3b8561
4 changed files with 86 additions and 24 deletions
@@ -65,10 +65,12 @@ func (h AntrianOperasiHandler) CreateAntrianOperasi(c *gin.Context) {
res, err := h.repo.CreateAntrianOperasi(c, req)
if err != nil {
log.Printf("insert error : %s", err)
errMessage := []string{err.Error()}
c.JSON(500, shared.BaseErrorResponse{
Success: false,
Code: 500,
Message: "insert error",
Errors: errMessage,
})
return
}
+16 -8
View File
@@ -13,17 +13,25 @@ type PasienOperasi struct {
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"`
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"`
Diagnosa []string
Tindakan *string
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"`
}
type ListPasienOperasiPaginate struct {
Data []PasienOperasi
Paging shared.PaginationInfo
}
type DiagnosaOperasiModel struct {
ID string `db:"id"`
KodeDiagnosa string `db:"Kode_diagnosa"`
Diagnosa string `db:"Diagnosa"`
JenisDiagnosa string `db:"Jenis_diagnosa"`
AntrianId string `db:"antrian_id"`
}
+47 -16
View File
@@ -15,6 +15,7 @@ import (
const DB_NAME = "db_antrian"
const TBL_NAME = "data_pasien_operasi"
const TBL_DIAGNOSA_OPERASI = "data_diagnosa_pasien_operasi"
type IAntrianOperasiRepository interface {
CreateAntrianOperasi(c *gin.Context, req CreatePasienOperasiRequest) (CreatePasienOperasiRequest, error)
@@ -36,10 +37,11 @@ func NewRepository(dbService database.Service) IAntrianOperasiRepository {
"\"Nomor_spesialis\"", "\"Nomor_sub_spesialis\"",
"\"Nomor_telepon\"",
"\"FK_pasien_operasi_telepon_pasien_operasi_ID\"",
"\"Kode_diagnosa\"", "\"Diagnosa\"", "\"Jenis_diagnosa\"", "\"FK_pasien_operasi_diagnosa_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\"",
"\"data_pasien_operasi_id\"", "\"data_pegawai_id\"",
})
}).
SetAllowedTables([]string{TBL_NAME, TBL_DIAGNOSA_OPERASI})
queryBuilder.SetSecurityOptions(false, 100)
return antrianOperasiRepo{
@@ -298,8 +300,6 @@ func (r antrianOperasiRepo) SearchableListAntrianOperasi(c *gin.Context) (ListPa
{Expression: "dpo.Jenis_kelamin", Alias: "jenis_kelamin"},
{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"},
},
Sort: []queryUtils.SortField{
@@ -384,18 +384,6 @@ func (r antrianOperasiRepo) SearchableListAntrianOperasi(c *gin.Context) (ListPa
},
},
},
{
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
@@ -444,5 +432,48 @@ func (r antrianOperasiRepo) SearchableListAntrianOperasi(c *gin.Context) (ListPa
return result, err
}
// filtering antrian ids
var antrianIds []string
for _, item := range result.Data {
antrianIds = append(antrianIds, item.ID)
}
// query additional data
queryDiagnosa := queryUtils.DynamicQuery{
From: TBL_DIAGNOSA_OPERASI,
Aliases: "ddpo",
Fields: []queryUtils.SelectField{
{Expression: "id", Alias: "id"},
{Expression: "Kode_diagnosa", Alias: "Kode_diagnosa"},
{Expression: "Diagnosa", Alias: "Diagnosa"},
{Expression: "Jenis_diagnosa", Alias: "Jenis_diagnosa"},
{Expression: "FK_pasien_operasi_diagnosa_pasien_operasi_ID", Alias: "antrian_id"},
},
Filters: []queryUtils.FilterGroup{
{
Filters: []queryUtils.DynamicFilter{
{Column: "FK_pasien_operasi_diagnosa_pasien_operasi_ID", Operator: queryUtils.OpIn, Value: antrianIds},
}, LogicOp: "AND",
},
},
}
var resultDiagnosa []DiagnosaOperasiModel
err = r.queryBuilder.ExecuteQuery(c, dbconn, queryDiagnosa, &resultDiagnosa)
if err != nil {
log.Printf("Unable to execute query diagnosa : %s", err)
return result, err
}
// attach support data to parent
shared.MapChildToParent(
result.Data, resultDiagnosa,
func(o *PasienOperasi) string { return o.ID },
func(d DiagnosaOperasiModel) string { return d.AntrianId },
func(o *PasienOperasi, d DiagnosaOperasiModel) {
o.Diagnosa = append(o.Diagnosa, d.Diagnosa)
},
)
return result, nil
}
+21
View File
@@ -0,0 +1,21 @@
package shared
func MapChildToParent[P any, C any, K comparable](
parents []P,
children []C,
parentKey func(*P) K,
childKey func(C) K,
attach func(*P, C),
) {
index := make(map[K]*P)
for i := range parents {
index[parentKey(&parents[i])] = &parents[i]
}
for _, c := range children {
if p, ok := index[childKey(c)]; ok {
attach(p, c)
}
}
}