diff --git a/query/pemeriksaan/dokter/create_pemeriksaan_dokter.go b/query/pemeriksaan/dokter/create_pemeriksaan_dokter.go index 25120a165f4a41cff45bd04e861a6128fabb8658..7f96cf96438df867638ef1f10dcb08462c67dfb0 100644 --- a/query/pemeriksaan/dokter/create_pemeriksaan_dokter.go +++ b/query/pemeriksaan/dokter/create_pemeriksaan_dokter.go @@ -1 +1,104 @@ package dokter + +import ( + "seno-medika.com/config/db" + "seno-medika.com/model/station/doctorstation" + "sync" + "time" +) + +func AddPemeriksaanDokterDefault(pemeriksaan doctorstation.PemeriksaanDokter) error { + var ( + pasienId string + wg sync.WaitGroup + ) + + errChan := make(chan error, 2) + + go func() { + defer wg.Done() + if err := db.DB.QueryRow("INSERT INTO pemeriksaan_dokter (antrian_id, dokter_id, perawat_id) VALUES ($1, $2, $3) RETURNING pemeriksaan_dokter_id", pemeriksaan.AntrianId, pemeriksaan.DokterId, pemeriksaan.PerawatId).Scan(&pemeriksaan.PemeriksaanDokterId); err != nil { + errChan <- err + return + } + }() + + go func() { + defer wg.Done() + if err := db.DB.QueryRow("SELECT pasien_id FROM antrian WHERE antrian_id = $1", pemeriksaan.AntrianId).Scan(&pasienId); err != nil { + errChan <- err + return + } + }() + + wg.Wait() + close(errChan) + + for val := range errChan { + if val != nil { + return val + } + } + + wg.Add(6) + errChan = make(chan error, 6) + + go func() { + defer wg.Done() + if _, err := db.DB.Exec("INSERT INTO riwayat_pemeriksaan (pemeriksaan_dokter_id, pasien_id, tanggal) VALUES ($1, $2, $3)", pemeriksaan.PemeriksaanDokterId, pasienId, time.Now().Format("2006-01-02")); err != nil { + errChan <- err + return + } + }() + + go func() { + defer wg.Done() + if _, err := db.DB.Exec("INSERT INTO keadaan_fisik (pemeriksaan_dokter_id) VALUES ($1)", pemeriksaan.PemeriksaanDokterId); err != nil { + errChan <- err + return + } + }() + + go func() { + defer wg.Done() + if _, err := db.DB.Exec("INSERT INTO pemeriksaan_fisik (pemeriksaan_dokter_id) VALUES ($1)", pemeriksaan.PemeriksaanDokterId); err != nil { + errChan <- err + return + } + }() + + go func() { + defer wg.Done() + if _, err := db.DB.Exec("INSERT INTO diagnosa(pemeriksaan_dokter_id) VALUES ($1)", pemeriksaan.PemeriksaanDokterId); err != nil { + errChan <- err + return + } + }() + + go func() { + defer wg.Done() + if _, err := db.DB.Exec("INSERT INTO resep(pemeriksaan_dokter_id) VALUES ($1)", pemeriksaan.PemeriksaanDokterId); err != nil { + errChan <- err + return + } + }() + + go func() { + defer wg.Done() + if _, err := db.DB.Exec("INSERT INTO anatomi(pemeriksaan_dokter_id, pasien_id) VALUES ($1, $2)", pemeriksaan.PemeriksaanDokterId, pasienId); err != nil { + errChan <- err + return + } + }() + + wg.Wait() + close(errChan) + + for val := range errChan { + if val != nil { + return val + } + } + + return nil +}