From 10f04373335366c0202289d6d19782e250cc09bc Mon Sep 17 00:00:00 2001 From: renaldybrada Date: Wed, 28 Jan 2026 14:59:18 +0700 Subject: [PATCH] create antrian operasi structure --- internal/domain/antrian_operasi/handler.go | 43 ++++++++++++++ internal/domain/antrian_operasi/model.go | 50 ++++++++++++++++ internal/domain/antrian_operasi/repository.go | 53 +++++++++++++++++ internal/domain/antrian_operasi/request.go | 59 +++++++++++++++++++ .../antrian_operasi/requestValidation.go | 8 +++ internal/domain/antrian_operasi/routes.go | 14 +++++ internal/routes/routes.go | 2 + 7 files changed, 229 insertions(+) create mode 100644 internal/domain/antrian_operasi/handler.go create mode 100644 internal/domain/antrian_operasi/model.go create mode 100644 internal/domain/antrian_operasi/repository.go create mode 100644 internal/domain/antrian_operasi/request.go create mode 100644 internal/domain/antrian_operasi/requestValidation.go create mode 100644 internal/domain/antrian_operasi/routes.go diff --git a/internal/domain/antrian_operasi/handler.go b/internal/domain/antrian_operasi/handler.go new file mode 100644 index 0000000..015f4a5 --- /dev/null +++ b/internal/domain/antrian_operasi/handler.go @@ -0,0 +1,43 @@ +package antrianoperasi + +import ( + "log" + + "github.com/gin-gonic/gin" +) + +type AntrianOperasiHandler struct { + repo IAntrianOperasiRepository +} + +func NewAntrianOperasiHandler(repo IAntrianOperasiRepository) AntrianOperasiHandler { + return AntrianOperasiHandler{repo} +} + +func (h AntrianOperasiHandler) CreateAntrianOperasi(c *gin.Context) { + var req CreatePasienOperasiRequest + // Binding format JSON + if err := c.ShouldBindJSON(&req); err != nil { + log.Printf("error bind json : %s", err) + c.JSON(500, err) + return + } + + // Request data master validation + errValidation := req.DataValidation() + if errValidation != nil { + log.Printf("validation error : %s", errValidation) + c.JSON(500, errValidation) + return + } + + // Start insert database + res, err := h.repo.CreateAntrianOperasi(c, req) + if err != nil { + log.Printf("insert error : %s", err) + c.JSON(500, err) + return + } + + c.JSON(201, res) +} diff --git a/internal/domain/antrian_operasi/model.go b/internal/domain/antrian_operasi/model.go new file mode 100644 index 0000000..b087a9a --- /dev/null +++ b/internal/domain/antrian_operasi/model.go @@ -0,0 +1,50 @@ +package antrianoperasi + +import "database/sql" + +type ListDiagnosaPasienOperasi struct { + ID int `json:"id" db:"id"` + KodeDiagnosa string `json:"kode_diagnosa" db:"Kode_diagnosa"` + Diagnosa string `json:"diagnosa" db:"Diagnosa"` + Keterangan string `json:"keterangan" db:"Keterangan"` + JenisDiagnosa string `json:"jenis_diagnosa" db:"Jenis_diagnosa"` +} + +type ListTindakanPasienOperasi struct { + ID int `json:"id" db:"id"` + KodeTindakan string `json:"kode_tindakan" db:"Kode_tindakan"` + Tindakan string `json:"tindakan" db:"Tindakan"` + TindakanTambahan string `json:"tindakan_tambahan" db:"Tindakan_tambahan"` +} + +type ListTeleponPasienOperasi struct { + ID int `json:"id" db:"id"` + NoTelepon string `json:"no_telepon" db:"Nomor_telepon"` +} + +type ListPasienOperasi struct { + ID string `db:"id"` + Status string `db:"status"` + NoRekamMedis string `db:"No_rekam_medis"` + NoKtp string `db:"No_KTP"` + NamaPasien string `db:"Nama_pasien"` + JenisKelamin string `db:"Jenis_kelamin"` + TglLahir sql.NullTime `db:"Tanggal_lahir"` + Umur string `db:"Umur"` + Alamat string `db:"Alamat"` + TglDaftar sql.NullTime `db:"Tanggal_daftar"` + IdKategoriOperasi int `db:"Kategori_operasi"` + RencanaOperasi string `db:"Rencana_operasi"` + Keterangan string `db:"Keterangan"` + TglSelesaiOperasi sql.NullTime `db:"Tanggal_selesai_operasi"` + StatusOperasi string `db:"Status_operasi"` + Nomor int `db:"Nomor"` + OldKategori int `db:"Old_kategori"` + IdSpesialis int `db:"Spesialis"` + IdSubSpesialis int `db:"Sub_spesialis"` + KeteranganStatusPasien string `db:"Keterangan_status_pasien"` + NomorSpesialis int `db:"Nomor_spesialis"` + NomorSubSpesialis int `db:"Nomor_sub_spesialis"` + OldSpesialis int `db:"Old_spesialis"` + OldSubSpesialis int `db:"Old_sub_spesialis"` +} diff --git a/internal/domain/antrian_operasi/repository.go b/internal/domain/antrian_operasi/repository.go new file mode 100644 index 0000000..e02a7f5 --- /dev/null +++ b/internal/domain/antrian_operasi/repository.go @@ -0,0 +1,53 @@ +package antrianoperasi + +import ( + "antrian-operasi/internal/database" + queryUtils "antrian-operasi/internal/utils/query" + "log" + + "github.com/gin-gonic/gin" +) + +const DB_NAME = "db_antrian" +const TABLE_NAME = "data_pasien_operasi" + +type IAntrianOperasiRepository interface { + CreateAntrianOperasi(c *gin.Context, req CreatePasienOperasiRequest) (CreatePasienOperasiRequest, error) +} + +type antrianOperasiRepo struct { + queryBuilder *queryUtils.QueryBuilder + db database.Service +} + +func NewAntrianOperasiRepo(dbService database.Service) IAntrianOperasiRepository { + queryBuilder := queryUtils.NewQueryBuilder(queryUtils.DBTypePostgreSQL). + SetAllowedColumns([]string{}) + queryBuilder.SetSecurityOptions(false, 100) + + return antrianOperasiRepo{ + queryBuilder: queryBuilder, + db: dbService, + } +} + +func (r antrianOperasiRepo) CreateAntrianOperasi(c *gin.Context, req CreatePasienOperasiRequest) (CreatePasienOperasiRequest, error) { + db, err := r.db.GetSQLXDB(DB_NAME) + if err != nil { + return req, err + } + + // START TRANSACTION + tx, err := db.BeginTx(c, nil) + if err != nil { + return req, err + } + + // INSERTING + log.Println("TODO : insert tables") + + // COMMIT TRANSACTION + tx.Commit() + + return req, nil +} diff --git a/internal/domain/antrian_operasi/request.go b/internal/domain/antrian_operasi/request.go new file mode 100644 index 0000000..b5f9082 --- /dev/null +++ b/internal/domain/antrian_operasi/request.go @@ -0,0 +1,59 @@ +package antrianoperasi + +import ( + "time" +) + +type FormDataRequest struct { + NoRekamMedis string `json:"noRekamMedis"` + NoKtp *string `json:"noKtp"` + NamaPasien *string `json:"namaPasien"` + JenisKelamin *string `json:"jenisKelamin"` + TglLahir *string `json:"tanggalLahir"` + Umur *string `json:"umur"` + Alamat *string `json:"alamat"` + NoTelepon *[]string `json:"nomorTelepon"` +} + +type DiagnosisItemRequest struct { + KodeDiagnosa *string `json:"kodeDiagnosa"` + Diagnosa *string `json:"diagnosa"` + JenisDiagnosa *string `json:"jenisDiagnosa"` +} + +type TindakanItemRequest struct { + KodeTindakan *string `json:"kodeTindakan"` + Tindakan *string `json:"tindakan"` + TindakanTambahan *string `json:"tindakanTambahan"` +} + +type RencanaOperasiRequest struct { + Spesialis int `json:"spesialis"` + SubSpesialis int `json:"subSpesialis"` + TanggalDaftar *time.Time `json:"tanggalDaftar"` + KategoriOperasi int `json:"kategoriOperasi"` + RencanaOperasi *string `json:"rencanaOperasi"` + Keterangan *string `json:"keterangan"` +} + +type DokterPelaksanaItemRequest struct { + Id *int `json:"id"` + Nip *string `json:"nip"` + Nama *string `json:"nama"` + SatuanKerja *string `json:"satuan_kerja"` +} + +type StatusPasienRequest struct { + TglSelesai *time.Time `json:"tanggalSelesai"` + StatusOperasi *string `json:"statusOperasi"` + KeteranganStatus *string `json:"keteranganStatus"` +} + +type CreatePasienOperasiRequest struct { + FormData FormDataRequest `json:"formData"` + DiagnosisItem []DiagnosisItemRequest `json:"diagnosisItems"` + TindakanItems []TindakanItemRequest `json:"tindakanItems"` + RencanaOperasiData RencanaOperasiRequest `json:"rencanaOperasiData"` + DokterPelaksanaItems []DokterPelaksanaItemRequest `json:"dokterPelaksanaItems"` + StatusPasienData StatusPasienRequest `json:"statusPasienData"` +} diff --git a/internal/domain/antrian_operasi/requestValidation.go b/internal/domain/antrian_operasi/requestValidation.go new file mode 100644 index 0000000..ef70ebb --- /dev/null +++ b/internal/domain/antrian_operasi/requestValidation.go @@ -0,0 +1,8 @@ +package antrianoperasi + +import "log" + +func (req CreatePasienOperasiRequest) DataValidation() error { + log.Println("TODO : Data Validation") + return nil +} diff --git a/internal/domain/antrian_operasi/routes.go b/internal/domain/antrian_operasi/routes.go new file mode 100644 index 0000000..9518753 --- /dev/null +++ b/internal/domain/antrian_operasi/routes.go @@ -0,0 +1,14 @@ +package antrianoperasi + +import ( + "antrian-operasi/internal/database" + + "github.com/gin-gonic/gin" +) + +func RegisterRoutes(r *gin.RouterGroup, dbService database.Service) { + antrianOperasiRepo := NewAntrianOperasiRepo(dbService) + antrianOperasiHandler := NewAntrianOperasiHandler(antrianOperasiRepo) + + r.POST("/antrian-operasi", antrianOperasiHandler.CreateAntrianOperasi) +} diff --git a/internal/routes/routes.go b/internal/routes/routes.go index 91aa868..ca016a2 100644 --- a/internal/routes/routes.go +++ b/internal/routes/routes.go @@ -3,6 +3,7 @@ package routes import ( "antrian-operasi/internal/config" "antrian-operasi/internal/database" + antrianoperasi "antrian-operasi/internal/domain/antrian_operasi" "antrian-operasi/internal/domain/reference/dokter" "antrian-operasi/internal/domain/reference/kategori" "antrian-operasi/internal/domain/reference/spesialis" @@ -34,6 +35,7 @@ func RegisterRoutes(cfg *config.Config, dbService database.Service) *gin.Engine kategori.RegisterRoutes(api, dbService) spesialis.RegisterRoutes(api, dbService) dokter.RegisterRoutes(api, dbService) + antrianoperasi.RegisterRoutes(api, dbService) } return router