diff --git a/cmd/main-migration/migrations/20251202063820.sql b/cmd/main-migration/migrations/20251202063820.sql new file mode 100644 index 00000000..52b2689e --- /dev/null +++ b/cmd/main-migration/migrations/20251202063820.sql @@ -0,0 +1,17 @@ +-- Create "VaccineData" table +CREATE TABLE "public"."VaccineData" ( + "Id" bigserial NOT NULL, + "CreatedAt" timestamptz NULL, + "UpdatedAt" timestamptz NULL, + "DeletedAt" timestamptz NULL, + "Vaccine_type_Code" text NULL, + "Encounter_Id" bigint NULL, + "Vaccine_batch_number" bigint NULL, + "Vaccine_dose" bigint NULL, + "Dose_order" bigint NULL, + "Injection_location" text NULL, + "Vaccination_datetime" timestamptz NULL, + "Vaccine_expiration_date" timestamptz NULL, + PRIMARY KEY ("Id"), + CONSTRAINT "fk_VaccineData_Encounter" FOREIGN KEY ("Encounter_Id") REFERENCES "public"."Encounter" ("Id") ON UPDATE NO ACTION ON DELETE NO ACTION +); diff --git a/internal/domain/main-entities/vaccine-data/dto.go b/internal/domain/main-entities/vaccine-data/dto.go new file mode 100644 index 00000000..38222604 --- /dev/null +++ b/internal/domain/main-entities/vaccine-data/dto.go @@ -0,0 +1,101 @@ +package vaccinedata + +import ( + // std + "time" + + // internal - lib + + // internal - domain - base-entities + ecore "simrs-vx/internal/domain/base-entities/core" + + // internal - domain - main-entities + + ee "simrs-vx/internal/domain/main-entities/encounter" +) + +type CreateDto struct { + Vaccine_type_Code *string `json:"vaccine_type_code"` + Encounter_Id *uint `json:"encounter_id"` + Vaccine_batch_number *uint `json:"vaccine_batch_number"` + Vaccine_dose *uint `json:"vaccine_dose"` + Dose_order *uint `json:"dose_order"` + Injection_location *string `json:"injection_location"` + Vaccination_datetime *time.Time `json:"vaccination_datetime"` + Vaccine_expiration_date *time.Time `json:"vaccine_expiration_date"` +} + +type ReadListDto struct { + FilterDto + Includes string `json:"includes"` + Pagination ecore.Pagination +} + +type FilterDto struct { + Encounter_Id *uint `json:"encounter-id"` + Date *time.Time `json:"date"` + Vaccine_type_Code *string `json:"vaccine-type-code"` + Vaccine_batch_number *uint `json:"vaccine_batch_number"` + Vaccine_dose *uint `json:"vaccine_dose"` + Dose_order *uint `json:"dose_order"` + Injection_location *string `json:"injection_location"` + Vaccination_datetime *time.Time `json:"vaccination_datetime"` + Vaccine_expiration_date *time.Time `json:"vaccine_expiration_date"` +} + +type ReadDetailDto struct { + Id uint16 `json:"id"` + Includes string `json:"includes"` +} + +type UpdateDto struct { + Id uint `json:"id"` + CreateDto +} + +type DeleteDto struct { + Id uint `json:"id"` +} + +type MetaDto struct { + PageNumber int `json:"page_number"` + PageSize int `json:"page_size"` + Count int `json:"count"` +} + +type ResponseDto struct { + ecore.Main + Vaccine_type_Code *string `json:"vaccine_type_code"` + Encounter_Id *uint `json:"encounter_id"` + Encounter *ee.Encounter `json:"encounter" gorm:"foreignKey:Encounter_Id;references:Id"` + Vaccine_batch_number *uint `json:"vaccine_batch_number"` + Vaccine_dose *uint `json:"vaccine_dose"` + Dose_order *uint `json:"dose_order"` + Injection_location *string `json:"injection_location"` + Vaccination_datetime *time.Time `json:"vaccination_datetime"` + Vaccine_expiration_date *time.Time `json:"vaccine_expiration_date"` +} + +func (d VaccineData) ToResponse() ResponseDto { + resp := ResponseDto{ + Encounter_Id: d.Encounter_Id, + Encounter: d.Encounter, + Vaccine_type_Code: d.Vaccine_type_Code, + Vaccine_batch_number: d.Vaccine_batch_number, + Vaccine_dose: d.Vaccine_dose, + Dose_order: d.Dose_order, + Injection_location: d.Injection_location, + Vaccination_datetime: d.Vaccination_datetime, + Vaccine_expiration_date: d.Vaccine_expiration_date, + } + resp.Main = d.Main + return resp +} + +func ToResponseList(data []VaccineData) []ResponseDto { + resp := make([]ResponseDto, len(data)) + for i, u := range data { + resp[i] = u.ToResponse() + } + return resp +} diff --git a/internal/domain/main-entities/vaccine-data/entity.go b/internal/domain/main-entities/vaccine-data/entity.go new file mode 100644 index 00000000..7eb4a023 --- /dev/null +++ b/internal/domain/main-entities/vaccine-data/entity.go @@ -0,0 +1,21 @@ +package vaccinedata + +import ( + "time" + + ecore "simrs-vx/internal/domain/base-entities/core" + ee "simrs-vx/internal/domain/main-entities/encounter" +) + +type VaccineData struct { + ecore.Main // adjust this according to the needs + Vaccine_type_Code *string `json:"vaccine_type_code"` + Encounter_Id *uint `json:"encounter_id"` + Encounter *ee.Encounter `json:"encounter" gorm:"foreignKey:Encounter_Id;references:Id"` + Vaccine_batch_number *uint `json:"vaccine_batch_number"` + Vaccine_dose *uint `json:"vaccine_dose"` + Dose_order *uint `json:"dose_order"` + Injection_location *string `json:"injection_location"` + Vaccination_datetime *time.Time `json:"vaccination_datetime"` + Vaccine_expiration_date *time.Time `json:"vaccine_expiration_date"` +} diff --git a/internal/interface/migration/main-entities.go b/internal/interface/migration/main-entities.go index bed0c18c..16128e5a 100644 --- a/internal/interface/migration/main-entities.go +++ b/internal/interface/migration/main-entities.go @@ -99,6 +99,7 @@ import ( uom "simrs-vx/internal/domain/main-entities/uom" user "simrs-vx/internal/domain/main-entities/user" userfes "simrs-vx/internal/domain/main-entities/user-fes" + vaccinedata "simrs-vx/internal/domain/main-entities/vaccine-data" vehicle "simrs-vx/internal/domain/main-entities/vehicle" vehiclehist "simrs-vx/internal/domain/main-entities/vehicle-hist" village "simrs-vx/internal/domain/main-entities/village" @@ -214,6 +215,7 @@ func getMainEntities() []any { &vclaimmember.VclaimMember{}, &controlletter.ControlLetter{}, &rehab.Rehab{}, + &vaccinedata.VaccineData{}, &chemoprotocol.ChemoProtocol{}, &fileattachemnt.EncounterDocument{}, &vclaimsepcontrolletter.VclaimSepControlLetter{},