From 845564eba92e4e10231dee42ee7685e18fa41560 Mon Sep 17 00:00:00 2001 From: renaldybrada Date: Mon, 9 Feb 2026 11:53:04 +0700 Subject: [PATCH] separating insert child tables from main insert --- internal/domain/antrian_operasi/repository.go | 300 +++++++++--------- 1 file changed, 148 insertions(+), 152 deletions(-) diff --git a/internal/domain/antrian_operasi/repository.go b/internal/domain/antrian_operasi/repository.go index 14a9cd4..d13237a 100644 --- a/internal/domain/antrian_operasi/repository.go +++ b/internal/domain/antrian_operasi/repository.go @@ -4,6 +4,7 @@ import ( "antrian-operasi/internal/database" "antrian-operasi/internal/shared" queryUtils "antrian-operasi/internal/utils/query" + "database/sql" "log" "slices" "strconv" @@ -51,6 +52,151 @@ func NewRepository(dbService database.Service) IAntrianOperasiRepository { } } +func (r antrianOperasiRepo) insertAntrianChildTables(c *gin.Context, tx *sql.Tx, idAntrian string, req CreatePasienOperasiRequest) error { + returningCols := []string{ + "id", + } + + // INSERT data_telepon_pasien_operasi + var valuesInsertTelepon [][]interface{} + + for _, telp := range req.FormData.NoTelepon { + idTelepon := uuid.New().String() + itemValues := []interface{}{idTelepon, telp, idAntrian} + valuesInsertTelepon = append(valuesInsertTelepon, itemValues) + } + + insertTeleponQuery := queryUtils.InsertBulkData{ + Columns: []string{ + "id", + "\"Nomor_telepon\"", + "\"FK_pasien_operasi_telepon_pasien_operasi_ID\"", + }, + Values: valuesInsertTelepon, + } + + sql, args, err := r.queryBuilder.BuildBulkInsertQuery("data_telepon_pasien_operasi", insertTeleponQuery, returningCols...) + if err != nil { + log.Printf("error building query telepon %s", err) + + return err + } + _, err = tx.ExecContext(c, sql, args...) + if err != nil { + log.Println(err) + return err + } + log.Printf("success insert telepon") + + // INSERT data_diagnosa_pasien_operasi + var valuesDiagnosa [][]interface{} + + for _, diagnosa := range req.DiagnosisItem { + idDiagnosa := uuid.New().String() + itemValues := []interface{}{ + idDiagnosa, + diagnosa.KodeDiagnosa, + diagnosa.Diagnosa, + diagnosa.JenisDiagnosa, + idAntrian, + } + valuesDiagnosa = append(valuesDiagnosa, itemValues) + } + + insertDiagnosaQuery := queryUtils.InsertBulkData{ + Columns: []string{ + "id", + "\"Kode_diagnosa\"", + "\"Diagnosa\"", + "\"Jenis_diagnosa\"", + "\"FK_pasien_operasi_diagnosa_pasien_operasi_ID\"", + }, + Values: valuesDiagnosa, + } + + sql, args, err = r.queryBuilder.BuildBulkInsertQuery("data_diagnosa_pasien_operasi", insertDiagnosaQuery, returningCols...) + if err != nil { + log.Printf("error building query diagnosa %s", err) + return err + } + _, err = tx.ExecContext(c, sql, args...) + if err != nil { + log.Println(err) + return err + } + log.Printf("success insert diagnosa") + + // INSERT data_tindakan_pasien_operasi + var valuesTindakan [][]interface{} + + for _, tindakan := range req.TindakanItems { + idTindakan := uuid.New().String() + itemValues := []interface{}{ + idTindakan, + tindakan.KodeTindakan, + tindakan.Tindakan, + tindakan.TindakanTambahan, + idAntrian, + } + valuesTindakan = append(valuesTindakan, itemValues) + } + + insertTindakanQuery := queryUtils.InsertBulkData{ + Columns: []string{ + "id", + "\"Kode_tindakan\"", + "\"Tindakan\"", + "\"Tindakan_tambahan\"", + "\"FK_pasien_operasi_tindakan_pasien_operasi_ID\"", + }, + Values: valuesTindakan, + } + + sql, args, err = r.queryBuilder.BuildBulkInsertQuery("data_tindakan_pasien_operasi", insertTindakanQuery, returningCols...) + if err != nil { + log.Printf("error building query tindakan %s", err) + return err + } + _, err = tx.ExecContext(c, sql, args...) + if err != nil { + log.Println(err) + return err + } + log.Printf("success insert tindakan") + + // INSERT data_pasien_operasi_data_pegawai + var valuesDokterPelaksana [][]interface{} + + for _, dokter := range req.DokterPelaksanaItems { + itemValues := []interface{}{ + idAntrian, + dokter.Id, + } + valuesDokterPelaksana = append(valuesDokterPelaksana, itemValues) + } + + insertDokterPelaksanaQuery := queryUtils.InsertBulkData{ + Columns: []string{ + "\"data_pasien_operasi_id\"", + "\"data_pegawai_id\"", + }, + Values: valuesDokterPelaksana, + } + + sql, args, err = r.queryBuilder.BuildBulkInsertQuery("data_pasien_operasi_data_pegawai_2", insertDokterPelaksanaQuery, returningCols...) + if err != nil { + log.Printf("error building query dokter pelaksana %s", err) + return err + } + _, err = tx.ExecContext(c, sql, args...) + if err != nil { + log.Println(err) + return err + } + + return nil +} + func (r antrianOperasiRepo) CreateAntrianOperasi(c *gin.Context, req CreatePasienOperasiRequest) (CreatePasienOperasiRequest, error) { db, err := r.db.GetSQLXDB(DB_NAME) if err != nil { @@ -109,162 +255,12 @@ func (r antrianOperasiRepo) CreateAntrianOperasi(c *gin.Context, req CreatePasie } log.Printf("success insert main") - // INSERT data_telepon_pasien_operasi - var valuesInsertTelepon [][]interface{} - - for _, telp := range req.FormData.NoTelepon { - idTelepon := uuid.New().String() - itemValues := []interface{}{idTelepon, telp, idAntrian} - valuesInsertTelepon = append(valuesInsertTelepon, itemValues) - } - - insertTeleponQuery := queryUtils.InsertBulkData{ - Columns: []string{ - "id", - "\"Nomor_telepon\"", - "\"FK_pasien_operasi_telepon_pasien_operasi_ID\"", - }, - Values: valuesInsertTelepon, - } - - sql, args, err = r.queryBuilder.BuildBulkInsertQuery("data_telepon_pasien_operasi", insertTeleponQuery, returningCols...) - if err != nil { - log.Printf("error building query telepon %s", err) - tx.Rollback() - - return req, err - } - _, err = tx.ExecContext(c, sql, args...) + // INSERT CHILD TABLES + err = r.insertAntrianChildTables(c, tx, idAntrian, req) if err != nil { tx.Rollback() - - log.Println(err) - return req, err } - log.Printf("success insert telepon") - - // INSERT data_diagnosa_pasien_operasi - var valuesDiagnosa [][]interface{} - - for _, diagnosa := range req.DiagnosisItem { - idDiagnosa := uuid.New().String() - itemValues := []interface{}{ - idDiagnosa, - diagnosa.KodeDiagnosa, - diagnosa.Diagnosa, - diagnosa.JenisDiagnosa, - idAntrian, - } - valuesDiagnosa = append(valuesDiagnosa, itemValues) - } - - insertDiagnosaQuery := queryUtils.InsertBulkData{ - Columns: []string{ - "id", - "\"Kode_diagnosa\"", - "\"Diagnosa\"", - "\"Jenis_diagnosa\"", - "\"FK_pasien_operasi_diagnosa_pasien_operasi_ID\"", - }, - Values: valuesDiagnosa, - } - - sql, args, err = r.queryBuilder.BuildBulkInsertQuery("data_diagnosa_pasien_operasi", insertDiagnosaQuery, returningCols...) - if err != nil { - log.Printf("error building query diagnosa %s", err) - tx.Rollback() - - return req, err - } - _, err = tx.ExecContext(c, sql, args...) - if err != nil { - tx.Rollback() - - log.Println(err) - - return req, err - } - log.Printf("success insert diagnosa") - - // INSERT data_tindakan_pasien_operasi - var valuesTindakan [][]interface{} - - for _, tindakan := range req.TindakanItems { - idTindakan := uuid.New().String() - itemValues := []interface{}{ - idTindakan, - tindakan.KodeTindakan, - tindakan.Tindakan, - tindakan.TindakanTambahan, - idAntrian, - } - valuesTindakan = append(valuesTindakan, itemValues) - } - - insertTindakanQuery := queryUtils.InsertBulkData{ - Columns: []string{ - "id", - "\"Kode_tindakan\"", - "\"Tindakan\"", - "\"Tindakan_tambahan\"", - "\"FK_pasien_operasi_tindakan_pasien_operasi_ID\"", - }, - Values: valuesTindakan, - } - - sql, args, err = r.queryBuilder.BuildBulkInsertQuery("data_tindakan_pasien_operasi", insertTindakanQuery, returningCols...) - if err != nil { - log.Printf("error building query tindakan %s", err) - tx.Rollback() - - return req, err - } - _, err = tx.ExecContext(c, sql, args...) - if err != nil { - tx.Rollback() - - log.Println(err) - - return req, err - } - log.Printf("success insert tindakan") - - // INSERT data_pasien_operasi_data_pegawai - var valuesDokterPelaksana [][]interface{} - - for _, dokter := range req.DokterPelaksanaItems { - itemValues := []interface{}{ - idAntrian, - dokter.Id, - } - valuesDokterPelaksana = append(valuesDokterPelaksana, itemValues) - } - - insertDokterPelaksanaQuery := queryUtils.InsertBulkData{ - Columns: []string{ - "\"data_pasien_operasi_id\"", - "\"data_pegawai_id\"", - }, - Values: valuesDokterPelaksana, - } - - sql, args, err = r.queryBuilder.BuildBulkInsertQuery("data_pasien_operasi_data_pegawai", insertDokterPelaksanaQuery, returningCols...) - if err != nil { - log.Printf("error building query dokter pelaksana %s", err) - tx.Rollback() - - return req, err - } - _, err = tx.ExecContext(c, sql, args...) - if err != nil { - tx.Rollback() - - log.Println(err) - - return req, err - } - log.Printf("success insert dokter pelaksana") // COMMIT TRANSACTION tx.Commit()