diff --git a/cmd/main-migration/migrations/20251010031743.sql b/cmd/main-migration/migrations/20251010031743.sql new file mode 100644 index 00000000..1dea016a --- /dev/null +++ b/cmd/main-migration/migrations/20251010031743.sql @@ -0,0 +1,6 @@ +-- Modify "Person" table +ALTER TABLE "public"."Person" ADD CONSTRAINT "fk_Person_BirthRegency" FOREIGN KEY ("BirthRegency_Code") REFERENCES "public"."Regency" ("Code") ON UPDATE NO ACTION ON DELETE NO ACTION; +-- Rename a column from "PostalCode" to "PostalCode_Code" +ALTER TABLE "public"."PersonAddress" RENAME COLUMN "PostalCode" TO "PostalCode_Code"; +-- Modify "PersonAddress" table +ALTER TABLE "public"."PersonAddress" ADD CONSTRAINT "fk_PersonAddress_PostalCode" FOREIGN KEY ("PostalCode_Code") REFERENCES "public"."PostalCode" ("Code") 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 e06784b3..fed6c077 100644 --- a/cmd/main-migration/migrations/atlas.sum +++ b/cmd/main-migration/migrations/atlas.sum @@ -1,4 +1,4 @@ -h1:TrdoKKXrICvDA283WGDf33WtWHglk1twvjDpYrNwc8o= +h1:tvJWAAI1ENRhCwoYTUekIO7b9RxtkQllUFwCYQ/S17w= 20250904105930.sql h1:MEM6blCgke9DzWQSTnLzasbPIrcHssNNrJqZpSkEo6k= 20250904141448.sql h1:J8cmYNk4ZrG9fhfbi2Z1IWz7YkfvhFqTzrLFo58BPY0= 20250908062237.sql h1:Pu23yEW/aKkwozHoOuROvHS/GK4ngARJGdO7FB7HZuI= @@ -32,5 +32,6 @@ h1:TrdoKKXrICvDA283WGDf33WtWHglk1twvjDpYrNwc8o= 20251008031554.sql h1:AqrVfIhSzY3PCy8ZlP5W91wn2iznfIuj5qQfubp6/94= 20251008052346.sql h1:nxnXmooIJ6r1mmzwnw+6efxLfc/k9h2aE6RMptPRons= 20251008073620.sql h1:6YsJp1W4SmQJ1lxpqF27BBlDC1zqhw7Yhc7pLzQTY6M= -20251009042854.sql h1:vK7bDqUDTxjHMSh1wrQiKITeqbB/7aqkWaPut8nGA68= -20251009052657.sql h1:I0rBPBg1o6zuRaxqWqCh82rI+NN7Gr6C//8ItUaLmtY= +20251009042854.sql h1:nkBV+R6j0fg7/JY6wH3eb5Vv0asJLnXmb6lINfT/GLQ= +20251009052657.sql h1:EPvdsib5rzCGPryd10HShGKvFPwM/R5S2lIVwtYxpms= +20251010031743.sql h1:XGl/0//kV22jCXS+k+qZASm/zN6uapZjOCPBAGg7+yo= diff --git a/internal/domain/main-entities/person-address/dto.go b/internal/domain/main-entities/person-address/dto.go index 821cf788..915f2b7f 100644 --- a/internal/domain/main-entities/person-address/dto.go +++ b/internal/domain/main-entities/person-address/dto.go @@ -2,15 +2,16 @@ package personaddress import ( ecore "simrs-vx/internal/domain/base-entities/core" + epc "simrs-vx/internal/domain/main-entities/postal-code" ) type CreateDto struct { - Person_Id uint `json:"person_id"` - Address string `json:"address" validate:"maxLength=150"` - Rt string `json:"rt" validate:"maxLength=2"` - Rw string `json:"rw" validate:"maxLength=2"` - Village_Code string `json:"village_code" validate:"maxLength=10"` - PostalCode string `json:"postalCode" validate:"maxLength=6"` + Person_Id uint `json:"person_id"` + Address string `json:"address" validate:"maxLength=150"` + Rt string `json:"rt" validate:"maxLength=2"` + Rw string `json:"rw" validate:"maxLength=2"` + Village_Code string `json:"village_code" validate:"maxLength=10"` + PostalCode_Code string `json:"postalCode_code" validate:"maxLength=6"` } type ReadListDto struct { @@ -39,22 +40,24 @@ type MetaDto struct { type ResponseDto struct { ecore.Main - Person_Id uint `json:"person_id"` - Address string `json:"address"` - Rt string `json:"rt"` - Rw string `json:"rw"` - Village_Code string `json:"village_code"` - PostalCode string `json:"postalCode"` + Person_Id uint `json:"person_id"` + Address string `json:"address"` + Rt string `json:"rt"` + Rw string `json:"rw"` + Village_Code string `json:"village_code"` + PostalCode_Code string `json:"postalCode_code"` + PostalCode *epc.PostalCode `json:"postalCode,omitempty"` } func (d PersonAddress) ToResponse() ResponseDto { resp := ResponseDto{ - Person_Id: d.Person_Id, - Address: d.Address, - Rt: d.Rt, - Rw: d.Rw, - Village_Code: d.Village_Code, - PostalCode: d.PostalCode, + Person_Id: d.Person_Id, + Address: d.Address, + Rt: d.Rt, + Rw: d.Rw, + Village_Code: d.Village_Code, + PostalCode_Code: d.PostalCode_Code, + PostalCode: d.PostalCode, } resp.Main = d.Main return resp diff --git a/internal/domain/main-entities/person-address/entity.go b/internal/domain/main-entities/person-address/entity.go index eacfd9f0..f3fc3bac 100644 --- a/internal/domain/main-entities/person-address/entity.go +++ b/internal/domain/main-entities/person-address/entity.go @@ -2,14 +2,16 @@ package personaddress import ( ecore "simrs-vx/internal/domain/base-entities/core" + epc "simrs-vx/internal/domain/main-entities/postal-code" ) type PersonAddress struct { - ecore.Main // adjust this according to the needs - Person_Id uint `json:"person_id"` - Address string `json:"address" gorm:"size:150"` - Rt string `json:"rt" gorm:"size:2"` - Rw string `json:"rw" gorm:"size:2"` - PostalCode string `json:"postalCode" gorm:"size:6"` - Village_Code string `json:"village_code" gorm:"size:10"` + ecore.Main // adjust this according to the needs + Person_Id uint `json:"person_id"` + Address string `json:"address" gorm:"size:150"` + Rt string `json:"rt" gorm:"size:2"` + Rw string `json:"rw" gorm:"size:2"` + PostalCode_Code string `json:"postalCode_code" gorm:"size:6"` + PostalCode *epc.PostalCode `json:"postalCode,omitempty" gorm:"foreignKey:PostalCode_Code;references:Code"` + Village_Code string `json:"village_code" gorm:"size:10"` } diff --git a/internal/domain/main-entities/person/dto.go b/internal/domain/main-entities/person/dto.go index 85617706..dfba0115 100644 --- a/internal/domain/main-entities/person/dto.go +++ b/internal/domain/main-entities/person/dto.go @@ -8,6 +8,7 @@ import ( epa "simrs-vx/internal/domain/main-entities/person-address" epc "simrs-vx/internal/domain/main-entities/person-contact" epr "simrs-vx/internal/domain/main-entities/person-relative" + er "simrs-vx/internal/domain/main-entities/regency" erp "simrs-vx/internal/domain/references/person" ) @@ -91,6 +92,7 @@ type ResponseDto struct { EndTitle *string `json:"endTitle"` BirthDate *time.Time `json:"birthDate,omitempty"` BirthRegency_Code *string `json:"birthRegency_code"` + BirthRegency *er.Regency `json:"birthRegency,omitempty"` Gender_Code *erp.GenderCode `json:"gender_code"` ResidentIdentityNumber *string `json:"residentIdentityNumber"` PassportNumber *string `json:"passportNumber"` @@ -121,6 +123,7 @@ func (d *Person) ToResponse() ResponseDto { EndTitle: d.EndTitle, BirthDate: d.BirthDate, BirthRegency_Code: d.BirthRegency_Code, + BirthRegency: d.BirthRegency, Gender_Code: d.Gender_Code, ResidentIdentityNumber: d.ResidentIdentityNumber, PassportNumber: d.PassportNumber, diff --git a/internal/domain/main-entities/person/entity.go b/internal/domain/main-entities/person/entity.go index 91b2462e..4dd9bcd4 100644 --- a/internal/domain/main-entities/person/entity.go +++ b/internal/domain/main-entities/person/entity.go @@ -7,6 +7,8 @@ import ( epa "simrs-vx/internal/domain/main-entities/person-address" epc "simrs-vx/internal/domain/main-entities/person-contact" epr "simrs-vx/internal/domain/main-entities/person-relative" + er "simrs-vx/internal/domain/main-entities/regency" + erp "simrs-vx/internal/domain/references/person" "time" @@ -19,6 +21,7 @@ type Person struct { EndTitle *string `json:"endTitle" gorm:"size:50"` BirthDate *time.Time `json:"birthDate,omitempty"` BirthRegency_Code *string `json:"birthRegency_code" gorm:"size:4"` + BirthRegency *er.Regency `json:"birthRegency,omitempty" gorm:"foreignKey:BirthRegency_Code;references:Code"` Gender_Code *erp.GenderCode `json:"gender_code" gorm:"size:10"` ResidentIdentityNumber *string `json:"residentIdentityNumber" gorm:"unique;size:16"` PassportNumber *string `json:"passportNumber" gorm:"unique;size:20"` @@ -30,9 +33,6 @@ type Person struct { Nationality *string `json:"nationality": gorm:"size:50"` Ethnic_Code *string `json:"ethnic_code" gorm:"size:20"` Ethnic *ee.Ethnic `json:"ethnic,omitempty" gorm:"foreignKey:Ethnic_Code;references:Code"` - Addresses *[]epa.PersonAddress `json:"addresses" gorm:"foreignKey:Person_Id"` - Contacts *[]epc.PersonContact `json:"contacts" gorm:"foreignKey:Person_Id"` - Relatives *[]epr.PersonRelative `json:"relatives" gorm:"foreignKey:Person_Id"` Language_Code *string `json:"language_code" gorm:"size:10"` Language *el.Language `json:"language,omitempty" gorm:"foreignKey:Language_Code;references:Code"` CommunicationIssueStatus bool `json:"communicationIssueStatus"` @@ -41,6 +41,9 @@ type Person struct { PassportFileUrl *string `json:"passportFileUrl" gorm:"size:1024"` DrivingLicenseFileUrl *string `json:"drivingLicenseFileUrl" gorm:"size:1024"` FamilyIdentityFileUrl *string `json:"familyIdentityFileUrl" gorm:"size:1024"` + Addresses *[]epa.PersonAddress `json:"addresses" gorm:"foreignKey:Person_Id"` + Contacts *[]epc.PersonContact `json:"contacts" gorm:"foreignKey:Person_Id"` + Relatives *[]epr.PersonRelative `json:"relatives" gorm:"foreignKey:Person_Id"` } func (d Person) IsSameResidentIdentityNumber(input *string) bool { diff --git a/internal/use-case/main-use-case/patient/lib.go b/internal/use-case/main-use-case/patient/lib.go index 8f6148ee..fb864f84 100644 --- a/internal/use-case/main-use-case/patient/lib.go +++ b/internal/use-case/main-use-case/patient/lib.go @@ -96,9 +96,13 @@ func ReadDetailData(input e.ReadDetailDto, event *pl.Event, dbx ...*gorm.DB) (*e } tx = tx.Preload(clause.Associations) - tx = tx.Preload("Person.Addresses") - tx = tx.Preload("Person.Contacts") - tx = tx.Preload("Person.Relatives") + tx = tx.Preload("Person.BirthRegency.Province"). + Preload("Person.Ethnic"). + Preload("Person.Language"). + Preload("Person.Contacts"). + Preload("Person.Relatives.Village.District.Regency.Province"). + Preload("Person.Addresses"). + Preload("Person.Addresses.PostalCode.Village.District.Regency.Province") if err := tx.First(&data, input.Id).Error; err != nil { if processedErr := pu.HandleReadError(err, event, source, input.Id, data); processedErr != nil { diff --git a/internal/use-case/main-use-case/person-address/helper.go b/internal/use-case/main-use-case/person-address/helper.go index f3197d76..60712837 100644 --- a/internal/use-case/main-use-case/person-address/helper.go +++ b/internal/use-case/main-use-case/person-address/helper.go @@ -22,5 +22,5 @@ func setData[T *e.CreateDto | *e.UpdateDto](input T, data *e.PersonAddress) { data.Rt = inputSrc.Rt data.Rw = inputSrc.Rw data.Village_Code = inputSrc.Village_Code - data.PostalCode = inputSrc.PostalCode + data.PostalCode_Code = inputSrc.PostalCode_Code }