create antrian operasi structure

This commit is contained in:
renaldybrada
2026-01-28 14:59:18 +07:00
parent 8e272b5c48
commit 10f0437333
7 changed files with 229 additions and 0 deletions

View File

@@ -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)
}

View File

@@ -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"`
}

View File

@@ -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
}

View File

@@ -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"`
}

View File

@@ -0,0 +1,8 @@
package antrianoperasi
import "log"
func (req CreatePasienOperasiRequest) DataValidation() error {
log.Println("TODO : Data Validation")
return nil
}

View File

@@ -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)
}

View File

@@ -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