add gelar depan belakang

This commit is contained in:
renaldybrada
2026-03-03 12:07:44 +07:00
parent 3d86708446
commit 83e1776f86
7 changed files with 165 additions and 18 deletions
+7 -5
View File
@@ -50,11 +50,13 @@ type TeleponPasienModel struct {
}
type DokterOperasiModel struct {
ID string `db:"id"`
Nip sql.NullString `db:"nip"`
NamaDepan sql.NullString `db:"nama_depan"`
NamaBelakang sql.NullString `db:"nama_belakang"`
SatuanKerja string `db:"satker"`
ID string `db:"id"`
Nip sql.NullString `db:"nip"`
NamaDepan sql.NullString `db:"nama_depan"`
NamaBelakang sql.NullString `db:"nama_belakang"`
SatuanKerja string `db:"satker"`
GelarDepan []string
GelarBelakang []string
}
type DetailPasienOperasi struct {
+19 -2
View File
@@ -2,6 +2,7 @@ package antrianoperasi
import (
"antrian-operasi/internal/database"
"antrian-operasi/internal/domain/reference/dokter"
"antrian-operasi/internal/shared"
queryUtils "antrian-operasi/internal/utils/query"
"database/sql"
@@ -580,6 +581,7 @@ func (r antrianOperasiRepo) GetAntrianOperasiById(c context.Context, id string)
}
// query dokter
var resultDokterModel []dokter.DokterModel
queryDokter := queryUtils.DynamicQuery{
From: TBL_DOKTER_OPERASI,
Aliases: "dpodp",
@@ -588,7 +590,7 @@ func (r antrianOperasiRepo) GetAntrianOperasiById(c context.Context, id string)
{Expression: "dp.NIP", Alias: "nip"},
{Expression: "dp.Nama_depan", Alias: "nama_depan"},
{Expression: "dp.Nama_belakang", Alias: "nama_belakang"},
{Expression: "dk.Nama_ksm", Alias: "satker"},
{Expression: "dk.Nama_ksm", Alias: "nama_ksm"},
},
Filters: []queryUtils.FilterGroup{
{
@@ -625,12 +627,27 @@ func (r antrianOperasiRepo) GetAntrianOperasiById(c context.Context, id string)
},
}
err = r.queryBuilder.ExecuteQuery(c, dbconn, queryDokter, &result.ResultDokterOperasi)
err = r.queryBuilder.ExecuteQuery(c, dbconn, queryDokter, &resultDokterModel)
if err != nil {
log.Printf("Unable to execute dokter query : %s", err)
return result, err
}
//fetch gelar
resultDokterModel = dokter.FetchGelar(c, r.queryBuilder, dbconn, resultDokterModel)
//map to result.ResultDokterOperasi
for _, dokter := range resultDokterModel {
result.ResultDokterOperasi = append(result.ResultDokterOperasi, DokterOperasiModel{
ID: dokter.ID,
Nip: shared.NullString(dokter.Nip),
NamaBelakang: shared.NullString(dokter.NamaBelakang.String),
NamaDepan: shared.NullString(dokter.NamaDepan.String),
GelarDepan: dokter.GelarDepan,
GelarBelakang: dokter.GelarBelakang,
})
}
return result, nil
}
+7 -1
View File
@@ -80,7 +80,13 @@ func (model DetailPasienOperasiResultQuery) MapToResponse() DetailPasienOperasiR
}
for _, dk := range model.ResultDokterOperasi {
joinedName := strings.ToUpper(dk.NamaDepan.String) + " " + strings.ToUpper(dk.NamaBelakang.String)
namaDepan := strings.ToUpper(dk.NamaDepan.String)
namaBelakang := strings.ToUpper(dk.NamaBelakang.String)
gelarDepan := strings.Join(dk.GelarDepan, " ")
gelarBelakang := strings.Join(dk.GelarBelakang, ", ")
joinedName := gelarDepan + " " + namaDepan + " " + namaBelakang + " " + gelarBelakang
result.DokterPelaksanaItems = append(result.DokterPelaksanaItems, DokterPelaksanaItemRequest{
Id: dk.ID,
Nip: &dk.Nip.String,
@@ -38,9 +38,9 @@ func TestParsingDokter(t *testing.T) {
func TestParsingListDokter(t *testing.T) {
listModel := ListDokterModel{
DokterModel{"test-id-1", "test-nip-1", shared.NullString("A"), shared.NullString("B"), sql.NullString{}, "test-ksm-1"},
DokterModel{"test-id-2", "test-nip-2", shared.NullString("C"), shared.NullString("D"), sql.NullString{}, "test-ksm-2"},
DokterModel{"test-id-3", "test-nip-3", shared.NullString("E"), shared.NullString("F"), sql.NullString{}, "test-ksm-3"},
DokterModel{"test-id-1", "test-nip-1", shared.NullString("A"), shared.NullString("B"), sql.NullString{}, "test-ksm-1", []string{}, []string{}},
DokterModel{"test-id-2", "test-nip-2", shared.NullString("C"), shared.NullString("D"), sql.NullString{}, "test-ksm-2", []string{}, []string{}},
DokterModel{"test-id-3", "test-nip-3", shared.NullString("E"), shared.NullString("F"), sql.NullString{}, "test-ksm-3", []string{}, []string{}},
}
t.Run("test length model list and list response", func(t *testing.T) {
+13 -6
View File
@@ -6,12 +6,19 @@ import (
)
type DokterModel struct {
ID string `json:"id" db:"id"`
Nip string `json:"nip" db:"nip"`
NamaDepan sql.NullString `json:"nama_depan" db:"nama_depan"`
NamaBelakang sql.NullString `json:"nama_belakang" db:"nama_belakang"`
HfisCode sql.NullString `json:"hfis_code" db:"hfis_code"`
NamaKsm string `json:"nama_ksm" db:"nama_ksm"`
ID string `json:"id" db:"id"`
Nip string `json:"nip" db:"nip"`
NamaDepan sql.NullString `json:"nama_depan" db:"nama_depan"`
NamaBelakang sql.NullString `json:"nama_belakang" db:"nama_belakang"`
HfisCode sql.NullString `json:"hfis_code" db:"hfis_code"`
NamaKsm string `json:"nama_ksm" db:"nama_ksm"`
GelarDepan []string
GelarBelakang []string
}
type GelarModel struct {
Gelar string `db:"gelar"`
IDDokter string `db:"id_dokter"`
}
type DokterResponse struct {
@@ -9,10 +9,16 @@ import (
queryUtils "antrian-operasi/internal/utils/query"
"context"
"github.com/jmoiron/sqlx"
)
const DB_NAME = "db_antrian"
const TBL_NAME = "data_pegawai"
const TBL_GELAR_DEPAN = "daftar_gelar_depan"
const TBL_GELAR_BELAKANG = "daftar_gelar_belakang"
const TBL_RELASI_GELAR_DEPAN = "data_pegawai_daftar_gelar_depan"
const TBL_RELASI_GELAR_BLKG = "data_pegawai_daftar_gelar_belakang"
type IDokterRepository interface {
SearchableListDokter(c context.Context, search string, limit int, offset int) (ListDokterModelPaginate, error)
@@ -74,6 +80,108 @@ func baseSelectQuery() queryUtils.DynamicQuery {
return query
}
func FetchGelar(c context.Context, qb *queryUtils.QueryBuilder, dbconn *sqlx.DB, listDokter []DokterModel) []DokterModel {
var listGelarDepan []GelarModel
var listGelarBelakang []GelarModel
dokterIds := make([]string, 0, len(listDokter))
for _, dokter := range listDokter {
dokterIds = append(dokterIds, dokter.ID)
}
queryGelarDepan := queryUtils.DynamicQuery{
Fields: []queryUtils.SelectField{
{Expression: "rgd.data_pegawai_id", Alias: "id_dokter"},
{Expression: "gd.Gelar_depan", Alias: "gelar"},
},
From: TBL_RELASI_GELAR_DEPAN,
Aliases: "rgd",
Joins: []queryUtils.Join{
{
Type: "LEFT",
Table: TBL_GELAR_DEPAN,
Alias: "gd",
OnConditions: queryUtils.FilterGroup{
Filters: []queryUtils.DynamicFilter{
{
Column: "gd.id", Operator: queryUtils.OpEqual, Value: "rgd.daftar_gelar_depan_id",
},
},
},
},
},
Filters: []queryUtils.FilterGroup{
{
Filters: []queryUtils.DynamicFilter{
{
Column: "rgd.data_pegawai_id", Operator: queryUtils.OpIn, Value: dokterIds,
},
},
},
},
}
queryGelarBelakang := queryUtils.DynamicQuery{
Fields: []queryUtils.SelectField{
{Expression: "rgb.data_pegawai_id", Alias: "id_dokter"},
{Expression: "gb.Gelar_belakang", Alias: "gelar"},
},
From: TBL_RELASI_GELAR_BLKG,
Aliases: "rgb",
Joins: []queryUtils.Join{
{
Type: "LEFT",
Table: TBL_GELAR_BELAKANG,
Alias: "gb",
OnConditions: queryUtils.FilterGroup{
Filters: []queryUtils.DynamicFilter{
{
Column: "gb.id", Operator: queryUtils.OpEqual, Value: "rgb.daftar_gelar_belakang_id",
},
},
},
},
},
Filters: []queryUtils.FilterGroup{
{
Filters: []queryUtils.DynamicFilter{
{
Column: "rgb.data_pegawai_id", Operator: queryUtils.OpIn, Value: dokterIds,
},
},
},
},
}
err := qb.ExecuteQuery(c, dbconn, queryGelarDepan, &listGelarDepan)
if err != nil {
return listDokter
}
err = qb.ExecuteQuery(c, dbconn, queryGelarBelakang, &listGelarBelakang)
if err != nil {
return listDokter
}
mapGelarDepan := make(map[string][]string)
mapGelarBelakang := make(map[string][]string)
for _, g := range listGelarDepan {
mapGelarDepan[g.IDDokter] = append(mapGelarDepan[g.IDDokter], g.Gelar)
}
for _, g := range listGelarBelakang {
mapGelarBelakang[g.IDDokter] = append(mapGelarBelakang[g.IDDokter], g.Gelar)
}
for idx := range listDokter {
listDokter[idx].GelarDepan = mapGelarDepan[listDokter[idx].ID]
listDokter[idx].GelarBelakang = mapGelarBelakang[listDokter[idx].ID]
}
return listDokter
}
func (r dokterRepo) SearchableListDokter(c context.Context, search string, limit int, offset int) (ListDokterModelPaginate, error) {
var result ListDokterModelPaginate
@@ -128,6 +236,8 @@ func (r dokterRepo) SearchableListDokter(c context.Context, search string, limit
return result, err
}
result.Data = FetchGelar(c, r.queryBuilder, dbconn, result.Data)
return result, nil
}
+6 -1
View File
@@ -8,10 +8,15 @@ func DokterRowToResponse(row DokterModel) DokterResponse {
hfis = &row.HfisCode.String
}
namaDepan := strings.ToUpper(row.NamaDepan.String)
namaBelakang := strings.ToUpper(row.NamaBelakang.String)
gelarDepan := strings.Join(row.GelarDepan, " ")
gelarBelakang := strings.Join(row.GelarBelakang, ", ")
return DokterResponse{
ID: row.ID,
Nip: row.Nip,
NamaLengkap: strings.ToUpper(row.NamaDepan.String) + " " + strings.ToUpper(row.NamaBelakang.String),
NamaLengkap: gelarDepan + " " + namaDepan + " " + namaBelakang + " " + gelarBelakang,
HfisCode: hfis,
NamaKsm: row.NamaKsm,
}