waiting for migration

This commit is contained in:
dpurbosakti
2025-09-17 16:35:07 +07:00
parent 8406c4f202
commit 5a5856ccb9
9 changed files with 123 additions and 52 deletions
@@ -72,9 +72,14 @@ func (obj myBase) Delete(w http.ResponseWriter, r *http.Request) {
func (obj myBase) CheckOut(w http.ResponseWriter, r *http.Request) {
dto := e.DischargeDto{}
id := rw.ValidateInt(w, "id", r.PathValue("id"))
if id <= 0 {
return
}
if res := rw.ValidateStructByIOR(w, r.Body, &dto); !res {
return
}
dto.Id = uint(id)
res, err := u.CheckOut(dto)
rw.DataResponse(w, res, err)
}
@@ -84,9 +84,6 @@ func (obj myBase) Complete(w http.ResponseWriter, r *http.Request) {
}
dto := e.ReadDetailDto{}
if res := rw.ValidateStructByIOR(w, r.Body, &dto); !res {
return
}
dto.AuthInfo = *authInfo
dto.Id = uint(id)
res, err := u.Complete(dto)
@@ -379,6 +379,10 @@ func CheckOut(input e.DischargeDto) (*d.Data, error) {
return err
}
if err := createMedication(data.Id, &event, tx); err != nil {
return err
}
pl.SetLogInfo(&event, nil, "complete")
return nil
@@ -9,16 +9,22 @@ import (
e "simrs-vx/internal/domain/main-entities/encounter"
es "simrs-vx/internal/domain/main-entities/soapi"
// ep "simrs-vx/internal/domain/main-entities/prescription"
// epi "simrs-vx/internal/domain/main-entities/prescription-item"
// em "simrs-vx/internal/domain/main-entities/medication"
em "simrs-vx/internal/domain/main-entities/medication"
emei "simrs-vx/internal/domain/main-entities/medication-item"
emi "simrs-vx/internal/domain/main-entities/medicine-mix"
emmi "simrs-vx/internal/domain/main-entities/medicine-mix-item"
ep "simrs-vx/internal/domain/main-entities/prescription"
epi "simrs-vx/internal/domain/main-entities/prescription-item"
// up "simrs-vx/internal/use-case/main-use-case/prescription"
// upi "simrs-vx/internal/use-case/main-use-case/prescription-item"
// um "simrs-vx/internal/use-case/main-use-case/medication"
um "simrs-vx/internal/use-case/main-use-case/medication"
umei "simrs-vx/internal/use-case/main-use-case/medication-item"
umi "simrs-vx/internal/use-case/main-use-case/medicine-mix"
ummi "simrs-vx/internal/use-case/main-use-case/medicine-mix-item"
up "simrs-vx/internal/use-case/main-use-case/prescription"
upi "simrs-vx/internal/use-case/main-use-case/prescription-item"
pl "simrs-vx/pkg/logger"
// pu "simrs-vx/pkg/use-case-helper"
pu "simrs-vx/pkg/use-case-helper"
erc "simrs-vx/internal/domain/references/common"
ero "simrs-vx/internal/domain/references/organization"
@@ -109,43 +115,93 @@ func checkSoapiByDocExists(encounter_id uint, event *pl.Event, tx *gorm.DB) erro
return pl.SetLogError(event, nil)
}
// func createMedication(encounter_id uint, event *pl.Event, tx *gorm.DB) error {
// pl.SetLogInfo(event, nil, "started", "createMedication")
func createMedication(encounter_id uint, event *pl.Event, tx *gorm.DB) error {
pl.SetLogInfo(event, nil, "started", "createMedication")
// prescription, err := up.ReadDetailData(ep.ReadDetailDto{Id: encounter_id}, event, tx)
// if err != nil {
// return err
// }
prescription, err := up.ReadDetailData(ep.ReadDetailDto{Encounter_Id: &encounter_id}, event, tx)
if err != nil {
return err
}
// prescriptionItem, _, err := upi.ReadListData(epi.ReadListDto{FilterDto: epi.FilterDto{Prescription_Id: &prescription.Id}}, event, tx)
// if err != nil {
// return err
// }
prescriptionItem, _, err := upi.ReadListData(epi.ReadListDto{FilterDto: epi.FilterDto{Prescription_Id: &prescription.Id}}, event, tx)
if err != nil {
return err
}
// if len(prescriptionItem) == 0 {
// return nil
// }
if len(prescriptionItem) == 0 {
return nil
}
// medicationCreate := em.CreateDto{
// Encounter_Id: &encounter_id,
// IssuedAt: pu.GetTimeNow(),
// }
// medication, err := um.CreateData(medicationCreate, event, tx)
// if err != nil {
// return err
// }
medicationCreate := em.CreateDto{
Encounter_Id: &encounter_id,
IssuedAt: pu.GetTimeNow(),
}
medication, err := um.CreateData(medicationCreate, event, tx)
if err != nil {
return err
}
// for _, prescriptionItem := range prescriptionItem {
// if prescriptionItem.IsMix {
// continue
// }
// // medication, err := um.ReadDetailData(e.ReadDetailDto{Id: prescriptionItem.Medication_Id}, event, tx)
// // if err != nil {
// // return err
// // }
// // if medication.IsCompleted() {
// // continue
// // }
// // createMedicationItemDist(medication.Id, event, tx)
// }
// }
for _, prescriptionItem := range prescriptionItem {
if prescriptionItem.IsMix {
medMix_id, err := createMedicineMixAndItem(*prescriptionItem.MedicineMix, event, tx)
if err != nil {
return err
}
prescriptionItem.MedicineMix_Id = medMix_id
}
err := createMedicationItem(medication.Id, prescriptionItem, event, tx)
if err != nil {
return err
}
}
return nil
}
func createMedicineMixAndItem(input emi.MedicineMix, event *pl.Event, tx *gorm.DB) (*uint, error) {
pl.SetLogInfo(event, nil, "started", "createMedicineMix")
medicineMixCreate := emi.CreateDto{
Name: input.Name,
}
medicineMix, err := umi.CreateData(medicineMixCreate, event, tx)
if err != nil {
return nil, err
}
// recreate medicineMixItem with new medicineMix_id to keep medMixItem remain the same for prescriptionItem that is created
for _, medicineMixItem := range input.MixItems {
medicineMixItemCreate := emmi.CreateDto{
MedicineMix_Id: &medicineMix.Id,
Medicine_Id: medicineMixItem.Medicine_Id,
Dose: medicineMixItem.Dose,
}
_, err := ummi.CreateData(medicineMixItemCreate, event, tx)
if err != nil {
return nil, err
}
}
return &medicineMix.Id, nil
}
func createMedicationItem(medication_id uint, input epi.PrescriptionItem, event *pl.Event, tx *gorm.DB) error {
pl.SetLogInfo(event, nil, "started", "createMedicationItem")
medicationItemCreate := emei.CreateDto{
Medication_Id: &medication_id,
IsMix: input.IsMix,
Medicine_Id: input.Medicine_Id,
MedicineMix_Id: input.MedicineMix_Id,
Usage: input.Usage,
Interval: input.Interval,
IntervalUnit_Code: input.IntervalUnit_Code,
Quantity: input.Quantity,
}
_, err := umei.CreateData(medicationItemCreate, event, tx)
if err != nil {
return err
}
return nil
}
@@ -43,7 +43,7 @@ func createMedicationItemDist(medication_id *uint, event *pl.Event, dbx ...*gorm
tx = dg.I
}
filterMI := emi.ReadListDto{FilterDto: emi.FilterDto{Medication_Id: medication_id, IsRedeemed: true}}
filterMI := emi.ReadListDto{FilterDto: emi.FilterDto{Medication_Id: medication_id, IsRedeemed: true}, Preloads: []string{"MedicineMix"}}
medicationItemList, _, err := umi.ReadListData(filterMI, event, tx)
if err != nil {
return err
@@ -58,6 +58,7 @@ func createMedicationItemDist(medication_id *uint, event *pl.Event, dbx ...*gorm
if _, err := umid.CreateData(midCreate, event, tx); err != nil {
return err
}
}
pl.SetLogInfo(event, nil, "complete")
@@ -51,6 +51,8 @@ func ReadListData(input e.ReadListDto, event *pl.Event, dbx ...*gorm.DB) ([]e.Me
tx = dg.I
}
tx = tx.Preload("MixItems")
tx = tx.
Model(&e.MedicineMix{}).
Scopes(gh.Filter(input)).
@@ -90,6 +92,8 @@ func ReadDetailData(input e.ReadDetailDto, event *pl.Event, dbx ...*gorm.DB) (*e
tx = dg.I
}
tx = tx.Preload("MixItems")
if err := tx.First(&data, input.Id).Error; err != nil {
if processedErr := pu.HandleReadError(err, event, source, input.Id, data); processedErr != nil {
return nil, processedErr
+3 -3
View File
@@ -172,9 +172,9 @@ func GetIdByUserId(user_id *uint, event *pl.Event, dbx ...*gorm.DB) (*uint, erro
var nurse_id uint
err := tx.Model(&e.Nurse{}).
Select("Nurse.Id as nurse_id").
Joins("JOIN Employee e ON e.Id = Nurse.Employee_Id").
Where("e.User_Id = ?", user_id).
Select("\"Nurse\".\"Id\" as nurse_id").
Joins("JOIN \"Employee\" AS e ON e.\"Id\" = \"Nurse\".\"Employee_Id\"").
Where("e.\"User_Id\" = ?", user_id).
Scan(&nurse_id).Error
if err != nil {
@@ -172,9 +172,9 @@ func GetIdByUserId(user_id *uint, event *pl.Event, dbx ...*gorm.DB) (*uint, erro
var pharmacist_id uint
err := tx.Model(&e.Pharmacist{}).
Select("Pharmacist.Id as pharmacist_id").
Joins("JOIN Employee e ON e.Id = Pharmacist.Employee_Id").
Where("e.User_Id = ?", user_id).
Select("\"Pharmacist\".\"Id\" as pharmacist_id").
Joins("JOIN \"Employee\" as e ON e.\"Id\" = \"Pharmacist\".\"Employee_Id\"").
Where("e.\"User_Id\" = ?", user_id).
Scan(&pharmacist_id).Error
if err != nil {
@@ -51,6 +51,8 @@ func ReadListData(input e.ReadListDto, event *pl.Event, dbx ...*gorm.DB) ([]e.Pr
tx = dg.I
}
tx = tx.Preload("MedicineMix").Preload("MedicineMix.MixItems")
if len(input.Preloads) > 0 {
for _, preload := range input.Preloads {
tx = tx.Preload(preload)
@@ -96,6 +98,8 @@ func ReadDetailData(input e.ReadDetailDto, event *pl.Event, dbx ...*gorm.DB) (*e
tx = dg.I
}
tx = tx.Preload("MedicineMix").Preload("MedicineMix.MixItems")
if err := tx.First(&data, input.Id).Error; err != nil {
if processedErr := pu.HandleReadError(err, event, source, input.Id, data); processedErr != nil {
return nil, processedErr