fixing list query diagnosis antrian
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
@@ -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"`
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user