remove several ids and fix constraint
This commit is contained in:
@@ -7,8 +7,6 @@ import (
|
||||
e "simrs-vx/internal/domain/main-entities/consultation"
|
||||
ue "simrs-vx/internal/use-case/main-use-case/encounter"
|
||||
|
||||
ud "simrs-vx/internal/use-case/main-use-case/doctor"
|
||||
|
||||
dg "github.com/karincake/apem/db-gorm-pg"
|
||||
d "github.com/karincake/dodol"
|
||||
|
||||
@@ -314,12 +312,7 @@ func Reply(input e.ReplyDto) (*d.Data, error) {
|
||||
return pl.SetLogError(&event, input)
|
||||
}
|
||||
|
||||
doctor_id, err := ud.GetIdByUserId(&input.AuthInfo.User_Id, &event, tx)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if data.DstDoctor_Id != nil && data.DstDoctor_Id != doctor_id {
|
||||
if data.DstDoctor_Code != nil && data.DstDoctor_Code != input.AuthInfo.Doctor_Code {
|
||||
event.Status = "failed"
|
||||
event.ErrInfo = pl.ErrorInfo{
|
||||
Code: "data-handled-mismatch",
|
||||
@@ -329,7 +322,7 @@ func Reply(input e.ReplyDto) (*d.Data, error) {
|
||||
return pl.SetLogError(&event, input)
|
||||
}
|
||||
|
||||
data.DstDoctor_Id = doctor_id
|
||||
data.DstDoctor_Code = input.AuthInfo.Doctor_Code
|
||||
data.Solution = input.Solution
|
||||
data.RepliedAt = pu.GetTimeNow()
|
||||
err = tx.Save(&data).Error
|
||||
|
||||
@@ -20,5 +20,5 @@ func setData[T *e.CreateDto | *e.UpdateDto](input T, data *e.Consultation) {
|
||||
data.Encounter_Id = inputSrc.Encounter_Id
|
||||
data.Date = inputSrc.Date
|
||||
data.Problem = inputSrc.Problem
|
||||
data.DstUnit_Id = inputSrc.DstUnit_Id
|
||||
data.DstUnit_Code = inputSrc.DstUnit_Code
|
||||
}
|
||||
|
||||
@@ -18,9 +18,9 @@ func setData[T *e.CreateDto | *e.UpdateDto](input T, data *e.ControlLetter) {
|
||||
}
|
||||
|
||||
data.Encounter_Id = inputSrc.Encounter_Id
|
||||
data.Unit_Id = inputSrc.Unit_Id
|
||||
data.Specialist_Id = inputSrc.Specialist_Id
|
||||
data.Subspecialist_Id = inputSrc.Subspecialist_Id
|
||||
data.Doctor_Id = inputSrc.Doctor_Id
|
||||
data.Unit_Code = inputSrc.Unit_Code
|
||||
data.Specialist_Code = inputSrc.Specialist_Code
|
||||
data.Subspecialist_Code = inputSrc.Subspecialist_Code
|
||||
data.Doctor_Code = inputSrc.Doctor_Code
|
||||
data.Date = inputSrc.Date
|
||||
}
|
||||
|
||||
@@ -166,7 +166,7 @@ func ReadDetail(input e.ReadDetailDto) (*d.Data, error) {
|
||||
}
|
||||
|
||||
func Update(input e.UpdateDto) (*d.Data, error) {
|
||||
rdDto := e.ReadDetailDto{Id: uint16(input.Id)}
|
||||
rdDto := e.ReadDetailDto{Code: input.Code}
|
||||
var data *e.Doctor
|
||||
var err error
|
||||
|
||||
@@ -222,7 +222,7 @@ func Update(input e.UpdateDto) (*d.Data, error) {
|
||||
}
|
||||
|
||||
func Delete(input e.DeleteDto) (*d.Data, error) {
|
||||
rdDto := e.ReadDetailDto{Id: uint16(input.Id)}
|
||||
rdDto := e.ReadDetailDto{Code: input.Code}
|
||||
var data *e.Doctor
|
||||
var err error
|
||||
|
||||
|
||||
@@ -84,7 +84,7 @@ func ReadDetailData(input e.ReadDetailDto, event *pl.Event, dbx ...*gorm.DB) (*e
|
||||
if input.Employee_Id != nil {
|
||||
tx = tx.Where("\"Employee_Id\" = ?", *input.Employee_Id)
|
||||
}
|
||||
if input.Id > 0 {
|
||||
if input.Id != nil {
|
||||
tx = tx.Where("\"Id\" = ?", input.Id)
|
||||
}
|
||||
if err := tx.First(&data).Error; err != nil {
|
||||
|
||||
@@ -574,11 +574,11 @@ func CheckIn(input e.CheckinDto) (*d.Data, error) {
|
||||
}
|
||||
|
||||
// Upsert responsible_doctor_hist if responsible_doctor_id has changed
|
||||
if data.Responsible_Doctor_Id == nil || *input.Responsible_Doctor_Id != *data.Responsible_Doctor_Id {
|
||||
if data.Responsible_Doctor_Code == nil || *input.Responsible_Doctor_Code != *data.Responsible_Doctor_Code {
|
||||
// upsert responsibleDoctorHist
|
||||
if err = upsertResponsibleDoctorHist(erdh.CreateDto{
|
||||
Encounter_Id: &data.Id,
|
||||
Doctor_Id: input.Responsible_Doctor_Id,
|
||||
Doctor_Code: input.Responsible_Doctor_Code,
|
||||
StartedAt: input.StartedAt,
|
||||
}, &event, tx); err != nil {
|
||||
return err
|
||||
@@ -634,24 +634,24 @@ func RequestSwitchUnit(input e.SwitchUnitDto) (*d.Data, error) {
|
||||
// Start log
|
||||
pl.SetLogInfo(&event, input, "started", "checkOut")
|
||||
|
||||
unitIDs := make(map[uint16]struct{})
|
||||
doctorIDs := make(map[uint]struct{})
|
||||
unitCodes := make(map[string]struct{})
|
||||
doctorCodes := make(map[string]struct{})
|
||||
for _, ref := range *input.InternalReferences {
|
||||
if ref.Unit_Id != nil {
|
||||
unitIDs[*ref.Unit_Id] = struct{}{}
|
||||
if ref.Unit_Code != nil {
|
||||
unitCodes[*ref.Unit_Code] = struct{}{}
|
||||
}
|
||||
if ref.Doctor_Id != nil {
|
||||
doctorIDs[*ref.Doctor_Id] = struct{}{}
|
||||
if ref.Doctor_Code != nil {
|
||||
doctorCodes[*ref.Doctor_Code] = struct{}{}
|
||||
}
|
||||
}
|
||||
|
||||
// validate unit
|
||||
if err = validateUnitIds(unitIDs, &event); err != nil {
|
||||
if err = validateUnitCodes(unitCodes, &event); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// validate doctor
|
||||
if err = validateDoctorIds(doctorIDs, &event); err != nil {
|
||||
if err = validateDoctorCodes(doctorCodes, &event); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -773,8 +773,8 @@ func ApproveSwitchUnit(input e.ApproveUnitDto) (*d.Data, error) {
|
||||
Id: input.InternalReferences_Id,
|
||||
CreateDto: eir.CreateDto{
|
||||
Encounter_Id: &input.Id,
|
||||
Doctor_Id: irData.Doctor_Id,
|
||||
Unit_Id: irData.Unit_Id,
|
||||
Doctor_Code: irData.Doctor_Code,
|
||||
Unit_Code: irData.Unit_Code,
|
||||
Status_Code: erc.DACApproved,
|
||||
}}, irData, &event, tx); err != nil {
|
||||
return err
|
||||
@@ -793,15 +793,15 @@ func ApproveSwitchUnit(input e.ApproveUnitDto) (*d.Data, error) {
|
||||
// create responsible doctor based on internal reference data
|
||||
if _, err = urdh.CreateData(erdh.CreateDto{
|
||||
Encounter_Id: &input.Id,
|
||||
Doctor_Id: irData.Doctor_Id,
|
||||
Doctor_Code: irData.Doctor_Code,
|
||||
StartedAt: &now,
|
||||
}, &event, tx); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// update data response
|
||||
data.Responsible_Doctor_Id = irData.Doctor_Id
|
||||
data.Unit = irData.Unit
|
||||
data.Responsible_Doctor_Code = irData.Doctor_Code
|
||||
data.Unit = irData.Unit // TODO: check if this is correct
|
||||
data.Specialist_Code = irData.Doctor.Specialist_Code
|
||||
data.Subspecialist_Code = irData.Doctor.Subspecialist_Code
|
||||
|
||||
|
||||
@@ -77,17 +77,17 @@ func setData[T *e.CreateDto | *e.UpdateDto](input T, data *e.Encounter) {
|
||||
data.RegisteredAt = inputSrc.RegisteredAt
|
||||
data.Class_Code = inputSrc.Class_Code
|
||||
data.Unit_Id = inputSrc.Unit_Id
|
||||
data.Specialist_Id = inputSrc.Specialist_Id
|
||||
data.Subspecialist_Id = inputSrc.Subspecialist_Id
|
||||
data.Specialist_Code = inputSrc.Specialist_Code
|
||||
data.Subspecialist_Code = inputSrc.Subspecialist_Code
|
||||
data.VisitDate = inputSrc.VisitDate
|
||||
data.PaymentMethod_Code = inputSrc.PaymentMethod_Code
|
||||
data.InsuranceCompany_Id = inputSrc.InsuranceCompany_Id
|
||||
data.Member_Number = inputSrc.Member_Number
|
||||
data.Ref_Number = inputSrc.Ref_Number
|
||||
data.Trx_Number = inputSrc.Trx_Number
|
||||
data.Appointment_Doctor_Id = inputSrc.Appointment_Doctor_Id
|
||||
data.Appointment_Doctor_Code = inputSrc.Appointment_Doctor_Code
|
||||
data.Adm_Employee_Id = inputSrc.Adm_Employee_Id
|
||||
data.Responsible_Doctor_Id = inputSrc.Responsible_Doctor_Id
|
||||
data.Responsible_Doctor_Code = inputSrc.Responsible_Doctor_Code
|
||||
data.RefSource_Name = inputSrc.RefSource_Name
|
||||
data.Appointment_Id = inputSrc.Appointment_Id
|
||||
data.Status_Code = erc.DSCProcess
|
||||
@@ -96,11 +96,11 @@ func setData[T *e.CreateDto | *e.UpdateDto](input T, data *e.Encounter) {
|
||||
}
|
||||
|
||||
func setDataUpdate(src e.UpdateDto, dst *e.Encounter) {
|
||||
dst.Appointment_Doctor_Id = src.Appointment_Doctor_Id
|
||||
dst.Responsible_Doctor_Id = src.Responsible_Doctor_Id
|
||||
dst.Appointment_Doctor_Code = src.Appointment_Doctor_Code
|
||||
dst.Responsible_Doctor_Code = src.Responsible_Doctor_Code
|
||||
dst.Unit_Id = src.Unit_Id
|
||||
dst.Specialist_Id = src.Specialist_Id
|
||||
dst.Subspecialist_Id = src.Subspecialist_Id
|
||||
dst.Specialist_Code = src.Specialist_Code
|
||||
dst.Subspecialist_Code = src.Subspecialist_Code
|
||||
dst.VisitDate = src.VisitDate
|
||||
}
|
||||
|
||||
@@ -126,7 +126,7 @@ func setDataCheckIn(src e.CheckinDto, dst *e.Encounter) {
|
||||
dst.Adm_Employee_Id = src.Adm_Employee_Id
|
||||
}
|
||||
|
||||
dst.Responsible_Doctor_Id = src.Responsible_Doctor_Id
|
||||
dst.Responsible_Doctor_Code = src.Responsible_Doctor_Code
|
||||
dst.StartedAt = src.StartedAt
|
||||
}
|
||||
|
||||
@@ -395,9 +395,9 @@ func upsertResponsibleDoctorHist(input erdh.CreateDto, event *pl.Event, dbx ...*
|
||||
default:
|
||||
// Update
|
||||
if err := tx.Model(&latest).Updates(map[string]interface{}{
|
||||
"Doctor_Id": input.Doctor_Id,
|
||||
"StartedAt": input.StartedAt,
|
||||
"UpdatedAt": time.Now(),
|
||||
"Doctor_Code": input.Doctor_Code,
|
||||
"StartedAt": input.StartedAt,
|
||||
"UpdatedAt": time.Now(),
|
||||
}).Error; err != nil {
|
||||
event.Status = "failed"
|
||||
event.ErrInfo = pl.ErrorInfo{
|
||||
@@ -904,8 +904,8 @@ func validateForeignKey(input e.CheckinDto) error {
|
||||
}
|
||||
|
||||
// validate doctor_id
|
||||
if input.Responsible_Doctor_Id != nil {
|
||||
if _, err := ud.ReadDetail(ed.ReadDetailDto{Id: uint16(*input.Responsible_Doctor_Id)}); err != nil {
|
||||
if input.Responsible_Doctor_Code != nil {
|
||||
if _, err := ud.ReadDetail(ed.ReadDetailDto{Code: input.Responsible_Doctor_Code}); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
@@ -932,10 +932,10 @@ func setDBError(event *pl.Event, err error, ctx any) error {
|
||||
return pl.SetLogError(event, ctx)
|
||||
}
|
||||
|
||||
func getUnits(unitIds []uint16, event *pl.Event) ([]eu.Unit, error) {
|
||||
func getUnits(unitIds []string, event *pl.Event) ([]eu.Unit, error) {
|
||||
pl.SetLogInfo(event, nil, "started", "getUnits")
|
||||
var units []eu.Unit
|
||||
err := dg.I.Where("\"Id\" IN ?", unitIds).Find(&units).Error
|
||||
err := dg.I.Where("\"Code\" IN ?", unitIds).Find(&units).Error
|
||||
if err != nil {
|
||||
event.Status = "failed"
|
||||
event.ErrInfo = pl.ErrorInfo{
|
||||
@@ -948,10 +948,10 @@ func getUnits(unitIds []uint16, event *pl.Event) ([]eu.Unit, error) {
|
||||
return units, nil
|
||||
}
|
||||
|
||||
func getDoctors(doctorIds []uint, event *pl.Event) ([]ed.Doctor, error) {
|
||||
func getDoctors(doctorIds []string, event *pl.Event) ([]ed.Doctor, error) {
|
||||
pl.SetLogInfo(event, nil, "started", "getDoctors")
|
||||
var doctors []ed.Doctor
|
||||
err := dg.I.Where("\"Id\" IN ?", doctorIds).Find(&doctors).Error
|
||||
err := dg.I.Where("\"Id\" Code ?", doctorIds).Find(&doctors).Error
|
||||
if err != nil {
|
||||
event.Status = "failed"
|
||||
event.ErrInfo = pl.ErrorInfo{
|
||||
@@ -964,18 +964,18 @@ func getDoctors(doctorIds []uint, event *pl.Event) ([]ed.Doctor, error) {
|
||||
return doctors, nil
|
||||
}
|
||||
|
||||
func validateUnitIds(unitIDs map[uint16]struct{}, event *pl.Event) error {
|
||||
if len(unitIDs) > 0 {
|
||||
var ids []uint16
|
||||
for id := range unitIDs {
|
||||
ids = append(ids, id)
|
||||
func validateUnitCodes(unitCodes map[string]struct{}, event *pl.Event) error {
|
||||
if len(unitCodes) > 0 {
|
||||
var codes []string
|
||||
for code := range unitCodes {
|
||||
codes = append(codes, code)
|
||||
}
|
||||
|
||||
units, err := getUnits(ids, event)
|
||||
units, err := getUnits(codes, event)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to fetch units: %w", err)
|
||||
}
|
||||
if len(units) != len(ids) {
|
||||
if len(units) != len(codes) {
|
||||
event.Status = "failed"
|
||||
event.ErrInfo = pl.ErrorInfo{
|
||||
Code: "data-validation-fail",
|
||||
@@ -988,18 +988,18 @@ func validateUnitIds(unitIDs map[uint16]struct{}, event *pl.Event) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func validateDoctorIds(doctorIDs map[uint]struct{}, event *pl.Event) error {
|
||||
if len(doctorIDs) > 0 {
|
||||
var ids []uint
|
||||
for id := range doctorIDs {
|
||||
ids = append(ids, id)
|
||||
func validateDoctorCodes(doctorCodes map[string]struct{}, event *pl.Event) error {
|
||||
if len(doctorCodes) > 0 {
|
||||
var codes []string
|
||||
for code := range doctorCodes {
|
||||
codes = append(codes, code)
|
||||
}
|
||||
|
||||
doctors, err := getDoctors(ids, event)
|
||||
doctors, err := getDoctors(codes, event)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to fetch doctors: %w", err)
|
||||
}
|
||||
if len(doctors) != len(ids) {
|
||||
if len(doctors) != len(codes) {
|
||||
event.Status = "failed"
|
||||
event.ErrInfo = pl.ErrorInfo{
|
||||
Code: "data-validation-fail",
|
||||
|
||||
@@ -332,10 +332,10 @@ func updateEncounterApproveSwitchUnit(input eir.InternalReference, event *pl.Eve
|
||||
if err := tx.Model(&e.Encounter{}).
|
||||
Where("\"Id\" = ?", input.Encounter_Id).
|
||||
Updates(map[string]interface{}{
|
||||
"Responsible_Doctor_Id": input.Doctor_Id,
|
||||
"Unit_Id": input.Unit_Id,
|
||||
"Specialist_Code": input.Doctor.Specialist_Code,
|
||||
"Subspecialist_Code": input.Doctor.Subspecialist_Code,
|
||||
"Responsible_Doctor_Code": input.Doctor_Code,
|
||||
"Unit_Code": input.Unit_Code,
|
||||
"Specialist_Code": input.Doctor.Specialist_Code,
|
||||
"Subspecialist_Code": input.Doctor.Subspecialist_Code,
|
||||
}).Error; err != nil {
|
||||
event.Status = "failed"
|
||||
event.ErrInfo = pl.ErrorInfo{
|
||||
|
||||
@@ -19,8 +19,8 @@ func setData[T *ir.CreateDto | *ir.UpdateDto](input T, data *ir.InternalReferenc
|
||||
}
|
||||
|
||||
data.Encounter_Id = inputSrc.Encounter_Id
|
||||
data.Unit_Id = inputSrc.Unit_Id
|
||||
data.Doctor_Id = inputSrc.Doctor_Id
|
||||
data.Unit_Code = inputSrc.Unit_Code
|
||||
data.Doctor_Code = inputSrc.Doctor_Code
|
||||
data.Status_Code = &inputSrc.Status_Code
|
||||
}
|
||||
|
||||
@@ -31,8 +31,8 @@ func setBulkData(input []ir.CreateDto, encounterId uint) []ir.InternalReference
|
||||
statusCode := erc.DACNew
|
||||
data = append(data, ir.InternalReference{
|
||||
Encounter_Id: &encounterId,
|
||||
Unit_Id: v.Unit_Id,
|
||||
Doctor_Id: v.Doctor_Id,
|
||||
Unit_Code: v.Unit_Code,
|
||||
Doctor_Code: v.Doctor_Code,
|
||||
Status_Code: &statusCode,
|
||||
})
|
||||
}
|
||||
|
||||
@@ -166,7 +166,7 @@ func ReadDetail(input e.ReadDetailDto) (*d.Data, error) {
|
||||
}
|
||||
|
||||
func Update(input e.UpdateDto) (*d.Data, error) {
|
||||
rdDto := e.ReadDetailDto{Id: uint16(input.Id)}
|
||||
rdDto := e.ReadDetailDto{Code: input.Code}
|
||||
var data *e.Nurse
|
||||
var err error
|
||||
|
||||
@@ -222,7 +222,7 @@ func Update(input e.UpdateDto) (*d.Data, error) {
|
||||
}
|
||||
|
||||
func Delete(input e.DeleteDto) (*d.Data, error) {
|
||||
rdDto := e.ReadDetailDto{Id: uint16(input.Id)}
|
||||
rdDto := e.ReadDetailDto{Code: input.Code}
|
||||
var data *e.Nurse
|
||||
var err error
|
||||
|
||||
|
||||
@@ -84,7 +84,7 @@ func ReadDetailData(input e.ReadDetailDto, event *pl.Event, dbx ...*gorm.DB) (*e
|
||||
if input.Employee_Id != nil {
|
||||
tx = tx.Where("\"Employee_Id\" = ?", *input.Employee_Id)
|
||||
}
|
||||
if input.Id > 0 {
|
||||
if input.Id != nil {
|
||||
tx = tx.Where("\"Id\" = ?", input.Id)
|
||||
}
|
||||
if err := tx.First(&data).Error; err != nil {
|
||||
|
||||
@@ -17,7 +17,7 @@ func setData[T *e.CreateDto | *e.UpdateDto](input T, data *e.PracticeSchedule) {
|
||||
inputSrc = &inputTemp.CreateDto
|
||||
}
|
||||
|
||||
data.Doctor_Id = inputSrc.Doctor_Id
|
||||
data.Doctor_Code = inputSrc.Doctor_Code
|
||||
data.Unit_Code = inputSrc.Unit_Code
|
||||
data.Day_Code = inputSrc.Day_Code
|
||||
data.StartTime = inputSrc.StartTime
|
||||
|
||||
@@ -18,7 +18,7 @@ func setData[T *e.CreateDto | *e.UpdateDto](input T, data *e.ResponsibleDoctorHi
|
||||
}
|
||||
|
||||
data.Encounter_Id = inputSrc.Encounter_Id
|
||||
data.Doctor_Id = inputSrc.Doctor_Id
|
||||
data.Doctor_Code = inputSrc.Doctor_Code
|
||||
data.StartedAt = inputSrc.StartedAt
|
||||
data.FinishedAt = inputSrc.FinishedAt
|
||||
}
|
||||
|
||||
@@ -299,9 +299,9 @@ func validateForeignKey(input e.CreateDto) error {
|
||||
}
|
||||
}
|
||||
|
||||
// validate doctor_id
|
||||
if input.Doctor_Id != nil {
|
||||
if _, err := ud.ReadDetail(ed.ReadDetailDto{Id: uint16(*input.Doctor_Id)}); err != nil {
|
||||
// validate doctor_code
|
||||
if input.Doctor_Code != nil {
|
||||
if _, err := ud.ReadDetail(ed.ReadDetailDto{Code: input.Doctor_Code}); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@ func setData[T *e.CreateDto | *e.UpdateDto](input T, data *e.TherapyProtocol) {
|
||||
}
|
||||
|
||||
data.Encounter_Id = inputSrc.Encounter_Id
|
||||
data.Doctor_Id = inputSrc.Doctor_Id
|
||||
data.Doctor_Code = inputSrc.Doctor_Code
|
||||
data.Anamnesis = inputSrc.Anamnesis
|
||||
data.MedicalDiagnoses = inputSrc.MedicalDiagnoses
|
||||
data.FunctionDiagnoses = inputSrc.FunctionDiagnoses
|
||||
|
||||
Reference in New Issue
Block a user