create/update validation. validate diagnosa, tindakan, pasien

This commit is contained in:
renaldybrada
2026-02-10 13:24:53 +07:00
parent c8e982487f
commit 0cd73e8ad2
6 changed files with 143 additions and 14 deletions
+11 -2
View File
@@ -3,9 +3,12 @@ package antrianoperasi
import (
"log"
diagnosa "antrian-operasi/internal/domain/reference/diagnosa"
dokter "antrian-operasi/internal/domain/reference/dokter"
kategori "antrian-operasi/internal/domain/reference/kategori"
"antrian-operasi/internal/domain/reference/pasien"
spesialis "antrian-operasi/internal/domain/reference/spesialis"
tindakan "antrian-operasi/internal/domain/reference/tindakan"
"antrian-operasi/internal/shared"
"github.com/gin-gonic/gin"
@@ -16,15 +19,21 @@ type AntrianOperasiHandler struct {
repoKategori kategori.IKategoriRepository
repoSpesialis spesialis.ISpesialisRepository
repoDokter dokter.IDokterRepository
repoDiagnosa diagnosa.IDiagnosaRepository
repoTindakan tindakan.ITindakanRepository
repoPasien pasien.IPasienRepository
}
func NewAntrianOperasiHandler(
repo IAntrianOperasiRepository,
repoKategori kategori.IKategoriRepository,
repoSpesialis spesialis.ISpesialisRepository,
repoDokter dokter.IDokterRepository) AntrianOperasiHandler {
repoDokter dokter.IDokterRepository,
repoDiagnosa diagnosa.IDiagnosaRepository,
repoTindakan tindakan.ITindakanRepository,
repoPasien pasien.IPasienRepository) AntrianOperasiHandler {
return AntrianOperasiHandler{
repo, repoKategori, repoSpesialis, repoDokter,
repo, repoKategori, repoSpesialis, repoDokter, repoDiagnosa, repoTindakan, repoPasien,
}
}
@@ -10,8 +10,6 @@ func (req CreatePasienOperasiRequest) DataValidation(c *gin.Context, handler Ant
isValid := false
var errValidation []string
// validasi status operasi (1,2,3,4)
// validasi kategori
_, err := handler.repoKategori.GetKategoriById(c, req.RencanaOperasiData.KategoriOperasi)
if err != nil {
@@ -40,6 +38,33 @@ func (req CreatePasienOperasiRequest) DataValidation(c *gin.Context, handler Ant
}
}
// validasi kode diagnosa
for _, dd := range req.DiagnosisItem {
_, err := handler.repoDiagnosa.GetDiagnosaByKode(c, dd.KodeDiagnosa)
if err != nil {
log.Println(err)
errValidation = append(errValidation, err.Error())
continue
}
}
// validasi kode tindakan
for _, dt := range req.TindakanItems {
_, err := handler.repoTindakan.GetTindakanByKode(c, *dt.KodeTindakan)
if err != nil {
log.Println(err)
errValidation = append(errValidation, err.Error())
continue
}
}
// validasi no rekam medis
_, err = handler.repoPasien.GetPasienByNoMr(c, req.FormData.NoRekamMedis)
if err != nil {
log.Println(err)
errValidation = append(errValidation, err.Error())
}
if len(errValidation) == 0 {
isValid = true
}
+7 -1
View File
@@ -2,9 +2,12 @@ package antrianoperasi
import (
"antrian-operasi/internal/database"
"antrian-operasi/internal/domain/reference/diagnosa"
"antrian-operasi/internal/domain/reference/dokter"
"antrian-operasi/internal/domain/reference/kategori"
"antrian-operasi/internal/domain/reference/pasien"
"antrian-operasi/internal/domain/reference/spesialis"
"antrian-operasi/internal/domain/reference/tindakan"
"github.com/gin-gonic/gin"
)
@@ -14,9 +17,12 @@ func RegisterRoutes(r *gin.RouterGroup, dbService database.Service) {
kategoriRepo := kategori.NewRepository(dbService)
spesialisRepo := spesialis.NewRepository(dbService)
dokterRepo := dokter.NewRepository(dbService)
diagnosaRepo := diagnosa.NewRepository(dbService)
tindakanRepo := tindakan.NewRepository(dbService)
pasienRepo := pasien.NewRepository(dbService)
antrianOperasiHandler := NewAntrianOperasiHandler(
antrianOperasiRepo, kategoriRepo, spesialisRepo, dokterRepo)
antrianOperasiRepo, kategoriRepo, spesialisRepo, dokterRepo, diagnosaRepo, tindakanRepo, pasienRepo)
r.POST("/antrian-operasi", antrianOperasiHandler.CreateAntrianOperasi)
r.GET("/antrian-operasi", antrianOperasiHandler.GetListAntrianOperasi)
@@ -2,9 +2,12 @@ package diagnosa
import (
"antrian-operasi/internal/database"
"log"
queryUtils "antrian-operasi/internal/utils/query"
"errors"
"github.com/gin-gonic/gin"
)
@@ -13,6 +16,7 @@ const TBL_NAME = "icd"
type IDiagnosaRepository interface {
SearchableListDiagnosa(c *gin.Context) (ListDiagnosaModel, error)
GetDiagnosaByKode(c *gin.Context, kode string) (DiagnosaModel, error)
}
type diagnosaRepo struct {
@@ -69,3 +73,48 @@ func (r diagnosaRepo) SearchableListDiagnosa(c *gin.Context) (ListDiagnosaModel,
return result, nil
}
func (r diagnosaRepo) GetDiagnosaByKode(c *gin.Context, kode string) (DiagnosaModel, error) {
var resultQuery []DiagnosaModel
var result DiagnosaModel
query := queryUtils.DynamicQuery{
From: TBL_NAME,
Fields: []queryUtils.SelectField{
{Expression: "icd_code"},
{Expression: "jenis_penyakit"},
{Expression: "sebabpenyakit"},
},
Filters: []queryUtils.FilterGroup{
{
Filters: []queryUtils.DynamicFilter{
{Column: "icd_code", Operator: queryUtils.OpILike, Value: kode},
}, LogicOp: "AND",
},
},
Limit: 1,
}
dbconn, err := r.db.GetSQLXDB(DB_NAME)
if err != nil {
return result, err
}
err = r.queryBuilder.ExecuteQuery(
c, dbconn, query, &resultQuery)
if err != nil {
return result, err
}
if len(resultQuery) == 0 {
log.Println(query)
notFoundError := errors.New("diagnosa not found : " + kode)
return result, notFoundError
}
for _, x := range resultQuery {
log.Println(x.KodeDiagnosa)
}
return resultQuery[0], nil
}
@@ -14,7 +14,7 @@ const TBL_NAME = "m_pasien"
type IPasienRepository interface {
SearchableListPasien(c *gin.Context) (ListPasienModel, error)
GetPasienByNoMr(c *gin.Context, id int) (PasienModel, error)
GetPasienByNoMr(c *gin.Context, noMr string) (PasienModel, error)
}
type pasienRepo struct {
@@ -93,31 +93,29 @@ func (r pasienRepo) SearchableListPasien(c *gin.Context) (ListPasienModel, error
return result, nil
}
func (r pasienRepo) GetPasienByNoMr(c *gin.Context, id int) (PasienModel, error) {
func (r pasienRepo) GetPasienByNoMr(c *gin.Context, noMr string) (PasienModel, error) {
var resultQuery ListPasienModel
var result PasienModel
query := baseSelectQuery()
query.Filters = append(query.Filters, queryUtils.FilterGroup{Filters: []queryUtils.DynamicFilter{
{Column: "id", Operator: queryUtils.OpEqual, Value: id},
{Column: "nomr", Operator: queryUtils.OpEqual, Value: noMr},
}})
dbconn, err := r.db.GetSQLXDB(DB_NAME)
if err != nil {
// log.Fatalf("unable to connect db %s", err)
return result, err
}
err = r.queryBuilder.ExecuteQuery(
c, dbconn, query, &resultQuery)
if err != nil {
// log.Fatalf("unable to execute query %s", err)
return result, err
}
if len(resultQuery) == 0 {
notFoundError := errors.New("kategori not found")
notFoundError := errors.New("pasien not found, no rekam medis : " + noMr)
return result, notFoundError
}
@@ -5,6 +5,8 @@ import (
queryUtils "antrian-operasi/internal/utils/query"
"errors"
"github.com/gin-gonic/gin"
)
@@ -13,9 +15,10 @@ const TBL_NAME = "icd_cm"
type ITindakanRepository interface {
SearchableListTindakan(c *gin.Context) (ListTindakanModel, error)
GetTindakanByKode(c *gin.Context, kode string) (TindakanModel, error)
}
type diagnosaRepo struct {
type tindakanRepo struct {
queryBuilder *queryUtils.QueryBuilder
db database.Service
}
@@ -27,13 +30,13 @@ func NewRepository(dbService database.Service) ITindakanRepository {
}).
SetSecurityOptions(false, 100)
return diagnosaRepo{
return tindakanRepo{
queryBuilder: queryBuilder,
db: dbService,
}
}
func (r diagnosaRepo) SearchableListTindakan(c *gin.Context) (ListTindakanModel, error) {
func (r tindakanRepo) SearchableListTindakan(c *gin.Context) (ListTindakanModel, error) {
var result ListTindakanModel
search := c.Query("search")
@@ -67,3 +70,42 @@ func (r diagnosaRepo) SearchableListTindakan(c *gin.Context) (ListTindakanModel,
return result, nil
}
func (r tindakanRepo) GetTindakanByKode(c *gin.Context, kode string) (TindakanModel, error) {
var resultQuery []TindakanModel
var result TindakanModel
query := queryUtils.DynamicQuery{
From: TBL_NAME,
Fields: []queryUtils.SelectField{
{Expression: "kode"},
{Expression: "keterangan"},
},
Filters: []queryUtils.FilterGroup{
{
Filters: []queryUtils.DynamicFilter{
{Column: "kode", Operator: queryUtils.OpILike, Value: kode},
}, LogicOp: "AND",
},
},
Limit: 1,
}
dbconn, err := r.db.GetSQLXDB(DB_NAME)
if err != nil {
return result, err
}
err = r.queryBuilder.ExecuteQuery(
c, dbconn, query, &resultQuery)
if err != nil {
return result, err
}
if len(resultQuery) == 0 {
notFoundError := errors.New("tindakan not found : " + kode)
return result, notFoundError
}
return resultQuery[0], nil
}