diff --git a/.gitignore b/.gitignore index f7357d8a..5f88f352 100644 --- a/.gitignore +++ b/.gitignore @@ -27,8 +27,8 @@ go.work.sum # env file .env config.yml -cmd/main-migration/atlas.hcl -cmd/satusehat-migration/atlas.hcl +**/atlas.hcl +!**/atlas.hcl.example # Editor/IDE # .idea/ diff --git a/cmd/main-migration/migrations/20251002085604.sql b/cmd/main-migration/migrations/20251002085604.sql new file mode 100644 index 00000000..e215cd13 --- /dev/null +++ b/cmd/main-migration/migrations/20251002085604.sql @@ -0,0 +1,2 @@ +-- Modify "Division" table +ALTER TABLE "public"."Division" ALTER COLUMN "Parent_Id" TYPE integer, ADD CONSTRAINT "fk_Division_Childrens" FOREIGN KEY ("Parent_Id") REFERENCES "public"."Division" ("Id") ON UPDATE NO ACTION ON DELETE NO ACTION; diff --git a/cmd/main-migration/migrations/20251003032030.sql b/cmd/main-migration/migrations/20251003032030.sql new file mode 100644 index 00000000..2bdf73ba --- /dev/null +++ b/cmd/main-migration/migrations/20251003032030.sql @@ -0,0 +1,6 @@ +-- Modify "Infra" table +ALTER TABLE "public"."Infra" ADD CONSTRAINT "fk_Infra_Childrens" FOREIGN KEY ("Parent_Id") REFERENCES "public"."Infra" ("Id") ON UPDATE NO ACTION ON DELETE NO ACTION; +-- Modify "DeviceOrder" table +ALTER TABLE "public"."DeviceOrder" ADD COLUMN "Doctor_Id" bigint NULL, ADD CONSTRAINT "fk_DeviceOrder_Doctor" FOREIGN KEY ("Doctor_Id") REFERENCES "public"."Doctor" ("Id") ON UPDATE NO ACTION ON DELETE NO ACTION; +-- Modify "MaterialOrder" table +ALTER TABLE "public"."MaterialOrder" ADD COLUMN "Doctor_Id" bigint NULL, ADD CONSTRAINT "fk_MaterialOrder_Doctor" FOREIGN KEY ("Doctor_Id") REFERENCES "public"."Doctor" ("Id") ON UPDATE NO ACTION ON DELETE NO ACTION; diff --git a/cmd/main-migration/migrations/atlas.sum b/cmd/main-migration/migrations/atlas.sum index 4c7a0491..571f69da 100644 --- a/cmd/main-migration/migrations/atlas.sum +++ b/cmd/main-migration/migrations/atlas.sum @@ -1,4 +1,4 @@ -h1:X7LbOLpbDhciJ1O92KiWgnrVP60dDAyBKJqQKJnom+M= +h1:EkXfc/qeBa+6Fog89GGHEbrpjWfLwy/t6MQdrP9tImE= 20250904105930.sql h1:MEM6blCgke9DzWQSTnLzasbPIrcHssNNrJqZpSkEo6k= 20250904141448.sql h1:J8cmYNk4ZrG9fhfbi2Z1IWz7YkfvhFqTzrLFo58BPY0= 20250908062237.sql h1:Pu23yEW/aKkwozHoOuROvHS/GK4ngARJGdO7FB7HZuI= @@ -20,4 +20,6 @@ h1:X7LbOLpbDhciJ1O92KiWgnrVP60dDAyBKJqQKJnom+M= 20250929034321.sql h1:101FJ8VH12mrZWlt/X1gvKUGOhoiF8tFbjiapAjnHzg= 20250929034428.sql h1:i+pROD9p+g5dOmmZma6WF/0Hw5g3Ha28NN85iTo1K34= 20250930025550.sql h1:+F+CsCUXD/ql0tHGEow70GhPBX1ZybVn+bh/T4YMh7Y= -20250930140351.sql h1:aqXw0j09+xjFqemWlo0enw3tn/IT1FMxw3oUPljkjks= +20250930140351.sql h1:9AAEG1AnOAH+o0+oHL5G7I8vqlWOhwRlCGyyCpT/y1Q= +20251002085604.sql h1:3xZ68eYp4urXRnvotNH1XvG2mYOSDV/j3zHEZ/txg5E= +20251003032030.sql h1:hdN6UINPM9Pz9ME6uP3pr6PNCqqz4y7h2qY1UlVjw60= diff --git a/go.mod b/go.mod index d05acad5..18b17db3 100644 --- a/go.mod +++ b/go.mod @@ -8,6 +8,7 @@ require ( ariga.io/atlas-provider-gorm v0.5.6 github.com/golang-jwt/jwt v3.2.2+incompatible github.com/google/uuid v1.6.0 + github.com/jackc/pgx/v5 v5.5.5 github.com/karincake/apem v0.0.17 github.com/karincake/dodol v0.0.1 github.com/karincake/getuk v0.1.0 @@ -34,7 +35,6 @@ require ( github.com/google/go-cmp v0.7.0 // indirect github.com/jackc/pgpassfile v1.0.0 // indirect github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a // indirect - github.com/jackc/pgx/v5 v5.5.5 // indirect github.com/jackc/puddle/v2 v2.2.1 // indirect github.com/jinzhu/inflection v1.0.0 // indirect github.com/jinzhu/now v1.1.5 // indirect diff --git a/internal/domain/main-entities/device-order/dto.go b/internal/domain/main-entities/device-order/dto.go index f26d1155..6d61757e 100644 --- a/internal/domain/main-entities/device-order/dto.go +++ b/internal/domain/main-entities/device-order/dto.go @@ -2,13 +2,20 @@ package deviceorder import ( ecore "simrs-vx/internal/domain/base-entities/core" + ed "simrs-vx/internal/domain/main-entities/doctor" ee "simrs-vx/internal/domain/main-entities/encounter" + erc "simrs-vx/internal/domain/references/common" + + pa "simrs-vx/pkg/auth-helper" ) type CreateDto struct { Encounter_Id *uint `json:"encounter_id"` Status_Code erc.DataStatusCode `json:"status_code"` + Doctor_Id *uint `json:"doctor_id"` + + pa.AuthInfo } type ReadListDto struct { @@ -48,6 +55,8 @@ type ResponseDto struct { ecore.Main Encounter_Id *uint `json:"encounter_id"` Encounter *ee.Encounter `json:"encounter,omitempty"` + Doctor_Id *uint `json:"doctor_id"` + Doctor *ed.Doctor `json:"doctor,omitempty"` Status_Code erc.DataStatusCode `json:"status_code"` } @@ -55,6 +64,8 @@ func (d DeviceOrder) ToResponse() ResponseDto { resp := ResponseDto{ Encounter_Id: d.Encounter_Id, Encounter: d.Encounter, + Doctor_Id: d.Doctor_Id, + Doctor: d.Doctor, Status_Code: d.Status_Code, } resp.Main = d.Main diff --git a/internal/domain/main-entities/device-order/entity.go b/internal/domain/main-entities/device-order/entity.go index 3b37669f..7f693518 100644 --- a/internal/domain/main-entities/device-order/entity.go +++ b/internal/domain/main-entities/device-order/entity.go @@ -2,6 +2,7 @@ package deviceorder import ( ecore "simrs-vx/internal/domain/base-entities/core" + ed "simrs-vx/internal/domain/main-entities/doctor" ee "simrs-vx/internal/domain/main-entities/encounter" erc "simrs-vx/internal/domain/references/common" @@ -11,9 +12,15 @@ type DeviceOrder struct { ecore.Main // adjust this according to the needs Encounter_Id *uint `json:"encounter_id"` Encounter *ee.Encounter `json:"encounter,omitempty" gorm:"foreignKey:Encounter_Id;references:Id"` + Doctor_Id *uint `json:"doctor_id"` + Doctor *ed.Doctor `json:"doctor,omitempty" gorm:"foreignKey:Doctor_Id;references:Id"` Status_Code erc.DataStatusCode `json:"status_code"` } func (d DeviceOrder) IsCompleted() bool { return d.Status_Code == erc.DSCDone } + +func (d DeviceOrder) IsSameDoctor(doctor_id *uint) bool { + return d.Doctor_Id == doctor_id +} diff --git a/internal/domain/main-entities/device/dto.go b/internal/domain/main-entities/device/dto.go index dcc115c6..c7a386cd 100644 --- a/internal/domain/main-entities/device/dto.go +++ b/internal/domain/main-entities/device/dto.go @@ -19,6 +19,7 @@ type ReadListDto struct { FilterDto Includes string `json:"includes"` Preloads []string `json:"-"` + Search string `json:"search"` } type FilterDto struct { diff --git a/internal/domain/main-entities/division/dto.go b/internal/domain/main-entities/division/dto.go index e8ba2d97..ea45ee1d 100644 --- a/internal/domain/main-entities/division/dto.go +++ b/internal/domain/main-entities/division/dto.go @@ -5,15 +5,22 @@ import ( ) type CreateDto struct { - Code string `json:"code" validate:"maxLength=10"` - Name string `json:"name" validate:"maxLength=50"` - Parent_Id *int16 `json:"parent_id"` + Code string `json:"code" validate:"maxLength=10"` + Name string `json:"name" validate:"maxLength=50"` + Parent_Id *uint16 `json:"parent_id"` } type ReadListDto struct { - Code string `json:"code"` - Name string `json:"name"` - Parent_Id *int16 `json:"parent_id"` + FilterDto + Includes string `json:"includes"` + Preloads []string `json:"-"` + Search string `json:"search"` +} + +type FilterDto struct { + Code string `json:"code"` + Name string `json:"name"` + Parent_Id *uint16 `json:"parent_id"` Page int `json:"page"` PageSize int `json:"page_size"` @@ -42,9 +49,11 @@ type MetaDto struct { type ResponseDto struct { ecore.SmallMain - Code string `json:"code"` - Name string `json:"name"` - Parent_Id *int16 `json:"parent_id"` + Code string `json:"code"` + Name string `json:"name"` + Parent_Id *uint16 `json:"parent_id"` + Parent *Division `json:"parent,omitempty"` + Childrens []Division `json:"childrens,omitempty"` } func (d Division) ToResponse() ResponseDto { @@ -52,6 +61,8 @@ func (d Division) ToResponse() ResponseDto { Code: d.Code, Name: d.Name, Parent_Id: d.Parent_Id, + Parent: d.Parent, + Childrens: d.Childrens, } resp.SmallMain = d.SmallMain return resp diff --git a/internal/domain/main-entities/division/entity.go b/internal/domain/main-entities/division/entity.go index 7d3bc65d..470fab0d 100644 --- a/internal/domain/main-entities/division/entity.go +++ b/internal/domain/main-entities/division/entity.go @@ -5,8 +5,10 @@ import ( ) type Division struct { - ecore.SmallMain // adjust this according to the needs - Code string `json:"code" gorm:"unique;size:10"` - Name string `json:"name" gorm:"size:50"` - Parent_Id *int16 `json:"parent_id"` + ecore.SmallMain // adjust this according to the needs + Code string `json:"code" gorm:"unique;size:10"` + Name string `json:"name" gorm:"size:50"` + Parent_Id *uint16 `json:"parent_id"` + Parent *Division `json:"parent" gorm:"foreignKey:Parent_Id;references:Id"` + Childrens []Division `json:"childrens" gorm:"foreignKey:Parent_Id"` // may need references to self } diff --git a/internal/domain/main-entities/ethnic/dto.go b/internal/domain/main-entities/ethnic/dto.go index 8b14fde1..ff0d41a4 100644 --- a/internal/domain/main-entities/ethnic/dto.go +++ b/internal/domain/main-entities/ethnic/dto.go @@ -10,8 +10,9 @@ type CreateDto struct { } type ReadListDto struct { - Code string `json:"code"` - Name string `json:"name"` + Code string `json:"code"` + Name string `json:"name"` + Search string `json:"search"` Page int `json:"page"` PageSize int `json:"page_size"` diff --git a/internal/domain/main-entities/infra/dto.go b/internal/domain/main-entities/infra/dto.go index 69531f5f..b51937ce 100644 --- a/internal/domain/main-entities/infra/dto.go +++ b/internal/domain/main-entities/infra/dto.go @@ -23,6 +23,7 @@ type ReadListDto struct { FilterDto Includes string `json:"includes"` Preloads []string `json:"-"` + Search string `json:"search"` } type FilterDto struct { @@ -64,6 +65,8 @@ type ResponseDto struct { Name string `json:"name"` InfraGroup_Code ero.InfraGroupCode `json:"infraGroup_code"` Parent_Id *uint16 `json:"parent_id"` + Parent *Infra `json:"parent,omitempty"` + Childrens []Infra `json:"childrens,omitempty"` Item_Id *uint `json:"item_id"` Item *ei.Item `json:"item,omitempty"` } @@ -74,6 +77,8 @@ func (d Infra) ToResponse() ResponseDto { Name: d.Name, InfraGroup_Code: d.InfraGroup_Code, Parent_Id: d.Parent_Id, + Parent: d.Parent, + Childrens: d.Childrens, Item_Id: d.Item_Id, Item: d.Item, } diff --git a/internal/domain/main-entities/infra/entity.go b/internal/domain/main-entities/infra/entity.go index a7d2e6d4..cf069376 100644 --- a/internal/domain/main-entities/infra/entity.go +++ b/internal/domain/main-entities/infra/entity.go @@ -13,6 +13,8 @@ type Infra struct { Name string `json:"name" gorm:"size:50"` InfraGroup_Code ero.InfraGroupCode `json:"infraGroup_code" gorm:"size:10"` Parent_Id *uint16 `json:"parent_id"` + Parent *Infra `json:"parent" gorm:"foreignKey:Parent_Id;references:Id"` + Childrens []Infra `json:"childrens" gorm:"foreignKey:Parent_Id"` // may need references to self Item_Id *uint `json:"item_id"` Item *ei.Item `json:"item,omitempty" gorm:"foreignKey:Item_Id;references:Id"` } diff --git a/internal/domain/main-entities/language/dto.go b/internal/domain/main-entities/language/dto.go index 563b5205..7d2e7239 100644 --- a/internal/domain/main-entities/language/dto.go +++ b/internal/domain/main-entities/language/dto.go @@ -10,8 +10,9 @@ type CreateDto struct { } type ReadListDto struct { - Code string `json:"code"` - Name string `json:"name"` + Code string `json:"code"` + Name string `json:"name"` + Search string `json:"search"` Page int `json:"page"` PageSize int `json:"page_size"` diff --git a/internal/domain/main-entities/material-order/dto.go b/internal/domain/main-entities/material-order/dto.go index 849f887f..1c58c379 100644 --- a/internal/domain/main-entities/material-order/dto.go +++ b/internal/domain/main-entities/material-order/dto.go @@ -2,13 +2,20 @@ package materialorder import ( ecore "simrs-vx/internal/domain/base-entities/core" + ed "simrs-vx/internal/domain/main-entities/doctor" ee "simrs-vx/internal/domain/main-entities/encounter" + erc "simrs-vx/internal/domain/references/common" + + pa "simrs-vx/pkg/auth-helper" ) type CreateDto struct { Encounter_Id *uint `json:"encounter_id"` Status_Code erc.DataStatusCode `json:"status_code"` + Doctor_Id *uint `json:"doctor_id"` + + pa.AuthInfo } type ReadListDto struct { @@ -48,6 +55,8 @@ type ResponseDto struct { ecore.Main Encounter_Id *uint `json:"encounter_id"` Encounter *ee.Encounter `json:"encounter,omitempty"` + Doctor_Id *uint `json:"doctor_id"` + Doctor *ed.Doctor `json:"doctor,omitempty"` Status_Code erc.DataStatusCode `json:"status_code"` } @@ -55,6 +64,8 @@ func (d MaterialOrder) ToResponse() ResponseDto { resp := ResponseDto{ Encounter_Id: d.Encounter_Id, Encounter: d.Encounter, + Doctor_Id: d.Doctor_Id, + Doctor: d.Doctor, Status_Code: d.Status_Code, } resp.Main = d.Main diff --git a/internal/domain/main-entities/material-order/entity.go b/internal/domain/main-entities/material-order/entity.go index b8a3b238..27b5c011 100644 --- a/internal/domain/main-entities/material-order/entity.go +++ b/internal/domain/main-entities/material-order/entity.go @@ -2,6 +2,7 @@ package materialorder import ( ecore "simrs-vx/internal/domain/base-entities/core" + ed "simrs-vx/internal/domain/main-entities/doctor" ee "simrs-vx/internal/domain/main-entities/encounter" erc "simrs-vx/internal/domain/references/common" @@ -11,9 +12,15 @@ type MaterialOrder struct { ecore.Main // adjust this according to the needs Encounter_Id *uint `json:"encounter_id"` Encounter *ee.Encounter `json:"encounter,omitempty" gorm:"foreignKey:Encounter_Id;references:Id"` + Doctor_Id *uint `json:"doctor_id"` + Doctor *ed.Doctor `json:"doctor,omitempty" gorm:"foreignKey:Doctor_Id;references:Id"` Status_Code erc.DataStatusCode `json:"status_code"` } func (d MaterialOrder) IsCompleted() bool { return d.Status_Code == erc.DSCDone } + +func (d MaterialOrder) IsSameDoctor(doctor_id *uint) bool { + return d.Doctor_Id == doctor_id +} diff --git a/internal/domain/main-entities/material/dto.go b/internal/domain/main-entities/material/dto.go index 9ae830f9..627d49c1 100644 --- a/internal/domain/main-entities/material/dto.go +++ b/internal/domain/main-entities/material/dto.go @@ -20,6 +20,7 @@ type ReadListDto struct { FilterDto Includes string `json:"includes"` Preloads []string `json:"-"` + Search string `json:"search"` } type FilterDto struct { diff --git a/internal/domain/main-entities/mcu-src/dto.go b/internal/domain/main-entities/mcu-src/dto.go index 7aa6c7e6..e64c0d5d 100644 --- a/internal/domain/main-entities/mcu-src/dto.go +++ b/internal/domain/main-entities/mcu-src/dto.go @@ -16,6 +16,7 @@ type ReadListDto struct { FilterDto Includes string `json:"includes"` Preloads []string `json:"-"` + Search string `json:"search"` } type FilterDto struct { diff --git a/internal/domain/main-entities/mcu-sub-src/dto.go b/internal/domain/main-entities/mcu-sub-src/dto.go index a6d0a804..a112b3c4 100644 --- a/internal/domain/main-entities/mcu-sub-src/dto.go +++ b/internal/domain/main-entities/mcu-sub-src/dto.go @@ -17,6 +17,7 @@ type ReadListDto struct { FilterDto Includes string `json:"includes"` Preloads []string `json:"-"` + Search string `json:"search"` } type FilterDto struct { diff --git a/internal/domain/main-entities/medical-action-src/dto.go b/internal/domain/main-entities/medical-action-src/dto.go index e902a1e8..6480e732 100644 --- a/internal/domain/main-entities/medical-action-src/dto.go +++ b/internal/domain/main-entities/medical-action-src/dto.go @@ -15,6 +15,7 @@ type ReadListDto struct { FilterDto Includes string `json:"includes"` Preloads []string `json:"-"` + Search string `json:"search"` } type FilterDto struct { diff --git a/internal/domain/main-entities/procedure-src/dto.go b/internal/domain/main-entities/procedure-src/dto.go index 8dd97f1e..687fbad6 100644 --- a/internal/domain/main-entities/procedure-src/dto.go +++ b/internal/domain/main-entities/procedure-src/dto.go @@ -14,6 +14,7 @@ type ReadListDto struct { Code string `json:"code"` Name string `json:"name"` IndName string `json:"indName"` + Search string `json:"search"` Page int `json:"page"` PageSize int `json:"page_size"` diff --git a/internal/domain/main-entities/uom/dto.go b/internal/domain/main-entities/uom/dto.go index 348fb7fd..58ea2554 100644 --- a/internal/domain/main-entities/uom/dto.go +++ b/internal/domain/main-entities/uom/dto.go @@ -10,8 +10,9 @@ type CreateDto struct { } type ReadListDto struct { - Code string `json:"code"` - Name string `json:"name"` + Code string `json:"code"` + Name string `json:"name"` + Search string `json:"search"` Page int `json:"page"` PageSize int `json:"page_size"` diff --git a/internal/domain/references/clinical/clinical.go b/internal/domain/references/clinical/clinical.go index 6420d2a1..5a9fc280 100644 --- a/internal/domain/references/clinical/clinical.go +++ b/internal/domain/references/clinical/clinical.go @@ -7,29 +7,50 @@ type ( AssessmentCode string PlanCode string InstructionCode string + HeadToToeCode string McuUrgencyLevelCode string SoapiTypeCode string ) const ( - SCPrimaryComplaint SubjectCode = "pri-complain" // Keluhan Utama - SCSecComplaint SubjectCode = "sec-complain" // Secondary Complaint + SCPrimaryComplain SubjectCode = "pri-complain" // Keluhan Utama + SCSecComplain SubjectCode = "sec-complain" // Secondary Complaint SCCurrentDiseaseHistory SubjectCode = "cur-disea-hist" // Current Disease History SCPastDiseaseHistory SubjectCode = "pas-disea-hist" // Past Disease History SCFamilyDiseaseHistory SubjectCode = "fam-disea-hist" // Family Disease History SCAllergyHistory SubjectCode = "alg-hist" // Allergic History SCAllergyReaction SubjectCode = "alg-react" // Allergic Reaction SCMedicationHistory SubjectCode = "med-hist" // Medication History + SCBloodType SubjectCode = "blood-type" // Blood Type - OCConsciousnessLevel ObjectCode = "consc-level" // Tingkat Kesadaran - OCConsciousnessLevelDet ObjectCode = "consc-level-det" // Detail Tingkat Kesadaran - OCSystolicBloodPressure ObjectCode = "syst-bp" // Tekanan Darah Systolic - OCDiastolicBloodPressure ObjectCode = "diast-bp" // Tekanan Darah Diastolic - OCHeartRate ObjectCode = "hear-rt" // Detak Jantung - OCTemperature ObjectCode = "temp" // Suhu - OCSpO2 ObjectCode = "spo2" // SpO2 - OCWeight ObjectCode = "weight" // Berat Badan - OCHeight ObjectCode = "height" // Tinggi Badan + OCConsciousnessLevel ObjectCode = "consc-level" // Tingkat Kesadaran + OCConsciousnessLevelDet ObjectCode = "consc-level-det" // Detail Tingkat Kesadaran + OCSystolicBloodPressure ObjectCode = "syst-bp" // Tekanan Darah Systolic + OCDiastolicBloodPressure ObjectCode = "diast-bp" // Tekanan Darah Diastolic + OCPulse ObjectCode = "pulse" // Nadi + OCRespiratoryRate ObjectCode = "resp-rate" // Pernafasan + OCHeartRate ObjectCode = "hear-rt" // Detak Jantung + OCNeuroCranialis ObjectCode = "neuro-cranialis" // Neurologist Cranialist + OCSensoris ObjectCode = "sensoris" // Sensoris + OCReflectFisio ObjectCode = "reflect-fisio" // Refleks Fisiologi + OCReflectPato ObjectCode = "reflect-pato" // Refleks Patologi + OCAutonomNeuron ObjectCode = "autonom-neuron" // Saraf Otonom + OCNeckRom ObjectCode = "neck-rom" // ROM Leher + OCBodyRom ObjectCode = "body-rom" // ROM Batang Tubuh + OCAgaRom ObjectCode = "aga-rom" // ROM AGA + OCAgbRom ObjectCode = "agb-rom" // ROM AGB + OCNeckMmt ObjectCode = "neck-mmt" // MMT Leher + OCBodyMmt ObjectCode = "body-mmt" // MMT Batang Tubuh + OCAgaMmt ObjectCode = "aga-mmt" // MMT AGA + OCAgbMmt ObjectCode = "agb-mmt" // MMT AGB + OCLocalis ObjectCode = "localis" // Status Lokalis + OCMedicalTrouble ObjectCode = "medical-trouble" // Masalah Medis + OCRehabMedicTrouble ObjectCode = "rehab-medic-trouble" // Masalah Rehab Medik + OCTemperature ObjectCode = "temp" // Suhu + OCSpO2 ObjectCode = "spo2" // SpO2 + OCWeight ObjectCode = "weight" // Berat Badan + OCHeight ObjectCode = "height" // Tinggi Badan + OCHeadToToe ObjectCode = "head-to-toe" // Kepala Sampai Kaki ACEarlyDiag AssessmentCode = "early-diag" // Diagnosis Awal ACLateDiag AssessmentCode = "late-diag" // Diagnosis Akhir @@ -37,56 +58,163 @@ const ( PCPlan PlanCode = "plan" // Rencana - ICDetail InstructionCode = "detail" // Detail instruksi - ICMedAct InstructionCode = "med-act" // Tindakan medis - ICMedication InstructionCode = "medication" // Obat - ICMaterial InstructionCode = "material" // BMHP + ICDetail InstructionCode = "detail" // Detail Instruksi + ICMedAct InstructionCode = "medical-act" // Tindakan Medis + ICSupExam InstructionCode = "supporting-exam" // Pemeriksaan Penunjang + ICTherapy InstructionCode = "therapy" // Terapi + ICMedication InstructionCode = "medication" // Obat + ICMaterial InstructionCode = "material" // BMHP + ICREhabProg InstructionCode = "rehab-program" // Program Rehab + ICPhyMod InstructionCode = "physic-modal" // Modalitas Fisik + ICExcercise InstructionCode = "exercise" // Latihan + ICOrtPro InstructionCode = "ortes-protesa" // Ortesa Protesa + ICEducation InstructionCode = "education" // Edukasi + ICOther InstructionCode = "other" // Lain-lain - MULCCITO McuUrgencyLevelCode = "cito" - MULCCITOIGD McuUrgencyLevelCode = "cito-igd" - MULCPonek McuUrgencyLevelCode = "ponek" - MULCBG McuUrgencyLevelCode = "blood-gas" - MULCPF McuUrgencyLevelCode = "priority-form" - MULCRT McuUrgencyLevelCode = "routine" + HTTHead HeadToToeCode = "head" + HTTEye HeadToToeCode = "eye" + HTTEar HeadToToeCode = "ear" + HTTNose HeadToToeCode = "nose" + HTTMouthThroat HeadToToeCode = "mouth-throat" + HTTHeadOthers HeadToToeCode = "head-others" + HTTThorax HeadToToeCode = "thorax" + HTTHeart HeadToToeCode = "heart" + HTTLung HeadToToeCode = "lung" + HTTAbdomen HeadToToeCode = "abdomen" + HTTLiver HeadToToeCode = "liver" + HTTBack HeadToToeCode = "back" + HTTEkstremitas HeadToToeCode = "ekstremitas" + HTTGender HeadToToeCode = "gender" + HTTRectum HeadToToeCode = "rectum" + HTTNeuron HeadToToeCode = "neuron" + HTTBodyOthers HeadToToeCode = "body-others" - STCEarly SoapiTypeCode = "early" // Kajian Awal Medis - STCERehab SoapiTypeCode = "early-rehab" // Kajian Awal Rehab Medik - STCFunc SoapiTypeCode = "function" // Assessment Fungsi + MULCCITO McuUrgencyLevelCode = "cito" // CITO + MULCCITOIGD McuUrgencyLevelCode = "cito-igd" // CITO IGD + MULCPonek McuUrgencyLevelCode = "ponek" // PONEK + MULCBG McuUrgencyLevelCode = "blood-gas" // Analisa Gas Darah + MULCPF McuUrgencyLevelCode = "priority-form" // Form Prioritas + MULCRT McuUrgencyLevelCode = "routine" // Pemeriksaan Rutin + + STCEarlyNurse SoapiTypeCode = "early-nurse" // Kajian Awal Medis + STCEEarlyMedic SoapiTypeCode = "early-medic" // Kajian Awal Rehab Medis + STCEarlyRehab SoapiTypeCode = "early-rehab" // Kajian Awal Rehab Medik + STCFunc SoapiTypeCode = "function" // Assessment Fungsi + STCProgress SoapiTypeCode = "progress" // CPPT ) type Soapi struct { - // Subject - PrimaryComplaint string `json:"pri-compl"` - SecondaryComplaint string `json:"sec-compl"` - CurrentDiseaseHistory string `json:"cur-disea-hist"` - PastDiseaseHistory string `json:"pas-disea-hist"` - FamilyDiseaseHistory string `json:"fam-disea-hist"` - AllergyHistory string `json:"alg-hist"` - AllergyReaction string `json:"alg-react"` - MedicationHistory string `json:"med-hist"` - - // Object - ConsciousnessLevel string `json:"consc-level"` - ConsciousnessLevelDet string `json:"consc-level-det"` - SystolicBloodPressure string `json:"syst-bp"` - DiastolicBloodPressure string `json:"diast-bp"` - HeartRate string `json:"hear-rt"` - Temperature string `json:"temp"` - SpO2 string `json:"spo2"` - Weight string `json:"weight"` - Height string `json:"height"` - - // Assessment - EarlyDiagnosis string `json:"early-diag"` - LateDiagnosis string `json:"late-diag"` - SecondaryDiag string `json:"sec-diag"` - - // Plan - Plan string `json:"plan"` - - // Instruction - InstructionDetail string `json:"detail"` - MedicalAction string `json:"med-act"` - Medication string `json:"medication"` - Material string `json:"material"` + Subject SubjectSection `json:"subject"` + Object ObjectSection `json:"object"` + Assessment AssessmentSection `json:"assessment"` + Plan string `json:"plan"` + Instruction InstructionSection `json:"instruction"` +} + +// ---------------- SUBJECT ---------------- +type SubjectSection struct { + Note string `json:"note,omitempty"` + PrimComplain string `json:"prim-compl,omitempty"` + SecComplainQ string `json:"sec-compl,omitempty"` + PrimaryComplain string `json:"pri-complain,omitempty"` + SecondaryComplain string `json:"sec-complain,omitempty"` + CurrentDiseaseHistory string `json:"cur-disea-hist,omitempty"` + PastDiseaseHistory string `json:"pas-disea-hist,omitempty"` + FamilyDiseaseHistory string `json:"fam-disea-hist,omitempty"` + AllergyHistory string `json:"alg-hist,omitempty"` + AllergyReaction string `json:"alg-react,omitempty"` + MedicationHistory string `json:"med-hist,omitempty"` + BloodType string `json:"blood-type,omitempty"` +} + +// ---------------- OBJECT ---------------- +type ObjectSection struct { + Note string `json:"note,omitempty"` + ConsciousnessLevel string `json:"consc-level,omitempty"` + ConsciousnessLevelDet string `json:"consc-level-det,omitempty"` + SystolicBloodPressure string `json:"syst-bp,omitempty"` + DiastolicBloodPressure string `json:"diast-bp,omitempty"` + Pulse string `json:"pulse,omitempty"` + RespiratoryRate string `json:"resp-rate,omitempty"` + HeartRate string `json:"hear-rt,omitempty"` + NeuroCranialis string `json:"neuro-cranialis,omitempty"` + Sensoris string `json:"sensoris,omitempty"` + ReflectFisio string `json:"reflect-fisio,omitempty"` + ReflectPato string `json:"reflect-pato,omitempty"` + AutonomNeuron string `json:"autonom-neuron,omitempty"` + NeckRom string `json:"neck-rom,omitempty"` + BodyRom string `json:"body-rom,omitempty"` + AgaRom string `json:"aga-rom,omitempty"` + AgbRom string `json:"agb-rom,omitempty"` + NeckMmt string `json:"neck-mmt,omitempty"` + BodyMmt string `json:"body-mmt,omitempty"` + AgaMmt string `json:"aga-mmt,omitempty"` + AgbMmt string `json:"agb-mmt,omitempty"` + Localis string `json:"localis,omitempty"` + MedicalTrouble string `json:"medical-trouble,omitempty"` + RehabMedicTrouble string `json:"rehab-medic-trouble,omitempty"` + Temperature string `json:"temp,omitempty"` + SpO2 string `json:"spo2,omitempty"` + Weight string `json:"weight,omitempty"` + Height string `json:"height,omitempty"` + HeadToToe HeadToToe `json:"head-to-toe,omitempty"` +} + +// ---------------- ASSESSMENT ---------------- +type AssessmentSection struct { + EarlyDiagnosis DiagnosisDetail `json:"early-diag,omitempty"` + LateDiagnosis DiagnosisDetail `json:"late-diag,omitempty"` + SecondaryDiag DiagnosisDetail `json:"sec-diag,omitempty"` +} + +// nested object {note, codes} +type DiagnosisDetail struct { + Note string `json:"note,omitempty"` + Codes []CodeWithName `json:"codes,omitempty"` +} + +// ---------------- INSTRUCTION ---------------- +type InstructionSection struct { + Detail string `json:"detail,omitempty"` + MedicalAction CodesWithNote `json:"medical-act,omitempty"` + SupportingExam []CodeWithName `json:"supporting-exam,omitempty"` + Therapy string `json:"therapy,omitempty"` + Medication []CodeWithName `json:"medication,omitempty"` + Material []CodeWithName `json:"material,omitempty"` + RehabProgram string `json:"rehab-program,omitempty"` + PhysicModal string `json:"physic-modal,omitempty"` + Exercise string `json:"exercise,omitempty"` + OrtesProsthesis string `json:"ortes-protesa,omitempty"` + Education string `json:"education,omitempty"` + Other string `json:"other,omitempty"` +} + +// ---------------- CODES ---------------- +type CodeWithName struct { + Code string `json:"code,omitempty"` + Name string `json:"name,omitempty"` +} +type CodesWithNote struct { + Note string `json:"note,omitempty"` + Codes []CodeWithName `json:"codes,omitempty"` +} + +type HeadToToe struct { + Head string `json:"head,omitempty"` + Eye string `json:"eye,omitempty"` + Ear string `json:"ear,omitempty"` + Nose string `json:"nose,omitempty"` + MouthThroat string `json:"mouth-throat,omitempty"` + HeadOthers string `json:"head-others,omitempty"` + Thorax string `json:"thorax,omitempty"` + Heart string `json:"heart,omitempty"` + Lung string `json:"lung,omitempty"` + Abdomen string `json:"abdomen,omitempty"` + Liver string `json:"liver,omitempty"` + Back string `json:"back,omitempty"` + Ekstremitas string `json:"ekstremitas,omitempty"` + Gender string `json:"gender,omitempty"` + Rectum string `json:"rectum,omitempty"` + Neuron string `json:"neuron,omitempty"` + BodyOthers string `json:"body-others,omitempty"` } diff --git a/internal/domain/references/common/common.go b/internal/domain/references/common/common.go index d60ee8a3..2970e2a8 100644 --- a/internal/domain/references/common/common.go +++ b/internal/domain/references/common/common.go @@ -1,17 +1,19 @@ package common type ( - YaTidakCode byte - SudahBelumCode byte - AktifSimpelCode byte - AktifAdvanceCode byte - TersediaCode byte - DayCode byte - ActiveStatusCode string - DataStatusCode string - UserStatusCode string - TimeUnitCode string - PaymentMethodCode string + YaTidakCode byte + SudahBelumCode byte + AktifSimpelCode byte + AktifAdvanceCode byte + TersediaCode byte + DayCode byte + ActiveStatusCode string + DataStatusCode string + UserStatusCode string + TimeUnitCode string + PaymentMethodCode string + DataAvailabilityCode string + DataVerifiedCode string ) const ( @@ -61,6 +63,14 @@ const ( DSCRejected DataStatusCode = "rejected" // Ditolak DSCSkipped DataStatusCode = "skipped" // Dilewati + DACReview DataAvailabilityCode = "review" // Konfirmasi + DACAvailable DataAvailabilityCode = "available" // Tersedia + DACUnavailable DataAvailabilityCode = "unavailable" // Tidak Tersedia + + DVCNew DataVerifiedCode = "new" // Baru + DVCVerified DataVerifiedCode = "verified" // Terverifikasi + DVCRejected DataVerifiedCode = "rejected" // Ditolak + USCNew UserStatusCode = "new" // Baru USCActive UserStatusCode = "active" // Aktif USCInactive UserStatusCode = "inactive" // Tidak aktif diff --git a/internal/domain/references/encounter/encounter.go b/internal/domain/references/encounter/encounter.go index 14e6a269..4819ee17 100644 --- a/internal/domain/references/encounter/encounter.go +++ b/internal/domain/references/encounter/encounter.go @@ -15,9 +15,9 @@ type ( ) const ( - ECAmbulatory EncounterClassCode = "ambulatory" - ECEmergency EncounterClassCode = "emergency" - ECInpatient EncounterClassCode = "inpatient" + ECAmbulatory EncounterClassCode = "ambulatory" // Rawat Jalan + ECEmergency EncounterClassCode = "emergency" // Gawat Darurat + ECInpatient EncounterClassCode = "inpatient" // Rawat Inap QSCWait QueueStatusCode = "wait" // Tunggu QSCProc QueueStatusCode = "proc" // Proses @@ -33,16 +33,16 @@ const ( DMCIntRef DischargeMethodCode = "internal-ref" // Rujuk Internal DMCDeath DischargeMethodCode = "death" // Meninggal - TCAmbulance TransportationCode = "ambulance" - TCCar TransportationCode = "car" - TCMotorCycle TransportationCode = "motor-cycle" - TCOther TransportationCode = "other" + TCAmbulance TransportationCode = "ambulance" // Ambulans + TCCar TransportationCode = "car" // Mobil + TCMotorCycle TransportationCode = "motor-cycle" // Motor + TCOther TransportationCode = "other" // Lainnya PCCRes PersonConditionCode = "res" // Resutiasi PCCEmg PersonConditionCode = "emg" // Darurat PCCUrg PersonConditionCode = "urg" // Mendesak PCCLurg PersonConditionCode = "lurg" // Kurang mendesak - PCCNurg PersonConditionCode = "nurg" // + PCCNurg PersonConditionCode = "nurg" // Mendesak PCCDoa PersonConditionCode = "doa" // Meninggal saat tiba ECCEmg EmergencyClassCode = "emg" // Darurat/Emergency biasa @@ -58,8 +58,9 @@ const ( CSCPLab CheckupScopeCode = "pa-lab" // Patology Anatomy Laboratorium CSCRad CheckupScopeCode = "radiology" // Radiology - ACCReg AmbulatoryClassCode = "reg" // Regular - ACCRme AmbulatoryClassCode = "rme" // Rehab Medik + ACCReg AmbulatoryClassCode = "reg" // Regular + ACCRme AmbulatoryClassCode = "rme" // Rehab Medik + ACCChe AmbulatoryClassCode = "chemo" // Chemotherapy ICCIp InpatientClassCode = "ip" // Regular Rawat Inap ICCICU InpatientClassCode = "icu" // ICU diff --git a/internal/domain/references/organization/organization.go b/internal/domain/references/organization/organization.go index db2afe55..68edc332 100644 --- a/internal/domain/references/organization/organization.go +++ b/internal/domain/references/organization/organization.go @@ -9,17 +9,18 @@ type ( ) const ( - UPCDoc UserPosisitionCode = "doctor" // Dokter - UPCNur UserPosisitionCode = "nurse" // Perawat - UPCNut UserPosisitionCode = "nutritionist" // Ahli gizi - UPCLab UserPosisitionCode = "laborant" // Laboran - UPCPha UserPosisitionCode = "pharmacy" // Farmasi - UPCPay UserPosisitionCode = "payment" // Pembayaran - UPCHur UserPosisitionCode = "human-resource" // Sumber Daya Manusia - UPCGea UserPosisitionCode = "general-affair" // Bagian Umu - UPCPav UserPosisitionCode = "payment-verificator" // Konfirmasi pembayaran - UPCMan UserPosisitionCode = "management" // Manajemen - UPCInt UserPosisitionCode = "specialist-intern" // PPDS + UPCReg UserPosisitionCode = "registration" // Admisi/Pendaftaran + UPCNur UserPosisitionCode = "nurse" // Perawat + UPCDoc UserPosisitionCode = "doctor" // Dokter + UPCNut UserPosisitionCode = "nutritionist" // Ahli gizi + UPCMwi UserPosisitionCode = "mid-wife" // Bidan + UPCLab UserPosisitionCode = "laborant" // Laboran + UPCPha UserPosisitionCode = "pharmacy" // Farmasi + UPCPay UserPosisitionCode = "payment" // Pembayaran + UPCHur UserPosisitionCode = "human-resource" // Sumber Daya Manusia + UPCGea UserPosisitionCode = "general-affair" // Bagian Umum + UPCInt UserPosisitionCode = "specialist-intern" // PPDS + UPCMan UserPosisitionCode = "management" // Manajemen ITGCInfra ItemGroupCode = "infra" ITGCMedicine ItemGroupCode = "medicine" @@ -30,12 +31,12 @@ const ( ITGCEmpFee ItemGroupCode = "employee-fee" ITGCDocFee ItemGroupCode = "doctor-fee" - IFGCBuilding InfraGroupCode = "building" - IFGCFloor InfraGroupCode = "floor" - IFGCRoom InfraGroupCode = "room" - IFGCChamber InfraGroupCode = "chamber" - IFGCBed InfraGroupCode = "bed" - IFGCWarehouse InfraGroupCode = "warehouse" + IFGCBuilding InfraGroupCode = "building" // Bangunan + IFGCFloor InfraGroupCode = "floor" // Lantai + IFGCRoom InfraGroupCode = "room" // Ruang + IFGCChamber InfraGroupCode = "chamber" // Kamar + IFGCBed InfraGroupCode = "bed" // Ranjang + IFGCWarehouse InfraGroupCode = "warehouse" // Gudang/Depo UTCReg UnitTypeCode = "reg" // Registrasi UTCExa UnitTypeCode = "exa" // Pemeriksaan diff --git a/internal/interface/main-handler/device-order/handler.go b/internal/interface/main-handler/device-order/handler.go index ca11ff90..42135e58 100644 --- a/internal/interface/main-handler/device-order/handler.go +++ b/internal/interface/main-handler/device-order/handler.go @@ -6,10 +6,12 @@ import ( rw "github.com/karincake/risoles" sf "github.com/karincake/semprit" - // ua "github.com/karincake/tumpeng/auth/svc" - e "simrs-vx/internal/domain/main-entities/device-order" u "simrs-vx/internal/use-case/main-use-case/device-order" + + pa "simrs-vx/pkg/auth-helper" + + d "github.com/karincake/dodol" ) type myBase struct{} @@ -21,6 +23,12 @@ func (obj myBase) Create(w http.ResponseWriter, r *http.Request) { if res := rw.ValidateStructByIOR(w, r.Body, &dto); !res { return } + + authInfo, err := pa.GetAuthInfo(r) + if err != nil { + rw.WriteJSON(w, http.StatusUnauthorized, d.IS{"message": err.Error()}, nil) + } + dto.AuthInfo = *authInfo res, err := u.Create(dto) rw.DataResponse(w, res, err) } @@ -54,6 +62,11 @@ func (obj myBase) Update(w http.ResponseWriter, r *http.Request) { return } dto.Id = uint16(id) + authInfo, err := pa.GetAuthInfo(r) + if err != nil { + rw.WriteJSON(w, http.StatusUnauthorized, d.IS{"message": err.Error()}, nil) + } + dto.AuthInfo = *authInfo res, err := u.Update(dto) rw.DataResponse(w, res, err) } diff --git a/internal/interface/main-handler/main-handler.go b/internal/interface/main-handler/main-handler.go index 43b2f950..5adb40cd 100644 --- a/internal/interface/main-handler/main-handler.go +++ b/internal/interface/main-handler/main-handler.go @@ -193,7 +193,7 @@ func SetRoutes() http.Handler { "PATCH /{id}/consume": medicationitemdist.O.Consume, }) - hk.GroupRoutes("/v1/device-order", r, hk.MapHandlerFunc{ + hk.GroupRoutes("/v1/device-order", r, auth.GuardMW, hk.MapHandlerFunc{ "GET /": deviceorder.O.GetList, "GET /{id}": deviceorder.O.GetDetail, "POST /": deviceorder.O.Create, @@ -202,7 +202,7 @@ func SetRoutes() http.Handler { "PATCH /{id}/complete": deviceorder.O.Complete, }) - hk.GroupRoutes("/v1/material-order", r, hk.MapHandlerFunc{ + hk.GroupRoutes("/v1/material-order", r, auth.GuardMW, hk.MapHandlerFunc{ "GET /": materialorder.O.GetList, "GET /{id}": materialorder.O.GetDetail, "POST /": materialorder.O.Create, diff --git a/internal/interface/main-handler/material-order/handler.go b/internal/interface/main-handler/material-order/handler.go index eb717973..ae8777cb 100644 --- a/internal/interface/main-handler/material-order/handler.go +++ b/internal/interface/main-handler/material-order/handler.go @@ -10,6 +10,10 @@ import ( e "simrs-vx/internal/domain/main-entities/material-order" u "simrs-vx/internal/use-case/main-use-case/material-order" + + pa "simrs-vx/pkg/auth-helper" + + d "github.com/karincake/dodol" ) type myBase struct{} @@ -21,6 +25,11 @@ func (obj myBase) Create(w http.ResponseWriter, r *http.Request) { if res := rw.ValidateStructByIOR(w, r.Body, &dto); !res { return } + authInfo, err := pa.GetAuthInfo(r) + if err != nil { + rw.WriteJSON(w, http.StatusUnauthorized, d.IS{"message": err.Error()}, nil) + } + dto.AuthInfo = *authInfo res, err := u.Create(dto) rw.DataResponse(w, res, err) } @@ -53,6 +62,11 @@ func (obj myBase) Update(w http.ResponseWriter, r *http.Request) { if res := rw.ValidateStructByIOR(w, r.Body, &dto); !res { return } + authInfo, err := pa.GetAuthInfo(r) + if err != nil { + rw.WriteJSON(w, http.StatusUnauthorized, d.IS{"message": err.Error()}, nil) + } + dto.AuthInfo = *authInfo dto.Id = uint16(id) res, err := u.Update(dto) rw.DataResponse(w, res, err) diff --git a/internal/use-case/main-use-case/adime/lib.go b/internal/use-case/main-use-case/adime/lib.go index 851dfa4f..5b0574fe 100644 --- a/internal/use-case/main-use-case/adime/lib.go +++ b/internal/use-case/main-use-case/adime/lib.go @@ -2,6 +2,8 @@ package adime import ( e "simrs-vx/internal/domain/main-entities/adime" + + plh "simrs-vx/pkg/lib-helper" pl "simrs-vx/pkg/logger" pu "simrs-vx/pkg/use-case-helper" @@ -24,13 +26,7 @@ func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.Adime, } if err := tx.Create(&data).Error; err != nil { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-create-fail", - Detail: "Database insert failed", - Raw: err, - } - return nil, pl.SetLogError(event, input) + return nil, plh.HandleCreateError(input, event, err) } pl.SetLogInfo(event, nil, "complete") diff --git a/internal/use-case/main-use-case/ambulatory/lib.go b/internal/use-case/main-use-case/ambulatory/lib.go index 86d4fb06..2a68a980 100644 --- a/internal/use-case/main-use-case/ambulatory/lib.go +++ b/internal/use-case/main-use-case/ambulatory/lib.go @@ -2,6 +2,8 @@ package ambulatory import ( e "simrs-vx/internal/domain/main-entities/ambulatory" + + plh "simrs-vx/pkg/lib-helper" pl "simrs-vx/pkg/logger" pu "simrs-vx/pkg/use-case-helper" @@ -24,13 +26,7 @@ func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.Ambulat } if err := tx.Create(&data).Error; err != nil { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-create-fail", - Detail: "Database insert failed", - Raw: err, - } - return nil, pl.SetLogError(event, input) + return nil, plh.HandleCreateError(input, event, err) } pl.SetLogInfo(event, nil, "complete") diff --git a/internal/use-case/main-use-case/consultation/lib.go b/internal/use-case/main-use-case/consultation/lib.go index 08d034d3..2cb2753b 100644 --- a/internal/use-case/main-use-case/consultation/lib.go +++ b/internal/use-case/main-use-case/consultation/lib.go @@ -2,6 +2,8 @@ package consultation import ( e "simrs-vx/internal/domain/main-entities/consultation" + + plh "simrs-vx/pkg/lib-helper" pl "simrs-vx/pkg/logger" pu "simrs-vx/pkg/use-case-helper" @@ -24,13 +26,7 @@ func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.Consult } if err := tx.Create(&data).Error; err != nil { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-create-fail", - Detail: "Database insert failed", - Raw: err, - } - return nil, pl.SetLogError(event, input) + return nil, plh.HandleCreateError(input, event, err) } pl.SetLogInfo(event, nil, "complete") diff --git a/internal/use-case/main-use-case/counter/lib.go b/internal/use-case/main-use-case/counter/lib.go index bfb0ee05..1a28e29a 100644 --- a/internal/use-case/main-use-case/counter/lib.go +++ b/internal/use-case/main-use-case/counter/lib.go @@ -2,6 +2,8 @@ package counter import ( e "simrs-vx/internal/domain/main-entities/counter" + + plh "simrs-vx/pkg/lib-helper" pl "simrs-vx/pkg/logger" pu "simrs-vx/pkg/use-case-helper" @@ -24,13 +26,7 @@ func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.Counter } if err := tx.Create(&data).Error; err != nil { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-create-fail", - Detail: "Database insert failed", - Raw: err, - } - return nil, pl.SetLogError(event, input) + return nil, plh.HandleCreateError(input, event, err) } pl.SetLogInfo(event, nil, "complete") diff --git a/internal/use-case/main-use-case/device-order-item/lib.go b/internal/use-case/main-use-case/device-order-item/lib.go index ab36a7a1..5861f403 100644 --- a/internal/use-case/main-use-case/device-order-item/lib.go +++ b/internal/use-case/main-use-case/device-order-item/lib.go @@ -2,6 +2,8 @@ package deviceorderitem import ( e "simrs-vx/internal/domain/main-entities/device-order-item" + + plh "simrs-vx/pkg/lib-helper" pl "simrs-vx/pkg/logger" pu "simrs-vx/pkg/use-case-helper" @@ -24,13 +26,7 @@ func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.DeviceO } if err := tx.Create(&data).Error; err != nil { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-create-fail", - Detail: "Database insert failed", - Raw: err, - } - return nil, pl.SetLogError(event, input) + return nil, plh.HandleCreateError(input, event, err) } pl.SetLogInfo(event, nil, "complete") diff --git a/internal/use-case/main-use-case/device-order/case.go b/internal/use-case/main-use-case/device-order/case.go index 66dc1949..422c4f1a 100644 --- a/internal/use-case/main-use-case/device-order/case.go +++ b/internal/use-case/main-use-case/device-order/case.go @@ -6,6 +6,7 @@ import ( e "simrs-vx/internal/domain/main-entities/device-order" + ud "simrs-vx/internal/use-case/main-use-case/doctor" ue "simrs-vx/internal/use-case/main-use-case/encounter" erc "simrs-vx/internal/domain/references/common" @@ -45,6 +46,26 @@ func Create(input e.CreateDto) (*d.Data, error) { return errors.New("encounter is already done") } + if data.IsCompleted() { + return errors.New("data already completed") + } + + if !input.AuthInfo.IsDoctor() { + event.Status = "failed" + event.ErrInfo = pl.ErrorInfo{ + Code: "auth-forbidden", + Detail: "user position is not allowed", + Raw: errors.New("authentication failed"), + } + return pl.SetLogError(&event, input) + } + + doctor_id, err := ud.GetIdByUserId(&input.AuthInfo.User_Id, &event, tx) + if err != nil { + return err + } + input.Doctor_Id = doctor_id + if resData, err := CreateData(input, &event, tx); err != nil { return err } else { @@ -207,6 +228,32 @@ func Update(input e.UpdateDto) (*d.Data, error) { return err } + if !input.AuthInfo.IsDoctor() { + event.Status = "failed" + event.ErrInfo = pl.ErrorInfo{ + Code: "auth-forbidden", + Detail: "user position is not allowed", + Raw: errors.New("authentication failed"), + } + return pl.SetLogError(&event, input) + } + + doctor_id, err := ud.GetIdByUserId(&input.AuthInfo.User_Id, &event, tx) + if err != nil { + return err + } + if !data.IsSameDoctor(doctor_id) { + event.Status = "failed" + event.ErrInfo = pl.ErrorInfo{ + Code: "auth-forbidden", + Detail: "doctor is not the same as the data", + Raw: errors.New("authentication failed"), + } + return pl.SetLogError(&event, input) + } + + input.Doctor_Id = doctor_id + if err := UpdateData(input, data, &event, tx); err != nil { return err } diff --git a/internal/use-case/main-use-case/device-order/helper.go b/internal/use-case/main-use-case/device-order/helper.go index 84a49fa2..f64e8886 100644 --- a/internal/use-case/main-use-case/device-order/helper.go +++ b/internal/use-case/main-use-case/device-order/helper.go @@ -19,4 +19,5 @@ func setData[T *e.CreateDto | *e.UpdateDto](input T, data *e.DeviceOrder) { data.Encounter_Id = inputSrc.Encounter_Id data.Status_Code = inputSrc.Status_Code + data.Doctor_Id = inputSrc.Doctor_Id } diff --git a/internal/use-case/main-use-case/device-order/lib.go b/internal/use-case/main-use-case/device-order/lib.go index 20f344c3..d8a9c8f3 100644 --- a/internal/use-case/main-use-case/device-order/lib.go +++ b/internal/use-case/main-use-case/device-order/lib.go @@ -2,6 +2,8 @@ package deviceorder import ( e "simrs-vx/internal/domain/main-entities/device-order" + + plh "simrs-vx/pkg/lib-helper" pl "simrs-vx/pkg/logger" pu "simrs-vx/pkg/use-case-helper" @@ -24,13 +26,7 @@ func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.DeviceO } if err := tx.Create(&data).Error; err != nil { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-create-fail", - Detail: "Database insert failed", - Raw: err, - } - return nil, pl.SetLogError(event, input) + return nil, plh.HandleCreateError(input, event, err) } pl.SetLogInfo(event, nil, "complete") diff --git a/internal/use-case/main-use-case/device/lib.go b/internal/use-case/main-use-case/device/lib.go index af8f9f80..c606b645 100644 --- a/internal/use-case/main-use-case/device/lib.go +++ b/internal/use-case/main-use-case/device/lib.go @@ -2,6 +2,8 @@ package device import ( e "simrs-vx/internal/domain/main-entities/device" + + plh "simrs-vx/pkg/lib-helper" pl "simrs-vx/pkg/logger" pu "simrs-vx/pkg/use-case-helper" @@ -24,13 +26,7 @@ func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.Device, } if err := tx.Create(&data).Error; err != nil { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-create-fail", - Detail: "Database insert failed", - Raw: err, - } - return nil, pl.SetLogError(event, input) + return nil, plh.HandleCreateError(input, event, err) } pl.SetLogInfo(event, nil, "complete") @@ -57,6 +53,8 @@ func ReadListData(input e.ReadListDto, event *pl.Event, dbx ...*gorm.DB) ([]e.De } } + plh.SearchCodeOrName(input.Search, tx) + tx = tx. Model(&e.Device{}). Scopes(gh.Filter(input.FilterDto)). diff --git a/internal/use-case/main-use-case/diagnose-src/lib.go b/internal/use-case/main-use-case/diagnose-src/lib.go index 1377c682..c572a35d 100644 --- a/internal/use-case/main-use-case/diagnose-src/lib.go +++ b/internal/use-case/main-use-case/diagnose-src/lib.go @@ -2,6 +2,8 @@ package diagnosesrc import ( e "simrs-vx/internal/domain/main-entities/diagnose-src" + + plh "simrs-vx/pkg/lib-helper" pl "simrs-vx/pkg/logger" pu "simrs-vx/pkg/use-case-helper" @@ -24,13 +26,7 @@ func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.Diagnos } if err := tx.Create(&data).Error; err != nil { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-create-fail", - Detail: "Database insert failed", - Raw: err, - } - return nil, pl.SetLogError(event, input) + return nil, plh.HandleCreateError(input, event, err) } pl.SetLogInfo(event, nil, "complete") diff --git a/internal/use-case/main-use-case/district/lib.go b/internal/use-case/main-use-case/district/lib.go index 6911f4b3..26f6cf07 100644 --- a/internal/use-case/main-use-case/district/lib.go +++ b/internal/use-case/main-use-case/district/lib.go @@ -2,6 +2,8 @@ package district import ( e "simrs-vx/internal/domain/main-entities/district" + + plh "simrs-vx/pkg/lib-helper" pl "simrs-vx/pkg/logger" pu "simrs-vx/pkg/use-case-helper" @@ -24,13 +26,7 @@ func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.Distric } if err := tx.Create(&data).Error; err != nil { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-create-fail", - Detail: "Database insert failed", - Raw: err, - } - return nil, pl.SetLogError(event, input) + return nil, plh.HandleCreateError(input, event, err) } pl.SetLogInfo(event, nil, "complete") diff --git a/internal/use-case/main-use-case/division-position/lib.go b/internal/use-case/main-use-case/division-position/lib.go index 6106f478..322e5593 100644 --- a/internal/use-case/main-use-case/division-position/lib.go +++ b/internal/use-case/main-use-case/division-position/lib.go @@ -2,6 +2,8 @@ package divisionposition import ( e "simrs-vx/internal/domain/main-entities/division-position" + + plh "simrs-vx/pkg/lib-helper" pl "simrs-vx/pkg/logger" pu "simrs-vx/pkg/use-case-helper" @@ -24,13 +26,7 @@ func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.Divisio } if err := tx.Create(&data).Error; err != nil { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-create-fail", - Detail: "Database insert failed", - Raw: err, - } - return nil, pl.SetLogError(event, input) + return nil, plh.HandleCreateError(input, event, err) } pl.SetLogInfo(event, nil, "complete") diff --git a/internal/use-case/main-use-case/division/case.go b/internal/use-case/main-use-case/division/case.go index bf1b94fe..cf37c36c 100644 --- a/internal/use-case/main-use-case/division/case.go +++ b/internal/use-case/main-use-case/division/case.go @@ -87,6 +87,9 @@ func ReadList(input e.ReadListDto) (*d.Data, error) { return err } + if len(input.Includes) > 0 { + input.Preloads = pu.GetPreloads(input.Includes) + } if dataList, metaList, err = ReadListData(input, &event, tx); err != nil { return err } diff --git a/internal/use-case/main-use-case/division/lib.go b/internal/use-case/main-use-case/division/lib.go index 64c58004..25ccd22f 100644 --- a/internal/use-case/main-use-case/division/lib.go +++ b/internal/use-case/main-use-case/division/lib.go @@ -2,6 +2,8 @@ package division import ( e "simrs-vx/internal/domain/main-entities/division" + + plh "simrs-vx/pkg/lib-helper" pl "simrs-vx/pkg/logger" pu "simrs-vx/pkg/use-case-helper" @@ -24,13 +26,7 @@ func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.Divisio } if err := tx.Create(&data).Error; err != nil { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-create-fail", - Detail: "Database insert failed", - Raw: err, - } - return nil, pl.SetLogError(event, input) + return nil, plh.HandleCreateError(input, event, err) } pl.SetLogInfo(event, nil, "complete") @@ -51,9 +47,17 @@ func ReadListData(input e.ReadListDto, event *pl.Event, dbx ...*gorm.DB) ([]e.Di tx = dg.I } + if len(input.Preloads) > 0 { + for _, preload := range input.Preloads { + tx = tx.Preload(preload) + } + } + + plh.SearchCodeOrName(input.Search, tx) + tx = tx. Model(&e.Division{}). - Scopes(gh.Filter(input)). + Scopes(gh.Filter(input.FilterDto)). Count(&count). Scopes(gh.Paginate(input, &pagination)). Order("\"CreatedAt\" DESC") diff --git a/internal/use-case/main-use-case/doctor-fee/lib.go b/internal/use-case/main-use-case/doctor-fee/lib.go index 2f96d1ab..17c8a86d 100644 --- a/internal/use-case/main-use-case/doctor-fee/lib.go +++ b/internal/use-case/main-use-case/doctor-fee/lib.go @@ -2,6 +2,8 @@ package doctorfee import ( e "simrs-vx/internal/domain/main-entities/doctor-fee" + + plh "simrs-vx/pkg/lib-helper" pl "simrs-vx/pkg/logger" pu "simrs-vx/pkg/use-case-helper" @@ -24,13 +26,7 @@ func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.DoctorF } if err := tx.Create(&data).Error; err != nil { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-create-fail", - Detail: "Database insert failed", - Raw: err, - } - return nil, pl.SetLogError(event, input) + return nil, plh.HandleCreateError(input, event, err) } pl.SetLogInfo(event, nil, "complete") diff --git a/internal/use-case/main-use-case/doctor/lib.go b/internal/use-case/main-use-case/doctor/lib.go index 432254fe..859a2bd6 100644 --- a/internal/use-case/main-use-case/doctor/lib.go +++ b/internal/use-case/main-use-case/doctor/lib.go @@ -2,6 +2,8 @@ package doctor import ( e "simrs-vx/internal/domain/main-entities/doctor" + + plh "simrs-vx/pkg/lib-helper" pl "simrs-vx/pkg/logger" pu "simrs-vx/pkg/use-case-helper" @@ -24,13 +26,7 @@ func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.Doctor, } if err := tx.Create(&data).Error; err != nil { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-create-fail", - Detail: "Database insert failed", - Raw: err, - } - return nil, pl.SetLogError(event, input) + return nil, plh.HandleCreateError(input, event, err) } pl.SetLogInfo(event, nil, "complete") diff --git a/internal/use-case/main-use-case/emergency/lib.go b/internal/use-case/main-use-case/emergency/lib.go index a1762d3e..414deba7 100644 --- a/internal/use-case/main-use-case/emergency/lib.go +++ b/internal/use-case/main-use-case/emergency/lib.go @@ -2,6 +2,8 @@ package emergency import ( e "simrs-vx/internal/domain/main-entities/emergency" + + plh "simrs-vx/pkg/lib-helper" pl "simrs-vx/pkg/logger" pu "simrs-vx/pkg/use-case-helper" @@ -24,13 +26,7 @@ func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.Emergen } if err := tx.Create(&data).Error; err != nil { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-create-fail", - Detail: "Database insert failed", - Raw: err, - } - return nil, pl.SetLogError(event, input) + return nil, plh.HandleCreateError(input, event, err) } pl.SetLogInfo(event, nil, "complete") diff --git a/internal/use-case/main-use-case/employee/lib.go b/internal/use-case/main-use-case/employee/lib.go index 594ce040..020328b5 100644 --- a/internal/use-case/main-use-case/employee/lib.go +++ b/internal/use-case/main-use-case/employee/lib.go @@ -2,6 +2,8 @@ package employee import ( e "simrs-vx/internal/domain/main-entities/employee" + + plh "simrs-vx/pkg/lib-helper" pl "simrs-vx/pkg/logger" pu "simrs-vx/pkg/use-case-helper" @@ -25,13 +27,7 @@ func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.Employe } if err := tx.Create(&data).Error; err != nil { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-create-fail", - Detail: "Database insert failed", - Raw: err, - } - return nil, pl.SetLogError(event, input) + return nil, plh.HandleCreateError(input, event, err) } pl.SetLogInfo(event, nil, "complete") diff --git a/internal/use-case/main-use-case/encounter/lib.go b/internal/use-case/main-use-case/encounter/lib.go index 108b298a..bfc62fdc 100644 --- a/internal/use-case/main-use-case/encounter/lib.go +++ b/internal/use-case/main-use-case/encounter/lib.go @@ -2,6 +2,8 @@ package encounter import ( e "simrs-vx/internal/domain/main-entities/encounter" + + plh "simrs-vx/pkg/lib-helper" pl "simrs-vx/pkg/logger" pu "simrs-vx/pkg/use-case-helper" @@ -24,13 +26,7 @@ func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.Encount } if err := tx.Create(&data).Error; err != nil { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-create-fail", - Detail: "Database insert failed", - Raw: err, - } - return nil, pl.SetLogError(event, input) + return nil, plh.HandleCreateError(input, event, err) } pl.SetLogInfo(event, nil, "complete") diff --git a/internal/use-case/main-use-case/ethnic/lib.go b/internal/use-case/main-use-case/ethnic/lib.go index 353618ef..716da183 100644 --- a/internal/use-case/main-use-case/ethnic/lib.go +++ b/internal/use-case/main-use-case/ethnic/lib.go @@ -2,6 +2,8 @@ package ethnic import ( e "simrs-vx/internal/domain/main-entities/ethnic" + + plh "simrs-vx/pkg/lib-helper" pl "simrs-vx/pkg/logger" pu "simrs-vx/pkg/use-case-helper" @@ -24,13 +26,7 @@ func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.Ethnic, } if err := tx.Create(&data).Error; err != nil { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-create-fail", - Detail: "Database insert failed", - Raw: err, - } - return nil, pl.SetLogError(event, input) + return nil, plh.HandleCreateError(input, event, err) } pl.SetLogInfo(event, nil, "complete") @@ -51,6 +47,8 @@ func ReadListData(input e.ReadListDto, event *pl.Event, dbx ...*gorm.DB) ([]e.Et tx = dg.I } + plh.SearchCodeOrName(input.Search, tx) + tx = tx. Model(&e.Ethnic{}). Scopes(gh.Filter(input)). diff --git a/internal/use-case/main-use-case/infra/lib.go b/internal/use-case/main-use-case/infra/lib.go index 56e528fb..656aec39 100644 --- a/internal/use-case/main-use-case/infra/lib.go +++ b/internal/use-case/main-use-case/infra/lib.go @@ -2,6 +2,8 @@ package infra import ( e "simrs-vx/internal/domain/main-entities/infra" + + plh "simrs-vx/pkg/lib-helper" pl "simrs-vx/pkg/logger" pu "simrs-vx/pkg/use-case-helper" @@ -24,13 +26,7 @@ func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.Infra, } if err := tx.Create(&data).Error; err != nil { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-create-fail", - Detail: "Database insert failed", - Raw: err, - } - return nil, pl.SetLogError(event, input) + return nil, plh.HandleCreateError(input, event, err) } pl.SetLogInfo(event, nil, "complete") @@ -57,6 +53,8 @@ func ReadListData(input e.ReadListDto, event *pl.Event, dbx ...*gorm.DB) ([]e.In } } + plh.SearchCodeOrName(input.Search, tx) + tx = tx. Model(&e.Infra{}). Scopes(gh.Filter(input.FilterDto)). diff --git a/internal/use-case/main-use-case/inpatient/lib.go b/internal/use-case/main-use-case/inpatient/lib.go index f7b49d8a..f70b2add 100644 --- a/internal/use-case/main-use-case/inpatient/lib.go +++ b/internal/use-case/main-use-case/inpatient/lib.go @@ -2,6 +2,8 @@ package inpatient import ( e "simrs-vx/internal/domain/main-entities/inpatient" + + plh "simrs-vx/pkg/lib-helper" pl "simrs-vx/pkg/logger" pu "simrs-vx/pkg/use-case-helper" @@ -24,13 +26,7 @@ func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.Inpatie } if err := tx.Create(&data).Error; err != nil { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-create-fail", - Detail: "Database insert failed", - Raw: err, - } - return nil, pl.SetLogError(event, input) + return nil, plh.HandleCreateError(input, event, err) } pl.SetLogInfo(event, nil, "complete") diff --git a/internal/use-case/main-use-case/installation/lib.go b/internal/use-case/main-use-case/installation/lib.go index 5fa5bbf9..c8e3d2aa 100644 --- a/internal/use-case/main-use-case/installation/lib.go +++ b/internal/use-case/main-use-case/installation/lib.go @@ -2,6 +2,8 @@ package installation import ( e "simrs-vx/internal/domain/main-entities/installation" + + plh "simrs-vx/pkg/lib-helper" pl "simrs-vx/pkg/logger" pu "simrs-vx/pkg/use-case-helper" @@ -24,13 +26,7 @@ func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.Install } if err := tx.Create(&data).Error; err != nil { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-create-fail", - Detail: "Database insert failed", - Raw: err, - } - return nil, pl.SetLogError(event, input) + return nil, plh.HandleCreateError(input, event, err) } pl.SetLogInfo(event, nil, "complete") diff --git a/internal/use-case/main-use-case/insurance-company/lib.go b/internal/use-case/main-use-case/insurance-company/lib.go index 95d004b5..4dc5bb6f 100644 --- a/internal/use-case/main-use-case/insurance-company/lib.go +++ b/internal/use-case/main-use-case/insurance-company/lib.go @@ -2,6 +2,8 @@ package insurancecompany import ( e "simrs-vx/internal/domain/main-entities/insurance-company" + + plh "simrs-vx/pkg/lib-helper" pl "simrs-vx/pkg/logger" pu "simrs-vx/pkg/use-case-helper" @@ -24,13 +26,7 @@ func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.Insuran } if err := tx.Create(&data).Error; err != nil { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-create-fail", - Detail: "Database insert failed", - Raw: err, - } - return nil, pl.SetLogError(event, input) + return nil, plh.HandleCreateError(input, event, err) } pl.SetLogInfo(event, nil, "complete") diff --git a/internal/use-case/main-use-case/item-price/lib.go b/internal/use-case/main-use-case/item-price/lib.go index 6e3a8d5c..32b387ea 100644 --- a/internal/use-case/main-use-case/item-price/lib.go +++ b/internal/use-case/main-use-case/item-price/lib.go @@ -2,6 +2,8 @@ package itemprice import ( e "simrs-vx/internal/domain/main-entities/item-price" + + plh "simrs-vx/pkg/lib-helper" pl "simrs-vx/pkg/logger" pu "simrs-vx/pkg/use-case-helper" @@ -24,13 +26,7 @@ func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.ItemPri } if err := tx.Create(&data).Error; err != nil { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-create-fail", - Detail: "Database insert failed", - Raw: err, - } - return nil, pl.SetLogError(event, input) + return nil, plh.HandleCreateError(input, event, err) } pl.SetLogInfo(event, nil, "complete") diff --git a/internal/use-case/main-use-case/item/lib.go b/internal/use-case/main-use-case/item/lib.go index ed1eb3b8..c5b937ce 100644 --- a/internal/use-case/main-use-case/item/lib.go +++ b/internal/use-case/main-use-case/item/lib.go @@ -2,6 +2,8 @@ package item import ( e "simrs-vx/internal/domain/main-entities/item" + + plh "simrs-vx/pkg/lib-helper" pl "simrs-vx/pkg/logger" pu "simrs-vx/pkg/use-case-helper" @@ -24,13 +26,7 @@ func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.Item, e } if err := tx.Create(&data).Error; err != nil { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-create-fail", - Detail: "Database insert failed", - Raw: err, - } - return nil, pl.SetLogError(event, input) + return nil, plh.HandleCreateError(input, event, err) } pl.SetLogInfo(event, nil, "complete") diff --git a/internal/use-case/main-use-case/laborant/lib.go b/internal/use-case/main-use-case/laborant/lib.go index 0802f601..a02889bb 100644 --- a/internal/use-case/main-use-case/laborant/lib.go +++ b/internal/use-case/main-use-case/laborant/lib.go @@ -2,6 +2,8 @@ package laborant import ( e "simrs-vx/internal/domain/main-entities/laborant" + + plh "simrs-vx/pkg/lib-helper" pl "simrs-vx/pkg/logger" pu "simrs-vx/pkg/use-case-helper" @@ -24,13 +26,7 @@ func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.Laboran } if err := tx.Create(&data).Error; err != nil { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-create-fail", - Detail: "Database insert failed", - Raw: err, - } - return nil, pl.SetLogError(event, input) + return nil, plh.HandleCreateError(input, event, err) } pl.SetLogInfo(event, nil, "complete") diff --git a/internal/use-case/main-use-case/language/lib.go b/internal/use-case/main-use-case/language/lib.go index d44689d4..24544b3f 100644 --- a/internal/use-case/main-use-case/language/lib.go +++ b/internal/use-case/main-use-case/language/lib.go @@ -2,6 +2,8 @@ package language import ( e "simrs-vx/internal/domain/main-entities/language" + + plh "simrs-vx/pkg/lib-helper" pl "simrs-vx/pkg/logger" pu "simrs-vx/pkg/use-case-helper" @@ -24,13 +26,7 @@ func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.Languag } if err := tx.Create(&data).Error; err != nil { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-create-fail", - Detail: "Database insert failed", - Raw: err, - } - return nil, pl.SetLogError(event, input) + return nil, plh.HandleCreateError(input, event, err) } pl.SetLogInfo(event, nil, "complete") @@ -51,6 +47,8 @@ func ReadListData(input e.ReadListDto, event *pl.Event, dbx ...*gorm.DB) ([]e.La tx = dg.I } + plh.SearchCodeOrName(input.Search, tx) + tx = tx. Model(&e.Language{}). Scopes(gh.Filter(input)). diff --git a/internal/use-case/main-use-case/material-order-item/lib.go b/internal/use-case/main-use-case/material-order-item/lib.go index 4daf147c..121d2360 100644 --- a/internal/use-case/main-use-case/material-order-item/lib.go +++ b/internal/use-case/main-use-case/material-order-item/lib.go @@ -2,6 +2,8 @@ package materialorderitem import ( e "simrs-vx/internal/domain/main-entities/material-order-item" + + plh "simrs-vx/pkg/lib-helper" pl "simrs-vx/pkg/logger" pu "simrs-vx/pkg/use-case-helper" @@ -24,13 +26,7 @@ func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.Materia } if err := tx.Create(&data).Error; err != nil { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-create-fail", - Detail: "Database insert failed", - Raw: err, - } - return nil, pl.SetLogError(event, input) + return nil, plh.HandleCreateError(input, event, err) } pl.SetLogInfo(event, nil, "complete") diff --git a/internal/use-case/main-use-case/material-order/case.go b/internal/use-case/main-use-case/material-order/case.go index bed63695..af93924c 100644 --- a/internal/use-case/main-use-case/material-order/case.go +++ b/internal/use-case/main-use-case/material-order/case.go @@ -6,6 +6,7 @@ import ( e "simrs-vx/internal/domain/main-entities/material-order" + ud "simrs-vx/internal/use-case/main-use-case/doctor" ue "simrs-vx/internal/use-case/main-use-case/encounter" erc "simrs-vx/internal/domain/references/common" @@ -45,6 +46,22 @@ func Create(input e.CreateDto) (*d.Data, error) { return errors.New("encounter is already done") } + if !input.AuthInfo.IsDoctor() { + event.Status = "failed" + event.ErrInfo = pl.ErrorInfo{ + Code: "auth-forbidden", + Detail: "user position is not allowed", + Raw: errors.New("authentication failed"), + } + return pl.SetLogError(&event, input) + } + + doctor_id, err := ud.GetIdByUserId(&input.AuthInfo.User_Id, &event, tx) + if err != nil { + return err + } + input.Doctor_Id = doctor_id + if resData, err := CreateData(input, &event, tx); err != nil { return err } else { @@ -208,6 +225,33 @@ func Update(input e.UpdateDto) (*d.Data, error) { return err } + if !input.AuthInfo.IsDoctor() { + event.Status = "failed" + event.ErrInfo = pl.ErrorInfo{ + Code: "auth-forbidden", + Detail: "user position is not allowed", + Raw: errors.New("authentication failed"), + } + return pl.SetLogError(&event, input) + } + + doctor_id, err := ud.GetIdByUserId(&input.AuthInfo.User_Id, &event, tx) + if err != nil { + return err + } + + if !data.IsSameDoctor(doctor_id) { + event.Status = "failed" + event.ErrInfo = pl.ErrorInfo{ + Code: "auth-forbidden", + Detail: "doctor is not the same as the data", + Raw: errors.New("authentication failed"), + } + return pl.SetLogError(&event, input) + } + + input.Doctor_Id = doctor_id + if err := UpdateData(input, data, &event, tx); err != nil { return err } diff --git a/internal/use-case/main-use-case/material-order/helper.go b/internal/use-case/main-use-case/material-order/helper.go index f5f67b1a..c3a0fdde 100644 --- a/internal/use-case/main-use-case/material-order/helper.go +++ b/internal/use-case/main-use-case/material-order/helper.go @@ -19,4 +19,5 @@ func setData[T *e.CreateDto | *e.UpdateDto](input T, data *e.MaterialOrder) { data.Encounter_Id = inputSrc.Encounter_Id data.Status_Code = inputSrc.Status_Code + data.Doctor_Id = inputSrc.Doctor_Id } diff --git a/internal/use-case/main-use-case/material-order/lib.go b/internal/use-case/main-use-case/material-order/lib.go index 135aaf54..333628c2 100644 --- a/internal/use-case/main-use-case/material-order/lib.go +++ b/internal/use-case/main-use-case/material-order/lib.go @@ -2,6 +2,8 @@ package materialorder import ( e "simrs-vx/internal/domain/main-entities/material-order" + + plh "simrs-vx/pkg/lib-helper" pl "simrs-vx/pkg/logger" pu "simrs-vx/pkg/use-case-helper" @@ -24,13 +26,7 @@ func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.Materia } if err := tx.Create(&data).Error; err != nil { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-create-fail", - Detail: "Database insert failed", - Raw: err, - } - return nil, pl.SetLogError(event, input) + return nil, plh.HandleCreateError(input, event, err) } pl.SetLogInfo(event, nil, "complete") diff --git a/internal/use-case/main-use-case/material/lib.go b/internal/use-case/main-use-case/material/lib.go index c74f7b6c..b4b32440 100644 --- a/internal/use-case/main-use-case/material/lib.go +++ b/internal/use-case/main-use-case/material/lib.go @@ -2,6 +2,8 @@ package material import ( e "simrs-vx/internal/domain/main-entities/material" + + plh "simrs-vx/pkg/lib-helper" pl "simrs-vx/pkg/logger" pu "simrs-vx/pkg/use-case-helper" @@ -24,13 +26,7 @@ func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.Materia } if err := tx.Create(&data).Error; err != nil { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-create-fail", - Detail: "Database insert failed", - Raw: err, - } - return nil, pl.SetLogError(event, input) + return nil, plh.HandleCreateError(input, event, err) } pl.SetLogInfo(event, nil, "complete") @@ -57,6 +53,8 @@ func ReadListData(input e.ReadListDto, event *pl.Event, dbx ...*gorm.DB) ([]e.Ma } } + plh.SearchCodeOrName(input.Search, tx) + tx = tx. Model(&e.Material{}). Scopes(gh.Filter(input.FilterDto)). diff --git a/internal/use-case/main-use-case/mcu-order-item/lib.go b/internal/use-case/main-use-case/mcu-order-item/lib.go index 40ebf33d..3fab2d62 100644 --- a/internal/use-case/main-use-case/mcu-order-item/lib.go +++ b/internal/use-case/main-use-case/mcu-order-item/lib.go @@ -2,6 +2,8 @@ package mcuorderitem import ( e "simrs-vx/internal/domain/main-entities/mcu-order-item" + + plh "simrs-vx/pkg/lib-helper" pl "simrs-vx/pkg/logger" pu "simrs-vx/pkg/use-case-helper" @@ -24,13 +26,7 @@ func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.McuOrde } if err := tx.Create(&data).Error; err != nil { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-create-fail", - Detail: "Database insert failed", - Raw: err, - } - return nil, pl.SetLogError(event, input) + return nil, plh.HandleCreateError(input, event, err) } pl.SetLogInfo(event, nil, "complete") diff --git a/internal/use-case/main-use-case/mcu-order-sub-item/lib.go b/internal/use-case/main-use-case/mcu-order-sub-item/lib.go index edfee9cd..45b45645 100644 --- a/internal/use-case/main-use-case/mcu-order-sub-item/lib.go +++ b/internal/use-case/main-use-case/mcu-order-sub-item/lib.go @@ -2,6 +2,8 @@ package mcuordersubitem import ( e "simrs-vx/internal/domain/main-entities/mcu-order-sub-item" + + plh "simrs-vx/pkg/lib-helper" pl "simrs-vx/pkg/logger" pu "simrs-vx/pkg/use-case-helper" @@ -24,13 +26,7 @@ func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.McuOrde } if err := tx.Create(&data).Error; err != nil { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-create-fail", - Detail: "Database insert failed", - Raw: err, - } - return nil, pl.SetLogError(event, input) + return nil, plh.HandleCreateError(input, event, err) } pl.SetLogInfo(event, nil, "complete") diff --git a/internal/use-case/main-use-case/mcu-order/lib.go b/internal/use-case/main-use-case/mcu-order/lib.go index 048e6129..b269e559 100644 --- a/internal/use-case/main-use-case/mcu-order/lib.go +++ b/internal/use-case/main-use-case/mcu-order/lib.go @@ -2,6 +2,8 @@ package mcuorder import ( e "simrs-vx/internal/domain/main-entities/mcu-order" + + plh "simrs-vx/pkg/lib-helper" pl "simrs-vx/pkg/logger" pu "simrs-vx/pkg/use-case-helper" @@ -24,13 +26,7 @@ func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.McuOrde } if err := tx.Create(&data).Error; err != nil { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-create-fail", - Detail: "Database insert failed", - Raw: err, - } - return nil, pl.SetLogError(event, input) + return nil, plh.HandleCreateError(input, event, err) } pl.SetLogInfo(event, nil, "complete") diff --git a/internal/use-case/main-use-case/mcu-src-category/lib.go b/internal/use-case/main-use-case/mcu-src-category/lib.go index aea54986..aef1fcf5 100644 --- a/internal/use-case/main-use-case/mcu-src-category/lib.go +++ b/internal/use-case/main-use-case/mcu-src-category/lib.go @@ -2,6 +2,8 @@ package mcusrccategory import ( e "simrs-vx/internal/domain/main-entities/mcu-src-category" + + plh "simrs-vx/pkg/lib-helper" pl "simrs-vx/pkg/logger" pu "simrs-vx/pkg/use-case-helper" @@ -24,13 +26,7 @@ func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.McuSrcC } if err := tx.Create(&data).Error; err != nil { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-create-fail", - Detail: "Database insert failed", - Raw: err, - } - return nil, pl.SetLogError(event, input) + return nil, plh.HandleCreateError(input, event, err) } pl.SetLogInfo(event, nil, "complete") diff --git a/internal/use-case/main-use-case/mcu-src/lib.go b/internal/use-case/main-use-case/mcu-src/lib.go index 36a1a604..246c4ccf 100644 --- a/internal/use-case/main-use-case/mcu-src/lib.go +++ b/internal/use-case/main-use-case/mcu-src/lib.go @@ -2,6 +2,8 @@ package mcusrc import ( e "simrs-vx/internal/domain/main-entities/mcu-src" + + plh "simrs-vx/pkg/lib-helper" pl "simrs-vx/pkg/logger" pu "simrs-vx/pkg/use-case-helper" @@ -24,13 +26,7 @@ func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.McuSrc, } if err := tx.Create(&data).Error; err != nil { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-create-fail", - Detail: "Database insert failed", - Raw: err, - } - return nil, pl.SetLogError(event, input) + return nil, plh.HandleCreateError(input, event, err) } pl.SetLogInfo(event, nil, "complete") @@ -57,6 +53,8 @@ func ReadListData(input e.ReadListDto, event *pl.Event, dbx ...*gorm.DB) ([]e.Mc } } + plh.SearchCodeOrName(input.Search, tx) + tx = tx. Model(&e.McuSrc{}). Scopes(gh.Filter(input.FilterDto)). diff --git a/internal/use-case/main-use-case/mcu-sub-src/lib.go b/internal/use-case/main-use-case/mcu-sub-src/lib.go index 711dabdd..43433380 100644 --- a/internal/use-case/main-use-case/mcu-sub-src/lib.go +++ b/internal/use-case/main-use-case/mcu-sub-src/lib.go @@ -2,6 +2,8 @@ package mcusubsrc import ( e "simrs-vx/internal/domain/main-entities/mcu-sub-src" + + plh "simrs-vx/pkg/lib-helper" pl "simrs-vx/pkg/logger" pu "simrs-vx/pkg/use-case-helper" @@ -24,13 +26,7 @@ func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.McuSubS } if err := tx.Create(&data).Error; err != nil { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-create-fail", - Detail: "Database insert failed", - Raw: err, - } - return nil, pl.SetLogError(event, input) + return nil, plh.HandleCreateError(input, event, err) } pl.SetLogInfo(event, nil, "complete") @@ -57,6 +53,8 @@ func ReadListData(input e.ReadListDto, event *pl.Event, dbx ...*gorm.DB) ([]e.Mc } } + plh.SearchCodeOrName(input.Search, tx) + tx = tx. Model(&e.McuSubSrc{}). Scopes(gh.Filter(input.FilterDto)). diff --git a/internal/use-case/main-use-case/medical-action-src-item/lib.go b/internal/use-case/main-use-case/medical-action-src-item/lib.go index 50f7cecd..20fc526d 100644 --- a/internal/use-case/main-use-case/medical-action-src-item/lib.go +++ b/internal/use-case/main-use-case/medical-action-src-item/lib.go @@ -2,6 +2,8 @@ package medicalactionsrcitem import ( e "simrs-vx/internal/domain/main-entities/medical-action-src-item" + + plh "simrs-vx/pkg/lib-helper" pl "simrs-vx/pkg/logger" pu "simrs-vx/pkg/use-case-helper" @@ -24,13 +26,7 @@ func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.Medical } if err := tx.Create(&data).Error; err != nil { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-create-fail", - Detail: "Database insert failed", - Raw: err, - } - return nil, pl.SetLogError(event, input) + return nil, plh.HandleCreateError(input, event, err) } pl.SetLogInfo(event, nil, "complete") diff --git a/internal/use-case/main-use-case/medical-action-src/lib.go b/internal/use-case/main-use-case/medical-action-src/lib.go index 1446b759..9bb9d762 100644 --- a/internal/use-case/main-use-case/medical-action-src/lib.go +++ b/internal/use-case/main-use-case/medical-action-src/lib.go @@ -2,6 +2,8 @@ package medicalactionsrc import ( e "simrs-vx/internal/domain/main-entities/medical-action-src" + + plh "simrs-vx/pkg/lib-helper" pl "simrs-vx/pkg/logger" pu "simrs-vx/pkg/use-case-helper" @@ -24,13 +26,7 @@ func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.Medical } if err := tx.Create(&data).Error; err != nil { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-create-fail", - Detail: "Database insert failed", - Raw: err, - } - return nil, pl.SetLogError(event, input) + return nil, plh.HandleCreateError(input, event, err) } pl.SetLogInfo(event, nil, "complete") @@ -57,6 +53,8 @@ func ReadListData(input e.ReadListDto, event *pl.Event, dbx ...*gorm.DB) ([]e.Me } } + plh.SearchCodeOrName(input.Search, tx) + tx = tx. Model(&e.MedicalActionSrc{}). Scopes(gh.Filter(input.FilterDto)). diff --git a/internal/use-case/main-use-case/medication-item-dist/lib.go b/internal/use-case/main-use-case/medication-item-dist/lib.go index f39b8753..dd732cd2 100644 --- a/internal/use-case/main-use-case/medication-item-dist/lib.go +++ b/internal/use-case/main-use-case/medication-item-dist/lib.go @@ -2,6 +2,8 @@ package medicationitemdist import ( e "simrs-vx/internal/domain/main-entities/medication-item-dist" + + plh "simrs-vx/pkg/lib-helper" pl "simrs-vx/pkg/logger" pu "simrs-vx/pkg/use-case-helper" @@ -24,13 +26,7 @@ func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.Medicat } if err := tx.Create(&data).Error; err != nil { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-create-fail", - Detail: "Database insert failed", - Raw: err, - } - return nil, pl.SetLogError(event, input) + return nil, plh.HandleCreateError(input, event, err) } pl.SetLogInfo(event, nil, "complete") diff --git a/internal/use-case/main-use-case/medication-item/lib.go b/internal/use-case/main-use-case/medication-item/lib.go index 3dbab755..c54e9db5 100644 --- a/internal/use-case/main-use-case/medication-item/lib.go +++ b/internal/use-case/main-use-case/medication-item/lib.go @@ -2,6 +2,8 @@ package medicationitem import ( e "simrs-vx/internal/domain/main-entities/medication-item" + + plh "simrs-vx/pkg/lib-helper" pl "simrs-vx/pkg/logger" pu "simrs-vx/pkg/use-case-helper" @@ -24,13 +26,7 @@ func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.Medicat } if err := tx.Create(&data).Error; err != nil { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-create-fail", - Detail: "Database insert failed", - Raw: err, - } - return nil, pl.SetLogError(event, input) + return nil, plh.HandleCreateError(input, event, err) } pl.SetLogInfo(event, nil, "complete") diff --git a/internal/use-case/main-use-case/medication/lib.go b/internal/use-case/main-use-case/medication/lib.go index 227eb27b..a420a677 100644 --- a/internal/use-case/main-use-case/medication/lib.go +++ b/internal/use-case/main-use-case/medication/lib.go @@ -2,6 +2,8 @@ package medication import ( e "simrs-vx/internal/domain/main-entities/medication" + + plh "simrs-vx/pkg/lib-helper" pl "simrs-vx/pkg/logger" pu "simrs-vx/pkg/use-case-helper" @@ -24,13 +26,7 @@ func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.Medicat } if err := tx.Create(&data).Error; err != nil { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-create-fail", - Detail: "Database insert failed", - Raw: err, - } - return nil, pl.SetLogError(event, input) + return nil, plh.HandleCreateError(input, event, err) } pl.SetLogInfo(event, nil, "complete") diff --git a/internal/use-case/main-use-case/medicine-group/lib.go b/internal/use-case/main-use-case/medicine-group/lib.go index f4288b03..ac269a85 100644 --- a/internal/use-case/main-use-case/medicine-group/lib.go +++ b/internal/use-case/main-use-case/medicine-group/lib.go @@ -2,6 +2,8 @@ package medicinegroup import ( e "simrs-vx/internal/domain/main-entities/medicine-group" + + plh "simrs-vx/pkg/lib-helper" pl "simrs-vx/pkg/logger" pu "simrs-vx/pkg/use-case-helper" @@ -24,13 +26,7 @@ func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.Medicin } if err := tx.Create(&data).Error; err != nil { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-create-fail", - Detail: "Database insert failed", - Raw: err, - } - return nil, pl.SetLogError(event, input) + return nil, plh.HandleCreateError(input, event, err) } pl.SetLogInfo(event, nil, "complete") diff --git a/internal/use-case/main-use-case/medicine-method/lib.go b/internal/use-case/main-use-case/medicine-method/lib.go index 828427bc..56907327 100644 --- a/internal/use-case/main-use-case/medicine-method/lib.go +++ b/internal/use-case/main-use-case/medicine-method/lib.go @@ -2,6 +2,8 @@ package medicinemethod import ( e "simrs-vx/internal/domain/main-entities/medicine-method" + + plh "simrs-vx/pkg/lib-helper" pl "simrs-vx/pkg/logger" pu "simrs-vx/pkg/use-case-helper" @@ -24,13 +26,7 @@ func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.Medicin } if err := tx.Create(&data).Error; err != nil { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-create-fail", - Detail: "Database insert failed", - Raw: err, - } - return nil, pl.SetLogError(event, input) + return nil, plh.HandleCreateError(input, event, err) } pl.SetLogInfo(event, nil, "complete") diff --git a/internal/use-case/main-use-case/medicine-mix-item/lib.go b/internal/use-case/main-use-case/medicine-mix-item/lib.go index fa85aab5..077b1346 100644 --- a/internal/use-case/main-use-case/medicine-mix-item/lib.go +++ b/internal/use-case/main-use-case/medicine-mix-item/lib.go @@ -2,6 +2,8 @@ package medicinemixitem import ( e "simrs-vx/internal/domain/main-entities/medicine-mix-item" + + plh "simrs-vx/pkg/lib-helper" pl "simrs-vx/pkg/logger" pu "simrs-vx/pkg/use-case-helper" @@ -24,13 +26,7 @@ func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.Medicin } if err := tx.Create(&data).Error; err != nil { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-create-fail", - Detail: "Database insert failed", - Raw: err, - } - return nil, pl.SetLogError(event, input) + return nil, plh.HandleCreateError(input, event, err) } pl.SetLogInfo(event, nil, "complete") diff --git a/internal/use-case/main-use-case/medicine-mix/lib.go b/internal/use-case/main-use-case/medicine-mix/lib.go index 162399db..329ec556 100644 --- a/internal/use-case/main-use-case/medicine-mix/lib.go +++ b/internal/use-case/main-use-case/medicine-mix/lib.go @@ -2,6 +2,8 @@ package medicinemix import ( e "simrs-vx/internal/domain/main-entities/medicine-mix" + + plh "simrs-vx/pkg/lib-helper" pl "simrs-vx/pkg/logger" pu "simrs-vx/pkg/use-case-helper" @@ -24,13 +26,7 @@ func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.Medicin } if err := tx.Create(&data).Error; err != nil { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-create-fail", - Detail: "Database insert failed", - Raw: err, - } - return nil, pl.SetLogError(event, input) + return nil, plh.HandleCreateError(input, event, err) } pl.SetLogInfo(event, nil, "complete") diff --git a/internal/use-case/main-use-case/medicine/lib.go b/internal/use-case/main-use-case/medicine/lib.go index 40fe2c13..b4ea21f6 100644 --- a/internal/use-case/main-use-case/medicine/lib.go +++ b/internal/use-case/main-use-case/medicine/lib.go @@ -26,13 +26,7 @@ func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.Medicin } if err := tx.Create(&data).Error; err != nil { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-create-fail", - Detail: "Database insert failed", - Raw: err, - } - return nil, pl.SetLogError(event, input) + return nil, plh.HandleCreateError(input, event, err) } pl.SetLogInfo(event, nil, "complete") diff --git a/internal/use-case/main-use-case/nurse/lib.go b/internal/use-case/main-use-case/nurse/lib.go index adbd1b76..3d4465d6 100644 --- a/internal/use-case/main-use-case/nurse/lib.go +++ b/internal/use-case/main-use-case/nurse/lib.go @@ -2,6 +2,8 @@ package nurse import ( e "simrs-vx/internal/domain/main-entities/nurse" + + plh "simrs-vx/pkg/lib-helper" pl "simrs-vx/pkg/logger" pu "simrs-vx/pkg/use-case-helper" @@ -24,13 +26,7 @@ func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.Nurse, } if err := tx.Create(&data).Error; err != nil { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-create-fail", - Detail: "Database insert failed", - Raw: err, - } - return nil, pl.SetLogError(event, input) + return nil, plh.HandleCreateError(input, event, err) } pl.SetLogInfo(event, nil, "complete") diff --git a/internal/use-case/main-use-case/nutritionist/lib.go b/internal/use-case/main-use-case/nutritionist/lib.go index c9d219a3..89d96e94 100644 --- a/internal/use-case/main-use-case/nutritionist/lib.go +++ b/internal/use-case/main-use-case/nutritionist/lib.go @@ -2,6 +2,8 @@ package nutritionist import ( e "simrs-vx/internal/domain/main-entities/nutritionist" + + plh "simrs-vx/pkg/lib-helper" pl "simrs-vx/pkg/logger" pu "simrs-vx/pkg/use-case-helper" @@ -24,13 +26,7 @@ func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.Nutriti } if err := tx.Create(&data).Error; err != nil { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-create-fail", - Detail: "Database insert failed", - Raw: err, - } - return nil, pl.SetLogError(event, input) + return nil, plh.HandleCreateError(input, event, err) } pl.SetLogInfo(event, nil, "complete") diff --git a/internal/use-case/main-use-case/patient/lib.go b/internal/use-case/main-use-case/patient/lib.go index 590e732e..8f6148ee 100644 --- a/internal/use-case/main-use-case/patient/lib.go +++ b/internal/use-case/main-use-case/patient/lib.go @@ -2,6 +2,8 @@ package patient import ( e "simrs-vx/internal/domain/main-entities/patient" + + plh "simrs-vx/pkg/lib-helper" pl "simrs-vx/pkg/logger" pu "simrs-vx/pkg/use-case-helper" @@ -27,13 +29,7 @@ func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.Patient } if err := tx.Create(&data).Error; err != nil { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-create-fail", - Detail: "Database insert failed", - Raw: err, - } - return nil, pl.SetLogError(event, input) + return nil, plh.HandleCreateError(input, event, err) } pl.SetLogInfo(event, nil, "complete") diff --git a/internal/use-case/main-use-case/person-address/lib.go b/internal/use-case/main-use-case/person-address/lib.go index fa7484ad..d0a581bd 100644 --- a/internal/use-case/main-use-case/person-address/lib.go +++ b/internal/use-case/main-use-case/person-address/lib.go @@ -2,6 +2,8 @@ package personaddress import ( e "simrs-vx/internal/domain/main-entities/person-address" + + plh "simrs-vx/pkg/lib-helper" pl "simrs-vx/pkg/logger" pu "simrs-vx/pkg/use-case-helper" @@ -24,13 +26,7 @@ func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.PersonA } if err := tx.Create(&data).Error; err != nil { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-create-fail", - Detail: "Database insert failed", - Raw: err, - } - return nil, pl.SetLogError(event, input) + return nil, plh.HandleCreateError(input, event, err) } pl.SetLogInfo(event, nil, "complete") diff --git a/internal/use-case/main-use-case/person-contact/lib.go b/internal/use-case/main-use-case/person-contact/lib.go index 18c78dd3..034800a4 100644 --- a/internal/use-case/main-use-case/person-contact/lib.go +++ b/internal/use-case/main-use-case/person-contact/lib.go @@ -2,6 +2,8 @@ package personcontact import ( e "simrs-vx/internal/domain/main-entities/person-contact" + + plh "simrs-vx/pkg/lib-helper" pl "simrs-vx/pkg/logger" pu "simrs-vx/pkg/use-case-helper" @@ -24,13 +26,7 @@ func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.PersonC } if err := tx.Create(&data).Error; err != nil { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-create-fail", - Detail: "Database insert failed", - Raw: err, - } - return nil, pl.SetLogError(event, input) + return nil, plh.HandleCreateError(input, event, err) } pl.SetLogInfo(event, nil, "complete") diff --git a/internal/use-case/main-use-case/person-relative/lib.go b/internal/use-case/main-use-case/person-relative/lib.go index 44a75cda..28e12e2b 100644 --- a/internal/use-case/main-use-case/person-relative/lib.go +++ b/internal/use-case/main-use-case/person-relative/lib.go @@ -2,6 +2,8 @@ package personrelative import ( e "simrs-vx/internal/domain/main-entities/person-relative" + + plh "simrs-vx/pkg/lib-helper" pl "simrs-vx/pkg/logger" pu "simrs-vx/pkg/use-case-helper" @@ -24,13 +26,7 @@ func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.PersonR } if err := tx.Create(&data).Error; err != nil { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-create-fail", - Detail: "Database insert failed", - Raw: err, - } - return nil, pl.SetLogError(event, input) + return nil, plh.HandleCreateError(input, event, err) } pl.SetLogInfo(event, nil, "complete") diff --git a/internal/use-case/main-use-case/person/lib.go b/internal/use-case/main-use-case/person/lib.go index 42703287..f12c6fac 100644 --- a/internal/use-case/main-use-case/person/lib.go +++ b/internal/use-case/main-use-case/person/lib.go @@ -2,10 +2,13 @@ package person import ( "errors" + "strconv" + e "simrs-vx/internal/domain/main-entities/person" + + plh "simrs-vx/pkg/lib-helper" pl "simrs-vx/pkg/logger" pu "simrs-vx/pkg/use-case-helper" - "strconv" dg "github.com/karincake/apem/db-gorm-pg" d "github.com/karincake/dodol" @@ -27,13 +30,7 @@ func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.Person, } if err := tx.Create(&data).Error; err != nil { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-create-fail", - Detail: "Database insert failed", - Raw: err, - } - return nil, pl.SetLogError(event, input) + return nil, plh.HandleCreateError(input, event, err) } pl.SetLogInfo(event, nil, "complete") diff --git a/internal/use-case/main-use-case/pharmacist/lib.go b/internal/use-case/main-use-case/pharmacist/lib.go index 0038591a..6e7358cb 100644 --- a/internal/use-case/main-use-case/pharmacist/lib.go +++ b/internal/use-case/main-use-case/pharmacist/lib.go @@ -2,6 +2,8 @@ package pharmacist import ( e "simrs-vx/internal/domain/main-entities/pharmacist" + + plh "simrs-vx/pkg/lib-helper" pl "simrs-vx/pkg/logger" pu "simrs-vx/pkg/use-case-helper" @@ -24,13 +26,7 @@ func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.Pharmac } if err := tx.Create(&data).Error; err != nil { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-create-fail", - Detail: "Database insert failed", - Raw: err, - } - return nil, pl.SetLogError(event, input) + return nil, plh.HandleCreateError(input, event, err) } pl.SetLogInfo(event, nil, "complete") diff --git a/internal/use-case/main-use-case/pharmacy-company/lib.go b/internal/use-case/main-use-case/pharmacy-company/lib.go index 3fca529a..b0e9c146 100644 --- a/internal/use-case/main-use-case/pharmacy-company/lib.go +++ b/internal/use-case/main-use-case/pharmacy-company/lib.go @@ -2,6 +2,8 @@ package pharmacycompany import ( e "simrs-vx/internal/domain/main-entities/pharmacy-company" + + plh "simrs-vx/pkg/lib-helper" pl "simrs-vx/pkg/logger" pu "simrs-vx/pkg/use-case-helper" @@ -24,13 +26,7 @@ func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.Pharmac } if err := tx.Create(&data).Error; err != nil { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-create-fail", - Detail: "Database insert failed", - Raw: err, - } - return nil, pl.SetLogError(event, input) + return nil, plh.HandleCreateError(input, event, err) } pl.SetLogInfo(event, nil, "complete") diff --git a/internal/use-case/main-use-case/practice-schedule/lib.go b/internal/use-case/main-use-case/practice-schedule/lib.go index ae494b9d..3dd0fd69 100644 --- a/internal/use-case/main-use-case/practice-schedule/lib.go +++ b/internal/use-case/main-use-case/practice-schedule/lib.go @@ -2,6 +2,8 @@ package practiceschedule import ( e "simrs-vx/internal/domain/main-entities/practice-schedule" + + plh "simrs-vx/pkg/lib-helper" pl "simrs-vx/pkg/logger" pu "simrs-vx/pkg/use-case-helper" @@ -24,13 +26,7 @@ func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.Practic } if err := tx.Create(&data).Error; err != nil { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-create-fail", - Detail: "Database insert failed", - Raw: err, - } - return nil, pl.SetLogError(event, input) + return nil, plh.HandleCreateError(input, event, err) } pl.SetLogInfo(event, nil, "complete") diff --git a/internal/use-case/main-use-case/prescription-item/lib.go b/internal/use-case/main-use-case/prescription-item/lib.go index 70913046..83a8fca8 100644 --- a/internal/use-case/main-use-case/prescription-item/lib.go +++ b/internal/use-case/main-use-case/prescription-item/lib.go @@ -2,6 +2,8 @@ package prescriptionitem import ( e "simrs-vx/internal/domain/main-entities/prescription-item" + + plh "simrs-vx/pkg/lib-helper" pl "simrs-vx/pkg/logger" pu "simrs-vx/pkg/use-case-helper" @@ -24,13 +26,7 @@ func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.Prescri } if err := tx.Create(&data).Error; err != nil { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-create-fail", - Detail: "Database insert failed", - Raw: err, - } - return nil, pl.SetLogError(event, input) + return nil, plh.HandleCreateError(input, event, err) } pl.SetLogInfo(event, nil, "complete") diff --git a/internal/use-case/main-use-case/prescription/lib.go b/internal/use-case/main-use-case/prescription/lib.go index bff59916..af559fb8 100644 --- a/internal/use-case/main-use-case/prescription/lib.go +++ b/internal/use-case/main-use-case/prescription/lib.go @@ -2,6 +2,8 @@ package prescription import ( e "simrs-vx/internal/domain/main-entities/prescription" + + plh "simrs-vx/pkg/lib-helper" pl "simrs-vx/pkg/logger" pu "simrs-vx/pkg/use-case-helper" @@ -24,13 +26,7 @@ func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.Prescri } if err := tx.Create(&data).Error; err != nil { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-create-fail", - Detail: "Database insert failed", - Raw: err, - } - return nil, pl.SetLogError(event, input) + return nil, plh.HandleCreateError(input, event, err) } pl.SetLogInfo(event, nil, "complete") diff --git a/internal/use-case/main-use-case/procedure-src/lib.go b/internal/use-case/main-use-case/procedure-src/lib.go index 501315ea..6cd2b7dd 100644 --- a/internal/use-case/main-use-case/procedure-src/lib.go +++ b/internal/use-case/main-use-case/procedure-src/lib.go @@ -2,6 +2,8 @@ package proceduresrc import ( e "simrs-vx/internal/domain/main-entities/procedure-src" + + plh "simrs-vx/pkg/lib-helper" pl "simrs-vx/pkg/logger" pu "simrs-vx/pkg/use-case-helper" @@ -24,13 +26,7 @@ func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.Procedu } if err := tx.Create(&data).Error; err != nil { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-create-fail", - Detail: "Database insert failed", - Raw: err, - } - return nil, pl.SetLogError(event, input) + return nil, plh.HandleCreateError(input, event, err) } pl.SetLogInfo(event, nil, "complete") @@ -51,6 +47,8 @@ func ReadListData(input e.ReadListDto, event *pl.Event, dbx ...*gorm.DB) ([]e.Pr tx = dg.I } + plh.SearchCodeOrName(input.Search, tx) + tx = tx. Model(&e.ProcedureSrc{}). Scopes(gh.Filter(input)). diff --git a/internal/use-case/main-use-case/province/lib.go b/internal/use-case/main-use-case/province/lib.go index 5b8b4b33..9955b076 100644 --- a/internal/use-case/main-use-case/province/lib.go +++ b/internal/use-case/main-use-case/province/lib.go @@ -2,6 +2,8 @@ package province import ( e "simrs-vx/internal/domain/main-entities/province" + + plh "simrs-vx/pkg/lib-helper" pl "simrs-vx/pkg/logger" pu "simrs-vx/pkg/use-case-helper" @@ -24,13 +26,7 @@ func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.Provinc } if err := tx.Create(&data).Error; err != nil { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-create-fail", - Detail: "Database insert failed", - Raw: err, - } - return nil, pl.SetLogError(event, input) + return nil, plh.HandleCreateError(input, event, err) } pl.SetLogInfo(event, nil, "complete") diff --git a/internal/use-case/main-use-case/regency/lib.go b/internal/use-case/main-use-case/regency/lib.go index 21433f6b..4f66c9c0 100644 --- a/internal/use-case/main-use-case/regency/lib.go +++ b/internal/use-case/main-use-case/regency/lib.go @@ -2,6 +2,8 @@ package regency import ( e "simrs-vx/internal/domain/main-entities/regency" + + plh "simrs-vx/pkg/lib-helper" pl "simrs-vx/pkg/logger" pu "simrs-vx/pkg/use-case-helper" @@ -24,13 +26,7 @@ func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.Regency } if err := tx.Create(&data).Error; err != nil { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-create-fail", - Detail: "Database insert failed", - Raw: err, - } - return nil, pl.SetLogError(event, input) + return nil, plh.HandleCreateError(input, event, err) } pl.SetLogInfo(event, nil, "complete") diff --git a/internal/use-case/main-use-case/room/lib.go b/internal/use-case/main-use-case/room/lib.go index df416fa1..a37485e0 100644 --- a/internal/use-case/main-use-case/room/lib.go +++ b/internal/use-case/main-use-case/room/lib.go @@ -2,6 +2,8 @@ package room import ( e "simrs-vx/internal/domain/main-entities/room" + + plh "simrs-vx/pkg/lib-helper" pl "simrs-vx/pkg/logger" pu "simrs-vx/pkg/use-case-helper" @@ -24,13 +26,7 @@ func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.Room, e } if err := tx.Create(&data).Error; err != nil { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-create-fail", - Detail: "Database insert failed", - Raw: err, - } - return nil, pl.SetLogError(event, input) + return nil, plh.HandleCreateError(input, event, err) } pl.SetLogInfo(event, nil, "complete") diff --git a/internal/use-case/main-use-case/sbar/lib.go b/internal/use-case/main-use-case/sbar/lib.go index 4151d276..da6fc10a 100644 --- a/internal/use-case/main-use-case/sbar/lib.go +++ b/internal/use-case/main-use-case/sbar/lib.go @@ -2,6 +2,8 @@ package sbar import ( e "simrs-vx/internal/domain/main-entities/sbar" + + plh "simrs-vx/pkg/lib-helper" pl "simrs-vx/pkg/logger" pu "simrs-vx/pkg/use-case-helper" @@ -24,13 +26,7 @@ func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.Sbar, e } if err := tx.Create(&data).Error; err != nil { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-create-fail", - Detail: "Database insert failed", - Raw: err, - } - return nil, pl.SetLogError(event, input) + return nil, plh.HandleCreateError(input, event, err) } pl.SetLogInfo(event, nil, "complete") diff --git a/internal/use-case/main-use-case/soapi/lib.go b/internal/use-case/main-use-case/soapi/lib.go index bc848678..8f58b55a 100644 --- a/internal/use-case/main-use-case/soapi/lib.go +++ b/internal/use-case/main-use-case/soapi/lib.go @@ -2,6 +2,8 @@ package soapi import ( e "simrs-vx/internal/domain/main-entities/soapi" + + plh "simrs-vx/pkg/lib-helper" pl "simrs-vx/pkg/logger" pu "simrs-vx/pkg/use-case-helper" @@ -24,13 +26,7 @@ func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.Soapi, } if err := tx.Create(&data).Error; err != nil { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-create-fail", - Detail: "Database insert failed", - Raw: err, - } - return nil, pl.SetLogError(event, input) + return nil, plh.HandleCreateError(input, event, err) } pl.SetLogInfo(event, nil, "complete") diff --git a/internal/use-case/main-use-case/specialist-intern/lib.go b/internal/use-case/main-use-case/specialist-intern/lib.go index 81590bc3..7c2dadd9 100644 --- a/internal/use-case/main-use-case/specialist-intern/lib.go +++ b/internal/use-case/main-use-case/specialist-intern/lib.go @@ -2,6 +2,8 @@ package specialistintern import ( e "simrs-vx/internal/domain/main-entities/specialist-intern" + + plh "simrs-vx/pkg/lib-helper" pl "simrs-vx/pkg/logger" pu "simrs-vx/pkg/use-case-helper" @@ -24,13 +26,7 @@ func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.Special } if err := tx.Create(&data).Error; err != nil { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-create-fail", - Detail: "Database insert failed", - Raw: err, - } - return nil, pl.SetLogError(event, input) + return nil, plh.HandleCreateError(input, event, err) } pl.SetLogInfo(event, nil, "complete") diff --git a/internal/use-case/main-use-case/specialist/lib.go b/internal/use-case/main-use-case/specialist/lib.go index 32378daf..04b1b552 100644 --- a/internal/use-case/main-use-case/specialist/lib.go +++ b/internal/use-case/main-use-case/specialist/lib.go @@ -26,13 +26,7 @@ func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.Special } if err := tx.Create(&data).Error; err != nil { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-create-fail", - Detail: "Database insert failed", - Raw: err, - } - return nil, pl.SetLogError(event, input) + return nil, plh.HandleCreateError(input, event, err) } pl.SetLogInfo(event, nil, "complete") diff --git a/internal/use-case/main-use-case/subspecialist/lib.go b/internal/use-case/main-use-case/subspecialist/lib.go index 3753cc8d..428c0a5f 100644 --- a/internal/use-case/main-use-case/subspecialist/lib.go +++ b/internal/use-case/main-use-case/subspecialist/lib.go @@ -26,13 +26,7 @@ func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.Subspec } if err := tx.Create(&data).Error; err != nil { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-create-fail", - Detail: "Database insert failed", - Raw: err, - } - return nil, pl.SetLogError(event, input) + return nil, plh.HandleCreateError(input, event, err) } pl.SetLogInfo(event, nil, "complete") diff --git a/internal/use-case/main-use-case/unit/lib.go b/internal/use-case/main-use-case/unit/lib.go index 24f49256..2924b7df 100644 --- a/internal/use-case/main-use-case/unit/lib.go +++ b/internal/use-case/main-use-case/unit/lib.go @@ -26,13 +26,7 @@ func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.Unit, e } if err := tx.Create(&data).Error; err != nil { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-create-fail", - Detail: "Database insert failed", - Raw: err, - } - return nil, pl.SetLogError(event, input) + return nil, plh.HandleCreateError(input, event, err) } pl.SetLogInfo(event, nil, "complete") diff --git a/internal/use-case/main-use-case/uom/lib.go b/internal/use-case/main-use-case/uom/lib.go index 0cbc85e0..3658faf2 100644 --- a/internal/use-case/main-use-case/uom/lib.go +++ b/internal/use-case/main-use-case/uom/lib.go @@ -2,6 +2,8 @@ package uom import ( e "simrs-vx/internal/domain/main-entities/uom" + + plh "simrs-vx/pkg/lib-helper" pl "simrs-vx/pkg/logger" pu "simrs-vx/pkg/use-case-helper" @@ -24,13 +26,7 @@ func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.Uom, er } if err := tx.Create(&data).Error; err != nil { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-create-fail", - Detail: "Database insert failed", - Raw: err, - } - return nil, pl.SetLogError(event, input) + return nil, plh.HandleCreateError(input, event, err) } pl.SetLogInfo(event, nil, "complete") @@ -51,6 +47,8 @@ func ReadListData(input e.ReadListDto, event *pl.Event, dbx ...*gorm.DB) ([]e.Uo tx = dg.I } + plh.SearchCodeOrName(input.Search, tx) + tx = tx. Model(&e.Uom{}). Scopes(gh.Filter(input)). diff --git a/internal/use-case/main-use-case/user/lib.go b/internal/use-case/main-use-case/user/lib.go index e857e9b3..fdb670dc 100644 --- a/internal/use-case/main-use-case/user/lib.go +++ b/internal/use-case/main-use-case/user/lib.go @@ -2,6 +2,8 @@ package user import ( e "simrs-vx/internal/domain/main-entities/user" + + plh "simrs-vx/pkg/lib-helper" pl "simrs-vx/pkg/logger" pu "simrs-vx/pkg/use-case-helper" @@ -24,13 +26,7 @@ func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.User, e } if err := tx.Create(&data).Error; err != nil { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-create-fail", - Detail: "Database insert failed", - Raw: err, - } - return nil, pl.SetLogError(event, input) + return nil, plh.HandleCreateError(input, event, err) } pl.SetLogInfo(event, nil, "complete") diff --git a/internal/use-case/main-use-case/village/lib.go b/internal/use-case/main-use-case/village/lib.go index 2e7dd2da..1c6a48e3 100644 --- a/internal/use-case/main-use-case/village/lib.go +++ b/internal/use-case/main-use-case/village/lib.go @@ -2,6 +2,8 @@ package village import ( e "simrs-vx/internal/domain/main-entities/village" + + plh "simrs-vx/pkg/lib-helper" pl "simrs-vx/pkg/logger" pu "simrs-vx/pkg/use-case-helper" @@ -24,13 +26,7 @@ func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.Village } if err := tx.Create(&data).Error; err != nil { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-create-fail", - Detail: "Database insert failed", - Raw: err, - } - return nil, pl.SetLogError(event, input) + return nil, plh.HandleCreateError(input, event, err) } pl.SetLogInfo(event, nil, "complete") diff --git a/pkg/auth-helper/tycovar.go b/pkg/auth-helper/tycovar.go index 7586956d..deda1097 100644 --- a/pkg/auth-helper/tycovar.go +++ b/pkg/auth-helper/tycovar.go @@ -39,10 +39,6 @@ func (a AuthInfo) IsPayment() bool { return a.User_Position_Code == string(ero.UPCPay) } -func (a AuthInfo) IsPaymentVerificator() bool { - return a.User_Position_Code == string(ero.UPCPav) -} - func (a AuthInfo) IsManagement() bool { return a.User_Position_Code == string(ero.UPCMan) } diff --git a/pkg/lib-helper/lib-helper.go b/pkg/lib-helper/lib-helper.go index c0d8e05d..b24c1004 100644 --- a/pkg/lib-helper/lib-helper.go +++ b/pkg/lib-helper/lib-helper.go @@ -1,9 +1,58 @@ package libhelper -import "gorm.io/gorm" +import ( + "fmt" + pl "simrs-vx/pkg/logger" + + "github.com/jackc/pgx/v5/pgconn" + "gorm.io/gorm" +) func SearchCodeOrName(search string, tx *gorm.DB) { if search != "" { tx.Where("\"Code\" ILIKE ? OR \"Name\" ILIKE ?", "%"+search+"%", "%"+search+"%") } } + +func HandleCreateError(input any, event *pl.Event, err error) error { + e, ok := err.(*pgconn.PgError) + if !ok { + // fallback if it's not a pg error + event.Status = "failed" + event.ErrInfo = pl.ErrorInfo{ + Code: "data-create-fail", + Detail: fmt.Sprintf("Database insert failed: %s", err.Error()), + Raw: err, + } + return pl.SetLogError(event, input) + } + + switch e.Code { + case "23505": // unique_violation + event.Status = "failed" + event.ErrInfo = pl.ErrorInfo{ + Code: "data-create-duplicate", + Detail: fmt.Sprintf("Duplicate value violates unique constraint: %s", e.ConstraintName), + Raw: err, + } + return pl.SetLogError(event, input) + + case "23503": // foreign_key_violation + event.Status = "failed" + event.ErrInfo = pl.ErrorInfo{ + Code: "data-create-fkViolation", + Detail: fmt.Sprintf("Foreign key constraint '%s' violated. Please check related record exists.", e.ConstraintName), + Raw: err, + } + return pl.SetLogError(event, input) + + default: + event.Status = "failed" + event.ErrInfo = pl.ErrorInfo{ + Code: "data-create-fail", + Detail: fmt.Sprintf("Database insert failed: %s", e.Message), + Raw: err, + } + return pl.SetLogError(event, input) + } +}