separating insert child tables from main insert
This commit is contained in:
@@ -4,6 +4,7 @@ import (
|
|||||||
"antrian-operasi/internal/database"
|
"antrian-operasi/internal/database"
|
||||||
"antrian-operasi/internal/shared"
|
"antrian-operasi/internal/shared"
|
||||||
queryUtils "antrian-operasi/internal/utils/query"
|
queryUtils "antrian-operasi/internal/utils/query"
|
||||||
|
"database/sql"
|
||||||
"log"
|
"log"
|
||||||
"slices"
|
"slices"
|
||||||
"strconv"
|
"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) {
|
func (r antrianOperasiRepo) CreateAntrianOperasi(c *gin.Context, req CreatePasienOperasiRequest) (CreatePasienOperasiRequest, error) {
|
||||||
db, err := r.db.GetSQLXDB(DB_NAME)
|
db, err := r.db.GetSQLXDB(DB_NAME)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -109,162 +255,12 @@ func (r antrianOperasiRepo) CreateAntrianOperasi(c *gin.Context, req CreatePasie
|
|||||||
}
|
}
|
||||||
log.Printf("success insert main")
|
log.Printf("success insert main")
|
||||||
|
|
||||||
// INSERT data_telepon_pasien_operasi
|
// INSERT CHILD TABLES
|
||||||
var valuesInsertTelepon [][]interface{}
|
err = r.insertAntrianChildTables(c, tx, idAntrian, req)
|
||||||
|
|
||||||
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...)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
tx.Rollback()
|
tx.Rollback()
|
||||||
|
|
||||||
log.Println(err)
|
|
||||||
|
|
||||||
return req, 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
|
// COMMIT TRANSACTION
|
||||||
tx.Commit()
|
tx.Commit()
|
||||||
|
|||||||
Reference in New Issue
Block a user