From e630e3ac38ce6bba5ad59c736b46520ad1574e7d Mon Sep 17 00:00:00 2001 From: Ubuntu Date: Tue, 7 Oct 2025 16:33:48 +0700 Subject: [PATCH 1/9] migration from server --- cmd/main-migration/migrations/atlas.sum | 60 ++++++++++++------------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/cmd/main-migration/migrations/atlas.sum b/cmd/main-migration/migrations/atlas.sum index a8dfe2ee..ec604c0f 100644 --- a/cmd/main-migration/migrations/atlas.sum +++ b/cmd/main-migration/migrations/atlas.sum @@ -1,30 +1,30 @@ -h1:4thtC22CJCQMIeVkYLmcFOT5w7S+bUUWy9wHZ21OHi8= -20250904105930.sql h1:MEM6blCgke9DzWQSTnLzasbPIrcHssNNrJqZpSkEo6k= -20250904141448.sql h1:J8cmYNk4ZrG9fhfbi2Z1IWz7YkfvhFqTzrLFo58BPY0= -20250908062237.sql h1:Pu23yEW/aKkwozHoOuROvHS/GK4ngARJGdO7FB7HZuI= -20250908062323.sql h1:oXl6Z143tOpIl4EfP4B8JNU8LrMvVmHEtCgAfiB4gs8= -20250908073811.sql h1:m2aNXfnGxnLq1+rVWrh4f60q7fhyhV3gEwNu/OIqQlE= -20250908073839.sql h1:cPk54xjLdMs26uY8ZHjNWLuyfAMzV7Zb0/9oJQrsw04= -20250910055902.sql h1:5xwjAV6QbtZT9empTJKfhyAjdknbHzb15B0Ku5dzqtQ= -20250915123412.sql h1:D83xaU2YlDEd21HLup/YQpQ2easMToYCyy/oK6AFgQs= -20250916043819.sql h1:ekoTJsBqQZ8G8n0qJ03d13+eoNoc7sAUEQGA5D/CCxk= -20250917040616.sql h1:zoCnmcXuM7AVv85SmN7RmFglCgJnoDmpRWExH0LAc9Q= -20250917040751.sql h1:J1xyRrh32y1+lezwAyNwPcUQ6ABBSgbvzNLva4SVdQU= -20250917045138.sql h1:jKe1Z0uOLG4SGBYM+S/3P+/zMPztmgoderD5swnMuCg= -20250917093645.sql h1:cNI3Pbz1R3LxvIXLuexafJFCXUXrmuFCgXXJ2sG+FW0= -20250918073552.sql h1:RJ1SvMzP6aeWnoPVD3eVAmIQOkcp6Php8z3QRri6v4g= -20250918073742.sql h1:+cEsnJTJFybe2fR69ZoOiX2R6c6iITl4m6WTZ1hjyzY= -20250918074745.sql h1:2hNVQCXF/dVYXAh+T/7oBFgERGWxzVb2FXJjwkFWGCI= -20250923025134.sql h1:Ykz/qpHiGDXPsCsWTjydQFVSibZP2D+h2fIeb2h2JGA= -20250924051317.sql h1:yQuW6SwJxIOM5fcxeAaie5lSm1oLysU/C2hH2xNCVoQ= -20250929034321.sql h1:101FJ8VH12mrZWlt/X1gvKUGOhoiF8tFbjiapAjnHzg= -20250929034428.sql h1:i+pROD9p+g5dOmmZma6WF/0Hw5g3Ha28NN85iTo1K34= -20250930025550.sql h1:+F+CsCUXD/ql0tHGEow70GhPBX1ZybVn+bh/T4YMh7Y= -20250930140351.sql h1:9AAEG1AnOAH+o0+oHL5G7I8vqlWOhwRlCGyyCpT/y1Q= -20251002085604.sql h1:3xZ68eYp4urXRnvotNH1XvG2mYOSDV/j3zHEZ/txg5E= -20251003032030.sql h1:HB+mQ2lXMNomHDpaRhB/9IwYI9/YiDO5eOJ+nAQH/jw= -20251005060450.sql h1:LbtCE2b+8osM3CvnmQJH1uCPtn+d7WchsslBOz8bL3Q= -20251006041122.sql h1:MlS7f21z06sutnf9dIekt5fuHJr4lgcQ4uCuCXAGsfc= -20251006045658.sql h1:3FmGCPCzjgMPdWDRodZTsx3KVaodd9zB9ilib69aewk= -20251006045928.sql h1:Z5g31PmnzNwk/OKdODcxZGm8fjJQdMFK32Xfnt3bRHg= -20251007022859.sql h1:FO03zEfaNEk/aXwY81d5Lp3MoBB9kPQuXlXJ4BPiSR8= +h1:4sYu9Y6C4NdDbQlKG+HP42zgqIwnaR7K66JkL5b2gBg= +20250904105930.sql h1:Vv4vCurl7m7/ZB6TjRpkubHpQ4RYwSUn0QHdzfoGpzY= +20250904141448.sql h1:FYCHH9Os4KkrZMDu/jR8FMP+wLMRW+Mb0PkLU/9BRDg= +20250908062237.sql h1:oanBpKZd+akPu2I/xYhUSbd0G5tAFbXzKLER/Zs8ENI= +20250908062323.sql h1:miNG9COddXkD1jGTgaROMAZ618eT6oiLGiJhXWnQwhE= +20250908073811.sql h1:gOi5cnGG1htlpfizybYmUIT0vYjZTBfXiI0nPSYK2u8= +20250908073839.sql h1:cWNDA4YikjoOteAJuNLFILjQUJPFB6o8Wxreiek4QyI= +20250910055902.sql h1:nxxOGnU0BbH/v3IPgeIOXOwH8d3tKomw7h6FTeMnnBs= +20250915123412.sql h1:mz7SiWfrdf0qE1VTSAAnA/147d6gyp6ry5vZ2bR9SH0= +20250916043819.sql h1:RHXVtmMkB6wfv06HfPyHMBmUfIpFt1xveafNz0kwKnE= +20250917040616.sql h1:MYVDht+akBlzQGKNu2hTTTLPEcH1bxT/Q8MK6WEtuhs= +20250917040751.sql h1:J79YyS2JzWgh5oKXMTgh67uo3gLxKaAsxRiZmSIfjBs= +20250917045138.sql h1:/SM1N4O8X3yxpoJgMEARmS1uOkuLKsTOy4PLsRCOKaQ= +20250917093645.sql h1:PNBTGZ7s10e5b5+Tie8YfVQBN0zKtJ5T34oK1iOUEb4= +20250918073552.sql h1:jG7+g3i8ODYaJdcdZz12v3nbsZ5mB9wG6kWnGyTQIRI= +20250918073742.sql h1:j+rgw7puxE7s+phqPVZHmPk0af3rcaA56Itp86y1suY= +20250918074745.sql h1:rPmP4DXs6OnY4Vp+xO/z9jFpJt/RrJ52SJJjIIxeDvc= +20250923025134.sql h1:2r6pcwnBSU5Y9Czk1OHBoh4yZXiMtEca9X8843fTEX0= +20250924051317.sql h1:iUAk2gsGoEGIPQ0lEEUp8maMSId8emNbP+kP712ABIA= +20250929034321.sql h1:UlpALNVmdi95zOIT0yc6ZyTj9bBjQEIpZhvgrc52M+k= +20250929034428.sql h1:feF+H4nDyHh5bdx48Oiz0A1qecZfi6v3qTTdjzJ45Dg= +20250930025550.sql h1:6XT1kXI3Z3ZIxxmvT7poufZWWCW0QiejZPaFV5wBnjI= +20250930140351.sql h1:HxnmAbh9gCy8jwl/9ycGktiByaUripsjFFvohofY2CY= +20251002085604.sql h1:SjLPi+ZN6qDccK3DaEQCgNsZpPwr5kynWXwbwEsziCI= +20251003032030.sql h1:oHfxNSuqTxU8Zaf9H+h8TuUb1Da03wcyc6hZjDrUQ2s= +20251005060450.sql h1:GIuCcrd4MwjmXpvbzDzPYL18BV3QaZZ+Y2FmEzjvi0E= +20251006041122.sql h1:uNDQbSw0M08lYoMvUNlQtS3iDzpPM1ixT13ugSAoWjE= +20251006045658.sql h1:z+t7yCK54Q4SSiF9kUyUhkYB2F+kzSW9TB7ogxd9wzw= +20251006045928.sql h1:1lATLFLp4BWwGZqAjZdP0Dc6ypNXiYcwjoNkqGa8NFE= +20251007022859.sql h1:HXXwWrkyvzJzJGAt9mGskCRBBV/c1JfPmfjDocmJhQ4= From 88ae9d5f30b3d76cdb6430ac0ff7826734974dde Mon Sep 17 00:00:00 2001 From: dpurbosakti Date: Wed, 8 Oct 2025 10:16:21 +0700 Subject: [PATCH 2/9] update personaddress + midwife --- .../migrations/20251008031337.sql | 2 + .../migrations/20251008031554.sql | 12 ++++ cmd/main-migration/migrations/atlas.sum | 62 +++++++++-------- internal/domain/main-entities/midwife/dto.go | 69 +++++++++++++++++++ .../domain/main-entities/midwife/entity.go | 13 ++++ .../main-entities/person-address/entity.go | 1 + .../references/organization/organization.go | 14 ++-- internal/interface/migration/main-entities.go | 2 + 8 files changed, 139 insertions(+), 36 deletions(-) create mode 100644 cmd/main-migration/migrations/20251008031337.sql create mode 100644 cmd/main-migration/migrations/20251008031554.sql create mode 100644 internal/domain/main-entities/midwife/dto.go create mode 100644 internal/domain/main-entities/midwife/entity.go diff --git a/cmd/main-migration/migrations/20251008031337.sql b/cmd/main-migration/migrations/20251008031337.sql new file mode 100644 index 00000000..fd2aff8a --- /dev/null +++ b/cmd/main-migration/migrations/20251008031337.sql @@ -0,0 +1,2 @@ +-- Modify "PersonAddress" table +ALTER TABLE "public"."PersonAddress" ADD COLUMN "PostalCode" character varying(6) NULL; diff --git a/cmd/main-migration/migrations/20251008031554.sql b/cmd/main-migration/migrations/20251008031554.sql new file mode 100644 index 00000000..58cee318 --- /dev/null +++ b/cmd/main-migration/migrations/20251008031554.sql @@ -0,0 +1,12 @@ +-- Create "Midwife" table +CREATE TABLE "public"."Midwife" ( + "Id" bigserial NOT NULL, + "CreatedAt" timestamptz NULL, + "UpdatedAt" timestamptz NULL, + "DeletedAt" timestamptz NULL, + "Employee_Id" bigint NULL, + "IHS_Number" character varying(20) NULL, + PRIMARY KEY ("Id"), + CONSTRAINT "uni_Midwife_IHS_Number" UNIQUE ("IHS_Number"), + CONSTRAINT "fk_Midwife_Employee" FOREIGN KEY ("Employee_Id") REFERENCES "public"."Employee" ("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 ec604c0f..34db99e7 100644 --- a/cmd/main-migration/migrations/atlas.sum +++ b/cmd/main-migration/migrations/atlas.sum @@ -1,30 +1,32 @@ -h1:4sYu9Y6C4NdDbQlKG+HP42zgqIwnaR7K66JkL5b2gBg= -20250904105930.sql h1:Vv4vCurl7m7/ZB6TjRpkubHpQ4RYwSUn0QHdzfoGpzY= -20250904141448.sql h1:FYCHH9Os4KkrZMDu/jR8FMP+wLMRW+Mb0PkLU/9BRDg= -20250908062237.sql h1:oanBpKZd+akPu2I/xYhUSbd0G5tAFbXzKLER/Zs8ENI= -20250908062323.sql h1:miNG9COddXkD1jGTgaROMAZ618eT6oiLGiJhXWnQwhE= -20250908073811.sql h1:gOi5cnGG1htlpfizybYmUIT0vYjZTBfXiI0nPSYK2u8= -20250908073839.sql h1:cWNDA4YikjoOteAJuNLFILjQUJPFB6o8Wxreiek4QyI= -20250910055902.sql h1:nxxOGnU0BbH/v3IPgeIOXOwH8d3tKomw7h6FTeMnnBs= -20250915123412.sql h1:mz7SiWfrdf0qE1VTSAAnA/147d6gyp6ry5vZ2bR9SH0= -20250916043819.sql h1:RHXVtmMkB6wfv06HfPyHMBmUfIpFt1xveafNz0kwKnE= -20250917040616.sql h1:MYVDht+akBlzQGKNu2hTTTLPEcH1bxT/Q8MK6WEtuhs= -20250917040751.sql h1:J79YyS2JzWgh5oKXMTgh67uo3gLxKaAsxRiZmSIfjBs= -20250917045138.sql h1:/SM1N4O8X3yxpoJgMEARmS1uOkuLKsTOy4PLsRCOKaQ= -20250917093645.sql h1:PNBTGZ7s10e5b5+Tie8YfVQBN0zKtJ5T34oK1iOUEb4= -20250918073552.sql h1:jG7+g3i8ODYaJdcdZz12v3nbsZ5mB9wG6kWnGyTQIRI= -20250918073742.sql h1:j+rgw7puxE7s+phqPVZHmPk0af3rcaA56Itp86y1suY= -20250918074745.sql h1:rPmP4DXs6OnY4Vp+xO/z9jFpJt/RrJ52SJJjIIxeDvc= -20250923025134.sql h1:2r6pcwnBSU5Y9Czk1OHBoh4yZXiMtEca9X8843fTEX0= -20250924051317.sql h1:iUAk2gsGoEGIPQ0lEEUp8maMSId8emNbP+kP712ABIA= -20250929034321.sql h1:UlpALNVmdi95zOIT0yc6ZyTj9bBjQEIpZhvgrc52M+k= -20250929034428.sql h1:feF+H4nDyHh5bdx48Oiz0A1qecZfi6v3qTTdjzJ45Dg= -20250930025550.sql h1:6XT1kXI3Z3ZIxxmvT7poufZWWCW0QiejZPaFV5wBnjI= -20250930140351.sql h1:HxnmAbh9gCy8jwl/9ycGktiByaUripsjFFvohofY2CY= -20251002085604.sql h1:SjLPi+ZN6qDccK3DaEQCgNsZpPwr5kynWXwbwEsziCI= -20251003032030.sql h1:oHfxNSuqTxU8Zaf9H+h8TuUb1Da03wcyc6hZjDrUQ2s= -20251005060450.sql h1:GIuCcrd4MwjmXpvbzDzPYL18BV3QaZZ+Y2FmEzjvi0E= -20251006041122.sql h1:uNDQbSw0M08lYoMvUNlQtS3iDzpPM1ixT13ugSAoWjE= -20251006045658.sql h1:z+t7yCK54Q4SSiF9kUyUhkYB2F+kzSW9TB7ogxd9wzw= -20251006045928.sql h1:1lATLFLp4BWwGZqAjZdP0Dc6ypNXiYcwjoNkqGa8NFE= -20251007022859.sql h1:HXXwWrkyvzJzJGAt9mGskCRBBV/c1JfPmfjDocmJhQ4= +h1:ggc8pOi/e+U1WtE8F5K1QjGB3iuTm2Xr71jLLMn7LJc= +20250904105930.sql h1:MEM6blCgke9DzWQSTnLzasbPIrcHssNNrJqZpSkEo6k= +20250904141448.sql h1:J8cmYNk4ZrG9fhfbi2Z1IWz7YkfvhFqTzrLFo58BPY0= +20250908062237.sql h1:Pu23yEW/aKkwozHoOuROvHS/GK4ngARJGdO7FB7HZuI= +20250908062323.sql h1:oXl6Z143tOpIl4EfP4B8JNU8LrMvVmHEtCgAfiB4gs8= +20250908073811.sql h1:m2aNXfnGxnLq1+rVWrh4f60q7fhyhV3gEwNu/OIqQlE= +20250908073839.sql h1:cPk54xjLdMs26uY8ZHjNWLuyfAMzV7Zb0/9oJQrsw04= +20250910055902.sql h1:5xwjAV6QbtZT9empTJKfhyAjdknbHzb15B0Ku5dzqtQ= +20250915123412.sql h1:D83xaU2YlDEd21HLup/YQpQ2easMToYCyy/oK6AFgQs= +20250916043819.sql h1:ekoTJsBqQZ8G8n0qJ03d13+eoNoc7sAUEQGA5D/CCxk= +20250917040616.sql h1:zoCnmcXuM7AVv85SmN7RmFglCgJnoDmpRWExH0LAc9Q= +20250917040751.sql h1:J1xyRrh32y1+lezwAyNwPcUQ6ABBSgbvzNLva4SVdQU= +20250917045138.sql h1:jKe1Z0uOLG4SGBYM+S/3P+/zMPztmgoderD5swnMuCg= +20250917093645.sql h1:cNI3Pbz1R3LxvIXLuexafJFCXUXrmuFCgXXJ2sG+FW0= +20250918073552.sql h1:RJ1SvMzP6aeWnoPVD3eVAmIQOkcp6Php8z3QRri6v4g= +20250918073742.sql h1:+cEsnJTJFybe2fR69ZoOiX2R6c6iITl4m6WTZ1hjyzY= +20250918074745.sql h1:2hNVQCXF/dVYXAh+T/7oBFgERGWxzVb2FXJjwkFWGCI= +20250923025134.sql h1:Ykz/qpHiGDXPsCsWTjydQFVSibZP2D+h2fIeb2h2JGA= +20250924051317.sql h1:yQuW6SwJxIOM5fcxeAaie5lSm1oLysU/C2hH2xNCVoQ= +20250929034321.sql h1:101FJ8VH12mrZWlt/X1gvKUGOhoiF8tFbjiapAjnHzg= +20250929034428.sql h1:i+pROD9p+g5dOmmZma6WF/0Hw5g3Ha28NN85iTo1K34= +20250930025550.sql h1:+F+CsCUXD/ql0tHGEow70GhPBX1ZybVn+bh/T4YMh7Y= +20250930140351.sql h1:9AAEG1AnOAH+o0+oHL5G7I8vqlWOhwRlCGyyCpT/y1Q= +20251002085604.sql h1:3xZ68eYp4urXRnvotNH1XvG2mYOSDV/j3zHEZ/txg5E= +20251003032030.sql h1:HB+mQ2lXMNomHDpaRhB/9IwYI9/YiDO5eOJ+nAQH/jw= +20251005060450.sql h1:LbtCE2b+8osM3CvnmQJH1uCPtn+d7WchsslBOz8bL3Q= +20251006041122.sql h1:MlS7f21z06sutnf9dIekt5fuHJr4lgcQ4uCuCXAGsfc= +20251006045658.sql h1:3FmGCPCzjgMPdWDRodZTsx3KVaodd9zB9ilib69aewk= +20251006045928.sql h1:Z5g31PmnzNwk/OKdODcxZGm8fjJQdMFK32Xfnt3bRHg= +20251007022859.sql h1:FO03zEfaNEk/aXwY81d5Lp3MoBB9kPQuXlXJ4BPiSR8= +20251008031337.sql h1:IYmKye5jNMkepsnEcUzaB0lLWDGzn7dO9zT3dZxIhgY= +20251008031554.sql h1:zqUmpXDFfFgDi7I8I/izxPG6D4SPeF8B3WfpnT6mo4Y= diff --git a/internal/domain/main-entities/midwife/dto.go b/internal/domain/main-entities/midwife/dto.go new file mode 100644 index 00000000..308f0559 --- /dev/null +++ b/internal/domain/main-entities/midwife/dto.go @@ -0,0 +1,69 @@ +package midwife + +import ( + ecore "simrs-vx/internal/domain/base-entities/core" + ee "simrs-vx/internal/domain/main-entities/employee" +) + +type CreateDto struct { + Employee_Id *uint `json:"employee_id"` + IHS_Number *string `json:"ihs_number" validate:"maxLength=20"` +} + +type ReadListDto struct { + FilterDto + Includes string `json:"includes"` + Preloads []string `json:"-"` + Pagination ecore.Pagination +} + +type FilterDto struct { + Employee_Id *uint `json:"employee_id"` + IHS_Number *string `json:"ihs_number"` +} + +type ReadDetailDto struct { + Id uint16 `json:"id"` + Employee_Id *uint `json:"employee_id"` + IHS_Number *string `json:"ihs_number"` +} + +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 + Employee_Id *uint `json:"employee_id"` + Employee *ee.Employee `json:"employee,omitempty"` + IHS_Number *string `json:"ihs_number"` +} + +func (d Midwife) ToResponse() ResponseDto { + resp := ResponseDto{ + Employee_Id: d.Employee_Id, + Employee: d.Employee, + IHS_Number: d.IHS_Number, + } + resp.Main = d.Main + return resp +} + +func ToResponseList(data []Midwife) []ResponseDto { + resp := make([]ResponseDto, len(data)) + for i, u := range data { + resp[i] = u.ToResponse() + } + return resp +} diff --git a/internal/domain/main-entities/midwife/entity.go b/internal/domain/main-entities/midwife/entity.go new file mode 100644 index 00000000..f98ba553 --- /dev/null +++ b/internal/domain/main-entities/midwife/entity.go @@ -0,0 +1,13 @@ +package midwife + +import ( + ecore "simrs-vx/internal/domain/base-entities/core" + ee "simrs-vx/internal/domain/main-entities/employee" +) + +type Midwife struct { + ecore.Main // adjust this according to the needs + Employee_Id *uint `json:"employee_id"` + Employee *ee.Employee `json:"employee,omitempty" gorm:"foreignKey:Employee_Id;references:Id"` + IHS_Number *string `json:"ihs_number" gorm:"unique;size:20"` +} diff --git a/internal/domain/main-entities/person-address/entity.go b/internal/domain/main-entities/person-address/entity.go index 960b32a9..eacfd9f0 100644 --- a/internal/domain/main-entities/person-address/entity.go +++ b/internal/domain/main-entities/person-address/entity.go @@ -10,5 +10,6 @@ type PersonAddress struct { 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"` } diff --git a/internal/domain/references/organization/organization.go b/internal/domain/references/organization/organization.go index 68edc332..bf11fbd6 100644 --- a/internal/domain/references/organization/organization.go +++ b/internal/domain/references/organization/organization.go @@ -31,12 +31,14 @@ const ( ITGCEmpFee ItemGroupCode = "employee-fee" ITGCDocFee ItemGroupCode = "doctor-fee" - 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 + 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 + IFGCCounter InfraGroupCode = "counter" // Counter + IFGCPubScreen InfraGroupCode = "public-screen" // Public Screen UTCReg UnitTypeCode = "reg" // Registrasi UTCExa UnitTypeCode = "exa" // Pemeriksaan diff --git a/internal/interface/migration/main-entities.go b/internal/interface/migration/main-entities.go index 4d0f79c1..9711c6bd 100644 --- a/internal/interface/migration/main-entities.go +++ b/internal/interface/migration/main-entities.go @@ -47,6 +47,7 @@ import ( medicinemethod "simrs-vx/internal/domain/main-entities/medicine-method" medicinemix "simrs-vx/internal/domain/main-entities/medicine-mix" medicinemixitem "simrs-vx/internal/domain/main-entities/medicine-mix-item" + midwife "simrs-vx/internal/domain/main-entities/midwife" nurse "simrs-vx/internal/domain/main-entities/nurse" nutritionist "simrs-vx/internal/domain/main-entities/nutritionist" patient "simrs-vx/internal/domain/main-entities/patient" @@ -147,5 +148,6 @@ func getMainEntities() []any { &mcuordersubitem.McuOrderSubItem{}, &consultation.Consultation{}, &chemo.Chemo{}, + &midwife.Midwife{}, } } From 6c47a8e1761af41963f20b200d9ce8546724dbc7 Mon Sep 17 00:00:00 2001 From: dpurbosakti Date: Wed, 8 Oct 2025 10:25:58 +0700 Subject: [PATCH 3/9] feat (person-address): add postalCode --- internal/domain/main-entities/person-address/dto.go | 3 +++ internal/use-case/main-use-case/person-address/helper.go | 1 + 2 files changed, 4 insertions(+) diff --git a/internal/domain/main-entities/person-address/dto.go b/internal/domain/main-entities/person-address/dto.go index 0fcd52df..821cf788 100644 --- a/internal/domain/main-entities/person-address/dto.go +++ b/internal/domain/main-entities/person-address/dto.go @@ -10,6 +10,7 @@ type CreateDto struct { 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"` } type ReadListDto struct { @@ -43,6 +44,7 @@ type ResponseDto struct { Rt string `json:"rt"` Rw string `json:"rw"` Village_Code string `json:"village_code"` + PostalCode string `json:"postalCode"` } func (d PersonAddress) ToResponse() ResponseDto { @@ -52,6 +54,7 @@ func (d PersonAddress) ToResponse() ResponseDto { Rt: d.Rt, Rw: d.Rw, Village_Code: d.Village_Code, + PostalCode: d.PostalCode, } resp.Main = d.Main return resp 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 a09c7b57..f3197d76 100644 --- a/internal/use-case/main-use-case/person-address/helper.go +++ b/internal/use-case/main-use-case/person-address/helper.go @@ -22,4 +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 } From 2b0c5ac577dff5c190626d2ec1a32b5e6de69e77 Mon Sep 17 00:00:00 2001 From: dpurbosakti Date: Wed, 8 Oct 2025 10:26:19 +0700 Subject: [PATCH 4/9] feat (midwife): add crud, user + midwife --- .../use-case/main-use-case/midwife/case.go | 279 ++++++++++++++++++ .../use-case/main-use-case/midwife/helper.go | 22 ++ .../use-case/main-use-case/midwife/lib.go | 157 ++++++++++ .../midwife/middleware-runner.go | 103 +++++++ .../main-use-case/midwife/middleware.go | 9 + .../use-case/main-use-case/midwife/tycovar.go | 44 +++ internal/use-case/main-use-case/user/case.go | 30 ++ 7 files changed, 644 insertions(+) create mode 100644 internal/use-case/main-use-case/midwife/case.go create mode 100644 internal/use-case/main-use-case/midwife/helper.go create mode 100644 internal/use-case/main-use-case/midwife/lib.go create mode 100644 internal/use-case/main-use-case/midwife/middleware-runner.go create mode 100644 internal/use-case/main-use-case/midwife/middleware.go create mode 100644 internal/use-case/main-use-case/midwife/tycovar.go diff --git a/internal/use-case/main-use-case/midwife/case.go b/internal/use-case/main-use-case/midwife/case.go new file mode 100644 index 00000000..908c0363 --- /dev/null +++ b/internal/use-case/main-use-case/midwife/case.go @@ -0,0 +1,279 @@ +package midwife + +import ( + e "simrs-vx/internal/domain/main-entities/midwife" + "strconv" + + dg "github.com/karincake/apem/db-gorm-pg" + d "github.com/karincake/dodol" + + pl "simrs-vx/pkg/logger" + pu "simrs-vx/pkg/use-case-helper" + + "gorm.io/gorm" +) + +const source = "midwife" + +func Create(input e.CreateDto) (*d.Data, error) { + data := e.Midwife{} + + event := pl.Event{ + Feature: "Create", + Source: source, + } + + // Start log + pl.SetLogInfo(&event, input, "started", "create") + + err := dg.I.Transaction(func(tx *gorm.DB) error { + mwRunner := newMiddlewareRunner(&event, tx) + mwRunner.setMwType(pu.MWTPre) + // Run pre-middleware + if err := mwRunner.RunCreateMiddleware(createPreMw, &input, &data); err != nil { + return err + } + + if resData, err := CreateData(input, &event, tx); err != nil { + return err + } else { + data = *resData + } + + mwRunner.setMwType(pu.MWTPost) + // Run post-middleware + if err := mwRunner.RunCreateMiddleware(createPostMw, &input, &data); err != nil { + return err + } + + pl.SetLogInfo(&event, nil, "complete") + + return nil + }) + + if err != nil { + return nil, err + } + + return &d.Data{ + Meta: d.II{ + "source": source, + "structure": "single-data", + "status": "created", + }, + Data: data.ToResponse(), + }, nil +} + +func ReadList(input e.ReadListDto) (*d.Data, error) { + var data *e.Midwife + var dataList []e.Midwife + var metaList *e.MetaDto + var err error + + event := pl.Event{ + Feature: "ReadList", + Source: source, + } + + // Start log + pl.SetLogInfo(&event, input, "started", "readList") + + err = dg.I.Transaction(func(tx *gorm.DB) error { + mwRunner := newMiddlewareRunner(&event, tx) + mwRunner.setMwType(pu.MWTPre) + // Run pre-middleware + if err := mwRunner.RunReadListMiddleware(readListPreMw, &input, data); err != nil { + 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 + } + + mwRunner.setMwType(pu.MWTPost) + // Run post-middleware + if err := mwRunner.RunReadListMiddleware(readListPostMw, &input, data); err != nil { + return err + } + + return nil + }) + + if err != nil { + return nil, err + } + + return &d.Data{ + Meta: d.IS{ + "source": source, + "structure": "list-data", + "status": "fetched", + "page_number": strconv.Itoa(metaList.PageNumber), + "page_size": strconv.Itoa(metaList.PageSize), + "record_totalCount": strconv.Itoa(metaList.Count), + "record_currentCount": strconv.Itoa(len(dataList)), + }, + Data: e.ToResponseList(dataList), + }, nil +} + +func ReadDetail(input e.ReadDetailDto) (*d.Data, error) { + var data *e.Midwife + var err error + + event := pl.Event{ + Feature: "ReadDetail", + Source: source, + } + + // Start log + pl.SetLogInfo(&event, input, "started", "readDetail") + + err = dg.I.Transaction(func(tx *gorm.DB) error { + mwRunner := newMiddlewareRunner(&event, tx) + mwRunner.setMwType(pu.MWTPre) + // Run pre-middleware + if err := mwRunner.RunReadDetailMiddleware(readDetailPreMw, &input, data); err != nil { + return err + } + + if data, err = ReadDetailData(input, &event, tx); err != nil { + return err + } + + mwRunner.setMwType(pu.MWTPost) + // Run post-middleware + if err := mwRunner.RunReadDetailMiddleware(readDetailPostMw, &input, data); err != nil { + return err + } + + return nil + }) + + if err != nil { + return nil, err + } + + return &d.Data{ + Meta: d.IS{ + "source": source, + "structure": "single-data", + "status": "fetched", + }, + Data: data.ToResponse(), + }, nil +} + +func Update(input e.UpdateDto) (*d.Data, error) { + rdDto := e.ReadDetailDto{Id: uint16(input.Id)} + var data *e.Midwife + var err error + + event := pl.Event{ + Feature: "Update", + Source: source, + } + + // Start log + pl.SetLogInfo(&event, input, "started", "update") + + err = dg.I.Transaction(func(tx *gorm.DB) error { + pl.SetLogInfo(&event, rdDto, "started", "DBReadDetail") + if data, err = ReadDetailData(rdDto, &event, tx); err != nil { + return err + } + + mwRunner := newMiddlewareRunner(&event, tx) + mwRunner.setMwType(pu.MWTPre) + // Run pre-middleware + if err := mwRunner.RunUpdateMiddleware(readDetailPreMw, &rdDto, data); err != nil { + return err + } + + if err := UpdateData(input, data, &event, tx); err != nil { + return err + } + + pl.SetLogInfo(&event, nil, "complete") + + mwRunner.setMwType(pu.MWTPost) + // Run post-middleware + if err := mwRunner.RunUpdateMiddleware(readDetailPostMw, &rdDto, data); err != nil { + return err + } + + return nil + }) + + if err != nil { + return nil, err + } + + return &d.Data{ + Meta: d.IS{ + "source": source, + "structure": "single-data", + "status": "updated", + }, + Data: data.ToResponse(), + }, nil + +} + +func Delete(input e.DeleteDto) (*d.Data, error) { + rdDto := e.ReadDetailDto{Id: uint16(input.Id)} + var data *e.Midwife + var err error + + event := pl.Event{ + Feature: "Delete", + Source: source, + } + + // Start log + pl.SetLogInfo(&event, input, "started", "delete") + + err = dg.I.Transaction(func(tx *gorm.DB) error { + pl.SetLogInfo(&event, rdDto, "started", "DBReadDetail") + if data, err = ReadDetailData(rdDto, &event, tx); err != nil { + return err + } + + mwRunner := newMiddlewareRunner(&event, tx) + mwRunner.setMwType(pu.MWTPre) + // Run pre-middleware + if err := mwRunner.RunDeleteMiddleware(readDetailPreMw, &rdDto, data); err != nil { + return err + } + + if err := DeleteData(data, &event, tx); err != nil { + return err + } + + mwRunner.setMwType(pu.MWTPost) + // Run post-middleware + if err := mwRunner.RunDeleteMiddleware(readDetailPostMw, &rdDto, data); err != nil { + return err + } + + return nil + }) + + if err != nil { + return nil, err + } + + return &d.Data{ + Meta: d.IS{ + "source": source, + "structure": "single-data", + "status": "deleted", + }, + Data: data.ToResponse(), + }, nil + +} diff --git a/internal/use-case/main-use-case/midwife/helper.go b/internal/use-case/main-use-case/midwife/helper.go new file mode 100644 index 00000000..5be74b86 --- /dev/null +++ b/internal/use-case/main-use-case/midwife/helper.go @@ -0,0 +1,22 @@ +/* +DESCRIPTION: +Any functions that are used internally by the use-case +*/ +package midwife + +import ( + e "simrs-vx/internal/domain/main-entities/midwife" +) + +func setData[T *e.CreateDto | *e.UpdateDto](input T, data *e.Midwife) { + var inputSrc *e.CreateDto + if inputT, ok := any(input).(*e.CreateDto); ok { + inputSrc = inputT + } else { + inputTemp := any(input).(*e.UpdateDto) + inputSrc = &inputTemp.CreateDto + } + + data.Employee_Id = inputSrc.Employee_Id + data.IHS_Number = inputSrc.IHS_Number +} diff --git a/internal/use-case/main-use-case/midwife/lib.go b/internal/use-case/main-use-case/midwife/lib.go new file mode 100644 index 00000000..b7b366d7 --- /dev/null +++ b/internal/use-case/main-use-case/midwife/lib.go @@ -0,0 +1,157 @@ +package midwife + +import ( + e "simrs-vx/internal/domain/main-entities/midwife" + + plh "simrs-vx/pkg/lib-helper" + pl "simrs-vx/pkg/logger" + pu "simrs-vx/pkg/use-case-helper" + + dg "github.com/karincake/apem/db-gorm-pg" + gh "github.com/karincake/getuk" + "gorm.io/gorm" +) + +func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.Midwife, error) { + pl.SetLogInfo(event, nil, "started", "DBCreate") + + data := e.Midwife{} + setData(&input, &data) + + var tx *gorm.DB + if len(dbx) > 0 { + tx = dbx[0] + } else { + tx = dg.I + } + + if err := tx.Create(&data).Error; err != nil { + return nil, plh.HandleCreateError(input, event, err) + } + + pl.SetLogInfo(event, nil, "complete") + return &data, nil +} + +func ReadListData(input e.ReadListDto, event *pl.Event, dbx ...*gorm.DB) ([]e.Midwife, *e.MetaDto, error) { + pl.SetLogInfo(event, input, "started", "DBReadList") + data := []e.Midwife{} + pagination := gh.Pagination{} + count := int64(0) + meta := e.MetaDto{} + + var tx *gorm.DB + if len(dbx) > 0 { + tx = dbx[0] + } else { + tx = dg.I + } + + if len(input.Preloads) > 0 { + for _, preload := range input.Preloads { + tx = tx.Preload(preload) + } + } + + tx = tx. + Model(&e.Midwife{}). + Scopes(gh.Filter(input.FilterDto)). + Count(&count). + Scopes(gh.Paginate(input, &pagination)). + Order("\"CreatedAt\" DESC") + + if err := tx.Find(&data).Error; err != nil { + if err == gorm.ErrRecordNotFound { + return nil, &meta, nil + } + event.Status = "failed" + event.ErrInfo = pl.ErrorInfo{ + Code: "data-get-fail", + Detail: "Database get failed", + Raw: err, + } + return nil, nil, pl.SetLogError(event, input) + + } + meta.Count = int(count) + meta.PageNumber = pagination.PageNumber + meta.PageSize = pagination.PageSize + + pl.SetLogInfo(event, nil, "complete") + return data, &meta, nil +} + +func ReadDetailData(input e.ReadDetailDto, event *pl.Event, dbx ...*gorm.DB) (*e.Midwife, error) { + pl.SetLogInfo(event, input, "started", "DBReadDetail") + data := e.Midwife{} + + var tx *gorm.DB + if len(dbx) > 0 { + tx = dbx[0] + } else { + tx = dg.I + } + + if input.Employee_Id != nil { + tx = tx.Where("\"Employee_Id\" = ?", *input.Employee_Id) + } + if input.Id > 0 { + tx = tx.Where("\"Id\" = ?", input.Id) + } + if err := tx.First(&data).Error; err != nil { + if processedErr := pu.HandleReadError(err, event, source, input.Id, data); processedErr != nil { + return nil, processedErr + } + } + + pl.SetLogInfo(event, nil, "complete") + return &data, nil +} + +func UpdateData(input e.UpdateDto, data *e.Midwife, event *pl.Event, dbx ...*gorm.DB) error { + pl.SetLogInfo(event, data, "started", "DBUpdate") + setData(&input, data) + + var tx *gorm.DB + if len(dbx) > 0 { + tx = dbx[0] + } else { + tx = dg.I + } + + if err := tx.Save(&data).Error; err != nil { + event.Status = "failed" + event.ErrInfo = pl.ErrorInfo{ + Code: "data-update-fail", + Detail: "Database update failed", + Raw: err, + } + return pl.SetLogError(event, input) + } + + pl.SetLogInfo(event, nil, "complete") + return nil +} + +func DeleteData(data *e.Midwife, event *pl.Event, dbx ...*gorm.DB) error { + pl.SetLogInfo(event, data, "started", "DBDelete") + var tx *gorm.DB + if len(dbx) > 0 { + tx = dbx[0] + } else { + tx = dg.I + } + + if err := tx.Delete(&data).Error; err != nil { + event.Status = "failed" + event.ErrInfo = pl.ErrorInfo{ + Code: "data-delete-fail", + Detail: "Database delete failed", + Raw: err, + } + return pl.SetLogError(event, data) + } + + pl.SetLogInfo(event, nil, "complete") + return nil +} diff --git a/internal/use-case/main-use-case/midwife/middleware-runner.go b/internal/use-case/main-use-case/midwife/middleware-runner.go new file mode 100644 index 00000000..dae4e27b --- /dev/null +++ b/internal/use-case/main-use-case/midwife/middleware-runner.go @@ -0,0 +1,103 @@ +package midwife + +import ( + e "simrs-vx/internal/domain/main-entities/midwife" + pl "simrs-vx/pkg/logger" + pu "simrs-vx/pkg/use-case-helper" + + "gorm.io/gorm" +) + +type middlewareRunner struct { + Event *pl.Event + Tx *gorm.DB + MwType pu.MWType +} + +// NewMiddlewareExecutor creates a new middleware executor +func newMiddlewareRunner(event *pl.Event, tx *gorm.DB) *middlewareRunner { + return &middlewareRunner{ + Event: event, + Tx: tx, + } +} + +// ExecuteCreateMiddleware executes create middleware +func (me *middlewareRunner) RunCreateMiddleware(middlewares []createMw, input *e.CreateDto, data *e.Midwife) error { + for _, middleware := range middlewares { + logData := pu.GetLogData(input, data) + + pl.SetLogInfo(me.Event, logData, "started", middleware.Name) + + if err := middleware.Func(input, data, me.Tx); err != nil { + return pu.HandleMiddlewareError(me.Event, string(me.MwType), middleware.Name, logData, err) + } + + pl.SetLogInfo(me.Event, nil, "complete") + } + return nil +} + +func (me *middlewareRunner) RunReadListMiddleware(middlewares []readListMw, input *e.ReadListDto, data *e.Midwife) error { + for _, middleware := range middlewares { + logData := pu.GetLogData(input, data) + + pl.SetLogInfo(me.Event, logData, "started", middleware.Name) + + if err := middleware.Func(input, data, me.Tx); err != nil { + return pu.HandleMiddlewareError(me.Event, string(me.MwType), middleware.Name, logData, err) + } + + pl.SetLogInfo(me.Event, nil, "complete") + } + return nil +} + +func (me *middlewareRunner) RunReadDetailMiddleware(middlewares []readDetailMw, input *e.ReadDetailDto, data *e.Midwife) error { + for _, middleware := range middlewares { + logData := pu.GetLogData(input, data) + + pl.SetLogInfo(me.Event, logData, "started", middleware.Name) + + if err := middleware.Func(input, data, me.Tx); err != nil { + return pu.HandleMiddlewareError(me.Event, string(me.MwType), middleware.Name, logData, err) + } + + pl.SetLogInfo(me.Event, nil, "complete") + } + return nil +} + +func (me *middlewareRunner) RunUpdateMiddleware(middlewares []readDetailMw, input *e.ReadDetailDto, data *e.Midwife) error { + for _, middleware := range middlewares { + logData := pu.GetLogData(input, data) + + pl.SetLogInfo(me.Event, logData, "started", middleware.Name) + + if err := middleware.Func(input, data, me.Tx); err != nil { + return pu.HandleMiddlewareError(me.Event, string(me.MwType), middleware.Name, logData, err) + } + + pl.SetLogInfo(me.Event, nil, "complete") + } + return nil +} + +func (me *middlewareRunner) RunDeleteMiddleware(middlewares []readDetailMw, input *e.ReadDetailDto, data *e.Midwife) error { + for _, middleware := range middlewares { + logData := pu.GetLogData(input, data) + + pl.SetLogInfo(me.Event, logData, "started", middleware.Name) + + if err := middleware.Func(input, data, me.Tx); err != nil { + return pu.HandleMiddlewareError(me.Event, string(me.MwType), middleware.Name, logData, err) + } + + pl.SetLogInfo(me.Event, nil, "complete") + } + return nil +} + +func (me *middlewareRunner) setMwType(mwType pu.MWType) { + me.MwType = mwType +} diff --git a/internal/use-case/main-use-case/midwife/middleware.go b/internal/use-case/main-use-case/midwife/middleware.go new file mode 100644 index 00000000..c7afa001 --- /dev/null +++ b/internal/use-case/main-use-case/midwife/middleware.go @@ -0,0 +1,9 @@ +package midwife + +// example of middleware +// func init() { +// createPreMw = append(createPreMw, +// CreateMw{Name: "modif-input", Func: pm.ModifInput}, +// CreateMw{Name: "check-data", Func: pm.CheckData}, +// ) +// } diff --git a/internal/use-case/main-use-case/midwife/tycovar.go b/internal/use-case/main-use-case/midwife/tycovar.go new file mode 100644 index 00000000..953d8e20 --- /dev/null +++ b/internal/use-case/main-use-case/midwife/tycovar.go @@ -0,0 +1,44 @@ +/* +DESCRIPTION: +A sample, part of the package that contains type, constants, and/or variables. + +In this sample it also provides type and variable regarding the needs of the +middleware to separate from main use-case which has the basic CRUD +functionality. The purpose of this is to make the code more maintainable. +*/ +package midwife + +import ( + "gorm.io/gorm" + + e "simrs-vx/internal/domain/main-entities/midwife" +) + +type createMw struct { + Name string + Func func(input *e.CreateDto, data *e.Midwife, tx *gorm.DB) error +} + +type readListMw struct { + Name string + Func func(input *e.ReadListDto, data *e.Midwife, tx *gorm.DB) error +} + +type readDetailMw struct { + Name string + Func func(input *e.ReadDetailDto, data *e.Midwife, tx *gorm.DB) error +} + +type UpdateMw = readDetailMw +type DeleteMw = readDetailMw + +var createPreMw []createMw // preprocess middleware +var createPostMw []createMw // postprocess middleware +var readListPreMw []readListMw // .. +var readListPostMw []readListMw // .. +var readDetailPreMw []readDetailMw +var readDetailPostMw []readDetailMw +var updatePreMw []readDetailMw +var updatePostMw []readDetailMw +var deletePreMw []readDetailMw +var deletePostMw []readDetailMw diff --git a/internal/use-case/main-use-case/user/case.go b/internal/use-case/main-use-case/user/case.go index f33286bb..24f9c6da 100644 --- a/internal/use-case/main-use-case/user/case.go +++ b/internal/use-case/main-use-case/user/case.go @@ -9,6 +9,7 @@ import ( ed "simrs-vx/internal/domain/main-entities/doctor" ee "simrs-vx/internal/domain/main-entities/employee" el "simrs-vx/internal/domain/main-entities/laborant" + em "simrs-vx/internal/domain/main-entities/midwife" en "simrs-vx/internal/domain/main-entities/nurse" et "simrs-vx/internal/domain/main-entities/nutritionist" ep "simrs-vx/internal/domain/main-entities/pharmacist" @@ -18,6 +19,7 @@ import ( ud "simrs-vx/internal/use-case/main-use-case/doctor" ue "simrs-vx/internal/use-case/main-use-case/employee" ul "simrs-vx/internal/use-case/main-use-case/laborant" + um "simrs-vx/internal/use-case/main-use-case/midwife" un "simrs-vx/internal/use-case/main-use-case/nurse" ut "simrs-vx/internal/use-case/main-use-case/nutritionist" upe "simrs-vx/internal/use-case/main-use-case/person" @@ -150,6 +152,14 @@ func Create(input e.CreateDto) (*d.Data, error) { if _, err := ul.CreateData(createLaborant, &event, tx); err != nil { return err } + case ero.UPCMwi: + createMidwife := em.CreateDto{ + Employee_Id: &employeeData.Id, + IHS_Number: input.IHS_Number, + } + if _, err := um.CreateData(em.CreateDto(createMidwife), &event, tx); err != nil { + return err + } default: return errors.New("invalid employee position") } @@ -475,6 +485,26 @@ func Update(input e.UpdateDto) (*d.Data, error) { if _, err := ul.CreateData(createLab, &event, tx); err != nil { return err } + case ero.UPCMwi: + readMidwife := em.ReadDetailDto{Employee_Id: &employeeData.Id} + readMidwifeData, err := um.ReadDetailData(readMidwife, &event, tx) + if err != nil { + return err + } + createMidwife := em.CreateDto{ + Employee_Id: &employeeData.Id, + IHS_Number: input.IHS_Number, + } + if readMidwifeData != nil { + if err := um.UpdateData(em.UpdateDto{CreateDto: createMidwife}, readMidwifeData, &event, tx); err != nil { + return err + } + return nil + } + + if _, err := um.CreateData(createMidwife, &event, tx); err != nil { + return err + } default: return errors.New("invalid employee position") } From e9b262175d22d0c2ba2da1055471f6cd675496d4 Mon Sep 17 00:00:00 2001 From: dpurbosakti Date: Wed, 8 Oct 2025 11:41:53 +0700 Subject: [PATCH 5/9] fix (area): fix pagination area data source --- internal/domain/main-entities/district/dto.go | 9 ++++++- internal/domain/main-entities/province/dto.go | 25 +++++++++++-------- internal/domain/main-entities/regency/dto.go | 9 ++++++- internal/domain/main-entities/uom/dto.go | 12 ++++++--- internal/domain/main-entities/village/dto.go | 9 ++++++- .../use-case/main-use-case/district/case.go | 3 +++ .../use-case/main-use-case/district/lib.go | 10 +++++++- .../use-case/main-use-case/province/case.go | 3 +++ .../use-case/main-use-case/province/lib.go | 10 +++++++- .../use-case/main-use-case/regency/case.go | 3 +++ .../use-case/main-use-case/regency/lib.go | 10 +++++++- internal/use-case/main-use-case/uom/case.go | 3 +++ internal/use-case/main-use-case/uom/lib.go | 8 +++++- .../use-case/main-use-case/village/case.go | 3 +++ .../use-case/main-use-case/village/lib.go | 10 +++++++- 15 files changed, 106 insertions(+), 21 deletions(-) diff --git a/internal/domain/main-entities/district/dto.go b/internal/domain/main-entities/district/dto.go index be0f6c01..ee81aeec 100644 --- a/internal/domain/main-entities/district/dto.go +++ b/internal/domain/main-entities/district/dto.go @@ -12,10 +12,17 @@ type CreateDto struct { } type ReadListDto struct { + FilterDto + Includes string `json:"includes"` + Preloads []string `json:"-"` + Search string `json:"search"` + Pagination ecore.Pagination +} + +type FilterDto struct { Regency_Code string `json:"regency-code"` Code string `json:"code"` Name string `json:"name"` - Pagination ecore.Pagination } type ReadDetailDto struct { diff --git a/internal/domain/main-entities/province/dto.go b/internal/domain/main-entities/province/dto.go index d2cfc1ca..595db5a4 100644 --- a/internal/domain/main-entities/province/dto.go +++ b/internal/domain/main-entities/province/dto.go @@ -2,6 +2,7 @@ package province import ( ecore "simrs-vx/internal/domain/base-entities/core" + er "simrs-vx/internal/domain/main-entities/regency" ) type CreateDto struct { @@ -10,11 +11,18 @@ type CreateDto struct { } type ReadListDto struct { - Code string `json:"code"` - Name string `json:"name"` + FilterDto + Includes string `json:"includes"` + Preloads []string `json:"-"` + Search string `json:"search"` Pagination ecore.Pagination } +type FilterDto struct { + Code string `json:"code"` + Name string `json:"name"` +} + type ReadDetailDto struct { Id int16 `json:"id"` Code *string `json:"code"` @@ -36,17 +44,14 @@ type MetaDto struct { } type ResponseDto struct { - Id int16 `json:"id"` - Code string `json:"code"` - Name string `json:"name"` + Id int16 `json:"id"` + Code string `json:"code"` + Name string `json:"name"` + Regencies []*er.Regency `json:"regencies,omitempty"` } func (d Province) ToResponse() ResponseDto { - resp := ResponseDto{ - Id: d.Id, - Code: d.Code, - Name: d.Name, - } + resp := ResponseDto(d) return resp } diff --git a/internal/domain/main-entities/regency/dto.go b/internal/domain/main-entities/regency/dto.go index 61c131fe..9408096b 100644 --- a/internal/domain/main-entities/regency/dto.go +++ b/internal/domain/main-entities/regency/dto.go @@ -12,10 +12,17 @@ type CreateDto struct { } type ReadListDto struct { + FilterDto + Includes string `json:"includes"` + Preloads []string `json:"-"` + Search string `json:"search"` + Pagination ecore.Pagination +} + +type FilterDto struct { Province_Code string `json:"province-code"` Code string `json:"code"` Name string `json:"name"` - Pagination ecore.Pagination } type ReadDetailDto struct { diff --git a/internal/domain/main-entities/uom/dto.go b/internal/domain/main-entities/uom/dto.go index ef50ea4b..30df9752 100644 --- a/internal/domain/main-entities/uom/dto.go +++ b/internal/domain/main-entities/uom/dto.go @@ -10,12 +10,18 @@ type CreateDto struct { } type ReadListDto struct { - Code string `json:"code"` - Name string `json:"name"` - Search string `json:"search"` + FilterDto + Includes string `json:"includes"` + Preloads []string `json:"-"` + Search string `json:"search"` Pagination ecore.Pagination } +type FilterDto struct { + Code string `json:"code"` + Name string `json:"name"` +} + type ReadDetailDto struct { Id uint16 `json:"id"` Code *string `json:"code"` diff --git a/internal/domain/main-entities/village/dto.go b/internal/domain/main-entities/village/dto.go index 842a1cb6..85448959 100644 --- a/internal/domain/main-entities/village/dto.go +++ b/internal/domain/main-entities/village/dto.go @@ -11,10 +11,17 @@ type CreateDto struct { } type ReadListDto struct { + FilterDto + Includes string `json:"includes"` + Preloads []string `json:"-"` + Search string `json:"search"` + Pagination ecore.Pagination +} + +type FilterDto struct { District_Code string `json:"district-code"` Code string `json:"code"` Name string `json:"name"` - Pagination ecore.Pagination } type ReadDetailDto struct { diff --git a/internal/use-case/main-use-case/district/case.go b/internal/use-case/main-use-case/district/case.go index b7a4b1a0..8ab41024 100644 --- a/internal/use-case/main-use-case/district/case.go +++ b/internal/use-case/main-use-case/district/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/district/lib.go b/internal/use-case/main-use-case/district/lib.go index 26f6cf07..b0454716 100644 --- a/internal/use-case/main-use-case/district/lib.go +++ b/internal/use-case/main-use-case/district/lib.go @@ -47,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.District{}). - Scopes(gh.Filter(input)). + Scopes(gh.Filter(input.FilterDto)). Count(&count). Scopes(gh.Paginate(input, &pagination)) diff --git a/internal/use-case/main-use-case/province/case.go b/internal/use-case/main-use-case/province/case.go index 50d5e7ab..8c29ab2c 100644 --- a/internal/use-case/main-use-case/province/case.go +++ b/internal/use-case/main-use-case/province/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/province/lib.go b/internal/use-case/main-use-case/province/lib.go index 9955b076..2314459d 100644 --- a/internal/use-case/main-use-case/province/lib.go +++ b/internal/use-case/main-use-case/province/lib.go @@ -47,9 +47,17 @@ func ReadListData(input e.ReadListDto, event *pl.Event, dbx ...*gorm.DB) ([]e.Pr 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.Province{}). - Scopes(gh.Filter(input)). + Scopes(gh.Filter(input.FilterDto)). Count(&count). Scopes(gh.Paginate(input, &pagination)) diff --git a/internal/use-case/main-use-case/regency/case.go b/internal/use-case/main-use-case/regency/case.go index c6ed4b4f..c0ca1475 100644 --- a/internal/use-case/main-use-case/regency/case.go +++ b/internal/use-case/main-use-case/regency/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/regency/lib.go b/internal/use-case/main-use-case/regency/lib.go index 4f66c9c0..fb049908 100644 --- a/internal/use-case/main-use-case/regency/lib.go +++ b/internal/use-case/main-use-case/regency/lib.go @@ -47,9 +47,17 @@ func ReadListData(input e.ReadListDto, event *pl.Event, dbx ...*gorm.DB) ([]e.Re 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.Regency{}). - Scopes(gh.Filter(input)). + Scopes(gh.Filter(input.FilterDto)). Count(&count). Scopes(gh.Paginate(input, &pagination)) diff --git a/internal/use-case/main-use-case/uom/case.go b/internal/use-case/main-use-case/uom/case.go index 29c4516b..66b932c0 100644 --- a/internal/use-case/main-use-case/uom/case.go +++ b/internal/use-case/main-use-case/uom/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/uom/lib.go b/internal/use-case/main-use-case/uom/lib.go index 3658faf2..9c524c8d 100644 --- a/internal/use-case/main-use-case/uom/lib.go +++ b/internal/use-case/main-use-case/uom/lib.go @@ -47,11 +47,17 @@ func ReadListData(input e.ReadListDto, event *pl.Event, dbx ...*gorm.DB) ([]e.Uo 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.Uom{}). - 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/village/case.go b/internal/use-case/main-use-case/village/case.go index 787fdb12..375cf605 100644 --- a/internal/use-case/main-use-case/village/case.go +++ b/internal/use-case/main-use-case/village/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/village/lib.go b/internal/use-case/main-use-case/village/lib.go index 1c6a48e3..de30dc9d 100644 --- a/internal/use-case/main-use-case/village/lib.go +++ b/internal/use-case/main-use-case/village/lib.go @@ -47,9 +47,17 @@ func ReadListData(input e.ReadListDto, event *pl.Event, dbx ...*gorm.DB) ([]e.Vi 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.Village{}). - Scopes(gh.Filter(input)). + Scopes(gh.Filter(input.FilterDto)). Count(&count). Scopes(gh.Paginate(input, &pagination)) From 7940c895b1575c2ae529d55183d13181e99517c3 Mon Sep 17 00:00:00 2001 From: dpurbosakti Date: Wed, 8 Oct 2025 12:21:42 +0700 Subject: [PATCH 6/9] fix pagination and search --- internal/domain/main-entities/diagnose-src/dto.go | 13 ++++++++++--- .../domain/main-entities/division-position/dto.go | 1 + internal/domain/main-entities/ethnic/dto.go | 12 +++++++++--- .../domain/main-entities/insurance-company/dto.go | 1 + internal/domain/main-entities/item/dto.go | 1 + internal/domain/main-entities/language/dto.go | 10 ++++++++-- .../domain/main-entities/mcu-src-category/dto.go | 9 ++++++++- .../domain/main-entities/medicine-group/dto.go | 11 +++++++++-- .../domain/main-entities/medicine-method/dto.go | 11 +++++++++-- .../domain/main-entities/pharmacy-company/dto.go | 9 ++++++++- internal/domain/main-entities/procedure-src/dto.go | 14 ++++++++++---- internal/use-case/main-use-case/device/lib.go | 2 +- .../use-case/main-use-case/diagnose-src/case.go | 3 +++ .../use-case/main-use-case/diagnose-src/lib.go | 10 +++++++++- .../main-use-case/division-position/lib.go | 2 ++ internal/use-case/main-use-case/division/lib.go | 2 +- internal/use-case/main-use-case/ethnic/case.go | 3 +++ internal/use-case/main-use-case/ethnic/lib.go | 4 ++-- internal/use-case/main-use-case/infra/lib.go | 2 +- .../use-case/main-use-case/installation/lib.go | 2 +- .../main-use-case/insurance-company/lib.go | 2 ++ internal/use-case/main-use-case/item/lib.go | 2 ++ internal/use-case/main-use-case/language/case.go | 3 +++ internal/use-case/main-use-case/language/lib.go | 2 +- .../main-use-case/mcu-src-category/case.go | 3 +++ .../use-case/main-use-case/mcu-src-category/lib.go | 10 +++++++++- internal/use-case/main-use-case/mcu-src/lib.go | 2 +- internal/use-case/main-use-case/mcu-sub-src/lib.go | 2 +- .../main-use-case/medical-action-src/lib.go | 2 +- .../use-case/main-use-case/medicine-group/case.go | 3 +++ .../use-case/main-use-case/medicine-group/lib.go | 10 +++++++++- .../use-case/main-use-case/medicine-method/case.go | 3 +++ .../use-case/main-use-case/medicine-method/lib.go | 10 +++++++++- internal/use-case/main-use-case/medicine/lib.go | 4 ++-- .../main-use-case/pharmacy-company/case.go | 3 +++ .../use-case/main-use-case/pharmacy-company/lib.go | 10 +++++++++- .../use-case/main-use-case/procedure-src/case.go | 3 +++ .../use-case/main-use-case/procedure-src/lib.go | 4 ++-- internal/use-case/main-use-case/province/lib.go | 4 ++-- internal/use-case/main-use-case/regency/lib.go | 2 +- internal/use-case/main-use-case/specialist/lib.go | 2 +- .../use-case/main-use-case/subspecialist/lib.go | 2 +- internal/use-case/main-use-case/unit/lib.go | 2 +- internal/use-case/main-use-case/uom/lib.go | 2 +- internal/use-case/main-use-case/village/lib.go | 2 +- pkg/lib-helper/lib-helper.go | 6 ++++-- 46 files changed, 175 insertions(+), 47 deletions(-) diff --git a/internal/domain/main-entities/diagnose-src/dto.go b/internal/domain/main-entities/diagnose-src/dto.go index 2f135368..5182b522 100644 --- a/internal/domain/main-entities/diagnose-src/dto.go +++ b/internal/domain/main-entities/diagnose-src/dto.go @@ -11,12 +11,19 @@ type CreateDto struct { } type ReadListDto struct { - Code string `json:"code"` - Name string `json:"name"` - IndName string `json:"indName"` + FilterDto + Includes string `json:"includes"` + Preloads []string `json:"-"` + Search string `json:"search"` Pagination ecore.Pagination } +type FilterDto struct { + Code string `json:"code"` + Name string `json:"name"` + IndName string `json:"indName"` +} + type ReadDetailDto struct { Id uint16 `json:"id"` Code *string `json:"code"` diff --git a/internal/domain/main-entities/division-position/dto.go b/internal/domain/main-entities/division-position/dto.go index 5fefe554..d746d855 100644 --- a/internal/domain/main-entities/division-position/dto.go +++ b/internal/domain/main-entities/division-position/dto.go @@ -17,6 +17,7 @@ type ReadListDto struct { FilterDto Includes string `json:"includes"` Preloads []string `json:"-"` + Search string `json:"search"` Pagination ecore.Pagination } diff --git a/internal/domain/main-entities/ethnic/dto.go b/internal/domain/main-entities/ethnic/dto.go index a25ced65..2fac2e81 100644 --- a/internal/domain/main-entities/ethnic/dto.go +++ b/internal/domain/main-entities/ethnic/dto.go @@ -10,12 +10,18 @@ type CreateDto struct { } type ReadListDto struct { - Code string `json:"code"` - Name string `json:"name"` - Search string `json:"search"` + FilterDto + Includes string `json:"includes"` + Preloads []string `json:"-"` + Search string `json:"search"` Pagination ecore.Pagination } +type FilterDto struct { + Code string `json:"code"` + Name string `json:"name"` +} + type ReadDetailDto struct { Id uint16 `json:"id"` Code *string `json:"code"` diff --git a/internal/domain/main-entities/insurance-company/dto.go b/internal/domain/main-entities/insurance-company/dto.go index 93966c71..b42137b5 100644 --- a/internal/domain/main-entities/insurance-company/dto.go +++ b/internal/domain/main-entities/insurance-company/dto.go @@ -17,6 +17,7 @@ type ReadListDto struct { FilterDto Includes string `json:"includes"` Preloads []string `json:"-"` + Search string `json:"search"` Pagination ecore.Pagination } diff --git a/internal/domain/main-entities/item/dto.go b/internal/domain/main-entities/item/dto.go index 3d48e2bb..7a7aba50 100644 --- a/internal/domain/main-entities/item/dto.go +++ b/internal/domain/main-entities/item/dto.go @@ -19,6 +19,7 @@ type ReadListDto struct { FilterDto Includes string `json:"includes"` Preloads []string `json:"-"` + Search string `json:"search"` Pagination ecore.Pagination } diff --git a/internal/domain/main-entities/language/dto.go b/internal/domain/main-entities/language/dto.go index 79ae648c..30bf9eaf 100644 --- a/internal/domain/main-entities/language/dto.go +++ b/internal/domain/main-entities/language/dto.go @@ -10,12 +10,18 @@ type CreateDto struct { } type ReadListDto struct { - Code string `json:"code"` - Name string `json:"name"` + FilterDto + Includes string `json:"includes"` + Preloads []string Search string `json:"search"` Pagination ecore.Pagination } +type FilterDto struct { + Code string `json:"code"` + Name string `json:"name"` +} + type ReadDetailDto struct { Id uint16 `json:"id"` Code string `json:"code"` diff --git a/internal/domain/main-entities/mcu-src-category/dto.go b/internal/domain/main-entities/mcu-src-category/dto.go index bf2deb4a..34d6463c 100644 --- a/internal/domain/main-entities/mcu-src-category/dto.go +++ b/internal/domain/main-entities/mcu-src-category/dto.go @@ -13,10 +13,17 @@ type CreateDto struct { } type ReadListDto struct { + FilterDto + Includes string `json:"includes"` + Preloads []string `json:"-"` + Search string `json:"search"` + Pagination ecore.Pagination +} + +type FilterDto struct { Code string `json:"code"` Name string `json:"name"` Scope_Code *ere.CheckupScopeCode `json:"scope-code"` - Pagination ecore.Pagination } type ReadDetailDto struct { diff --git a/internal/domain/main-entities/medicine-group/dto.go b/internal/domain/main-entities/medicine-group/dto.go index c392e46f..91b52eaa 100644 --- a/internal/domain/main-entities/medicine-group/dto.go +++ b/internal/domain/main-entities/medicine-group/dto.go @@ -10,11 +10,18 @@ type CreateDto struct { } type ReadListDto struct { - Code string `json:"code"` - Name string `json:"name"` + FilterDto + Includes string `json:"includes"` + Preloads []string `json:"-"` + Search string `json:"search"` Pagination ecore.Pagination } +type FilterDto struct { + Code string `json:"code"` + Name string `json:"name"` +} + type ReadDetailDto struct { Id uint16 `json:"id"` Code *string `json:"code"` diff --git a/internal/domain/main-entities/medicine-method/dto.go b/internal/domain/main-entities/medicine-method/dto.go index 337eb6e6..2c1018ac 100644 --- a/internal/domain/main-entities/medicine-method/dto.go +++ b/internal/domain/main-entities/medicine-method/dto.go @@ -10,11 +10,18 @@ type CreateDto struct { } type ReadListDto struct { - Code string `json:"code"` - Name string `json:"name"` + FilterDto + Includes string `json:"includes"` + Preloads []string `json:"-"` + Search string `json:"search"` Pagination ecore.Pagination } +type FilterDto struct { + Code string `json:"code"` + Name string `json:"name"` +} + type ReadDetailDto struct { Id uint16 `json:"id"` Code *string `json:"code"` diff --git a/internal/domain/main-entities/pharmacy-company/dto.go b/internal/domain/main-entities/pharmacy-company/dto.go index ed61fd61..19c128fa 100644 --- a/internal/domain/main-entities/pharmacy-company/dto.go +++ b/internal/domain/main-entities/pharmacy-company/dto.go @@ -11,10 +11,17 @@ type CreateDto struct { } type ReadListDto struct { + FilterDto + Includes string `json:"includes"` + Preloads []string `json:"-"` + Search string `json:"search"` + Pagination ecore.Pagination +} + +type FilterDto struct { Code string `json:"code"` Name string `json:"name"` Regency_Code string `json:"regency-code"` - Pagination ecore.Pagination } type ReadDetailDto struct { diff --git a/internal/domain/main-entities/procedure-src/dto.go b/internal/domain/main-entities/procedure-src/dto.go index f047fba1..e608e7c7 100644 --- a/internal/domain/main-entities/procedure-src/dto.go +++ b/internal/domain/main-entities/procedure-src/dto.go @@ -11,13 +11,19 @@ type CreateDto struct { } type ReadListDto struct { - Code string `json:"code"` - Name string `json:"name"` - IndName string `json:"indName"` - Search string `json:"search"` + FilterDto + Includes string `json:"includes"` + Preloads []string `json:"-"` + Search string `json:"search"` Pagination ecore.Pagination } +type FilterDto struct { + Code string `json:"code"` + Name string `json:"name"` + IndName string `json:"indName"` +} + type ReadDetailDto struct { Id uint16 `json:"id"` Code *string `json:"code"` diff --git a/internal/use-case/main-use-case/device/lib.go b/internal/use-case/main-use-case/device/lib.go index c606b645..a3455000 100644 --- a/internal/use-case/main-use-case/device/lib.go +++ b/internal/use-case/main-use-case/device/lib.go @@ -53,7 +53,7 @@ func ReadListData(input e.ReadListDto, event *pl.Event, dbx ...*gorm.DB) ([]e.De } } - plh.SearchCodeOrName(input.Search, tx) + tx = plh.SearchCodeOrName(input.Search, tx) tx = tx. Model(&e.Device{}). diff --git a/internal/use-case/main-use-case/diagnose-src/case.go b/internal/use-case/main-use-case/diagnose-src/case.go index 184e68a8..587305ba 100644 --- a/internal/use-case/main-use-case/diagnose-src/case.go +++ b/internal/use-case/main-use-case/diagnose-src/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/diagnose-src/lib.go b/internal/use-case/main-use-case/diagnose-src/lib.go index c572a35d..eedce90a 100644 --- a/internal/use-case/main-use-case/diagnose-src/lib.go +++ b/internal/use-case/main-use-case/diagnose-src/lib.go @@ -47,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) + } + } + + tx = plh.SearchCodeOrName(input.Search, tx) + tx = tx. Model(&e.DiagnoseSrc{}). - 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/division-position/lib.go b/internal/use-case/main-use-case/division-position/lib.go index 322e5593..d7d191e9 100644 --- a/internal/use-case/main-use-case/division-position/lib.go +++ b/internal/use-case/main-use-case/division-position/lib.go @@ -53,6 +53,8 @@ func ReadListData(input e.ReadListDto, event *pl.Event, dbx ...*gorm.DB) ([]e.Di } } + tx = plh.SearchCodeOrName(input.Search, tx) + tx = tx. Model(&e.DivisionPosition{}). Preload("Division"). diff --git a/internal/use-case/main-use-case/division/lib.go b/internal/use-case/main-use-case/division/lib.go index e8713508..2d431013 100644 --- a/internal/use-case/main-use-case/division/lib.go +++ b/internal/use-case/main-use-case/division/lib.go @@ -53,7 +53,7 @@ func ReadListData(input e.ReadListDto, event *pl.Event, dbx ...*gorm.DB) ([]e.Di } } - plh.SearchCodeOrName(input.Search, tx) + tx = plh.SearchCodeOrName(input.Search, tx) if input.OnlyHaveChildren { tx = tx.Where(` diff --git a/internal/use-case/main-use-case/ethnic/case.go b/internal/use-case/main-use-case/ethnic/case.go index c8ca95a1..5885f742 100644 --- a/internal/use-case/main-use-case/ethnic/case.go +++ b/internal/use-case/main-use-case/ethnic/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/ethnic/lib.go b/internal/use-case/main-use-case/ethnic/lib.go index 716da183..294cf020 100644 --- a/internal/use-case/main-use-case/ethnic/lib.go +++ b/internal/use-case/main-use-case/ethnic/lib.go @@ -47,11 +47,11 @@ func ReadListData(input e.ReadListDto, event *pl.Event, dbx ...*gorm.DB) ([]e.Et tx = dg.I } - plh.SearchCodeOrName(input.Search, tx) + tx = plh.SearchCodeOrName(input.Search, tx) tx = tx. Model(&e.Ethnic{}). - 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/infra/lib.go b/internal/use-case/main-use-case/infra/lib.go index 303fce88..2189ce89 100644 --- a/internal/use-case/main-use-case/infra/lib.go +++ b/internal/use-case/main-use-case/infra/lib.go @@ -53,7 +53,7 @@ func ReadListData(input e.ReadListDto, event *pl.Event, dbx ...*gorm.DB) ([]e.In } } - plh.SearchCodeOrName(input.Search, tx) + tx = plh.SearchCodeOrName(input.Search, tx) if input.OnlyHaveChildren { tx = tx.Where(` diff --git a/internal/use-case/main-use-case/installation/lib.go b/internal/use-case/main-use-case/installation/lib.go index 7178cd18..b491bdb7 100644 --- a/internal/use-case/main-use-case/installation/lib.go +++ b/internal/use-case/main-use-case/installation/lib.go @@ -53,7 +53,7 @@ func ReadListData(input e.ReadListDto, event *pl.Event, dbx ...*gorm.DB) ([]e.In } } - plh.SearchCodeOrName(input.Search, tx) + tx = plh.SearchCodeOrName(input.Search, tx) tx = tx. Model(&e.Installation{}). 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 4dc5bb6f..72d8185b 100644 --- a/internal/use-case/main-use-case/insurance-company/lib.go +++ b/internal/use-case/main-use-case/insurance-company/lib.go @@ -53,6 +53,8 @@ func ReadListData(input e.ReadListDto, event *pl.Event, dbx ...*gorm.DB) ([]e.In } } + tx = plh.SearchCodeOrName(input.Search, tx) + tx = tx. Model(&e.InsuranceCompany{}). Scopes(gh.Filter(input.FilterDto)). diff --git a/internal/use-case/main-use-case/item/lib.go b/internal/use-case/main-use-case/item/lib.go index c5b937ce..c02dd4aa 100644 --- a/internal/use-case/main-use-case/item/lib.go +++ b/internal/use-case/main-use-case/item/lib.go @@ -53,6 +53,8 @@ func ReadListData(input e.ReadListDto, event *pl.Event, dbx ...*gorm.DB) ([]e.It } } + tx = plh.SearchCodeOrName(input.Search, tx) + tx = tx. Model(&e.Item{}). Scopes(gh.Filter(input.FilterDto)). diff --git a/internal/use-case/main-use-case/language/case.go b/internal/use-case/main-use-case/language/case.go index 885bcfeb..24061c86 100644 --- a/internal/use-case/main-use-case/language/case.go +++ b/internal/use-case/main-use-case/language/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/language/lib.go b/internal/use-case/main-use-case/language/lib.go index 24544b3f..d6bfd489 100644 --- a/internal/use-case/main-use-case/language/lib.go +++ b/internal/use-case/main-use-case/language/lib.go @@ -51,7 +51,7 @@ func ReadListData(input e.ReadListDto, event *pl.Event, dbx ...*gorm.DB) ([]e.La tx = tx. Model(&e.Language{}). - 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/mcu-src-category/case.go b/internal/use-case/main-use-case/mcu-src-category/case.go index c105603c..c8e53edc 100644 --- a/internal/use-case/main-use-case/mcu-src-category/case.go +++ b/internal/use-case/main-use-case/mcu-src-category/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/mcu-src-category/lib.go b/internal/use-case/main-use-case/mcu-src-category/lib.go index aef1fcf5..86be685a 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 @@ -47,9 +47,17 @@ func ReadListData(input e.ReadListDto, event *pl.Event, dbx ...*gorm.DB) ([]e.Mc tx = dg.I } + if len(input.Preloads) > 0 { + for _, preload := range input.Preloads { + tx = tx.Preload(preload) + } + } + + tx = plh.SearchCodeOrName(input.Search, tx) + tx = tx. Model(&e.McuSrcCategory{}). - 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/mcu-src/lib.go b/internal/use-case/main-use-case/mcu-src/lib.go index 246c4ccf..1d8016cb 100644 --- a/internal/use-case/main-use-case/mcu-src/lib.go +++ b/internal/use-case/main-use-case/mcu-src/lib.go @@ -53,7 +53,7 @@ func ReadListData(input e.ReadListDto, event *pl.Event, dbx ...*gorm.DB) ([]e.Mc } } - plh.SearchCodeOrName(input.Search, tx) + tx = plh.SearchCodeOrName(input.Search, tx) tx = tx. Model(&e.McuSrc{}). 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 43433380..5c1f8057 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 @@ -53,7 +53,7 @@ func ReadListData(input e.ReadListDto, event *pl.Event, dbx ...*gorm.DB) ([]e.Mc } } - plh.SearchCodeOrName(input.Search, tx) + tx = plh.SearchCodeOrName(input.Search, tx) tx = tx. Model(&e.McuSubSrc{}). 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 9bb9d762..2551cc16 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 @@ -53,7 +53,7 @@ func ReadListData(input e.ReadListDto, event *pl.Event, dbx ...*gorm.DB) ([]e.Me } } - plh.SearchCodeOrName(input.Search, tx) + tx = plh.SearchCodeOrName(input.Search, tx) tx = tx. Model(&e.MedicalActionSrc{}). diff --git a/internal/use-case/main-use-case/medicine-group/case.go b/internal/use-case/main-use-case/medicine-group/case.go index 180c6e00..f7d17e01 100644 --- a/internal/use-case/main-use-case/medicine-group/case.go +++ b/internal/use-case/main-use-case/medicine-group/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/medicine-group/lib.go b/internal/use-case/main-use-case/medicine-group/lib.go index ac269a85..0de470fb 100644 --- a/internal/use-case/main-use-case/medicine-group/lib.go +++ b/internal/use-case/main-use-case/medicine-group/lib.go @@ -47,9 +47,17 @@ func ReadListData(input e.ReadListDto, event *pl.Event, dbx ...*gorm.DB) ([]e.Me tx = dg.I } + if len(input.Preloads) > 0 { + for _, preload := range input.Preloads { + tx = tx.Preload(preload) + } + } + + tx = plh.SearchCodeOrName(input.Search, tx) + tx = tx. Model(&e.MedicineGroup{}). - 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/medicine-method/case.go b/internal/use-case/main-use-case/medicine-method/case.go index 012b77b0..a6ed76c7 100644 --- a/internal/use-case/main-use-case/medicine-method/case.go +++ b/internal/use-case/main-use-case/medicine-method/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/medicine-method/lib.go b/internal/use-case/main-use-case/medicine-method/lib.go index 56907327..4e708a5b 100644 --- a/internal/use-case/main-use-case/medicine-method/lib.go +++ b/internal/use-case/main-use-case/medicine-method/lib.go @@ -47,9 +47,17 @@ func ReadListData(input e.ReadListDto, event *pl.Event, dbx ...*gorm.DB) ([]e.Me tx = dg.I } + if len(input.Preloads) > 0 { + for _, preload := range input.Preloads { + tx = tx.Preload(preload) + } + } + + tx = plh.SearchCodeOrName(input.Search, tx) + tx = tx. Model(&e.MedicineMethod{}). - 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/medicine/lib.go b/internal/use-case/main-use-case/medicine/lib.go index b4ea21f6..f6b48196 100644 --- a/internal/use-case/main-use-case/medicine/lib.go +++ b/internal/use-case/main-use-case/medicine/lib.go @@ -53,9 +53,9 @@ func ReadListData(input e.ReadListDto, event *pl.Event, dbx ...*gorm.DB) ([]e.Me } } - plh.SearchCodeOrName(input.Search, tx) + tx = plh.SearchCodeOrName(input.Search, tx) - tx = tx. + tx = tx.Debug(). Model(&e.Medicine{}). Scopes(gh.Filter(input.FilterDto)). Count(&count). diff --git a/internal/use-case/main-use-case/pharmacy-company/case.go b/internal/use-case/main-use-case/pharmacy-company/case.go index cce54750..1ef9a7bf 100644 --- a/internal/use-case/main-use-case/pharmacy-company/case.go +++ b/internal/use-case/main-use-case/pharmacy-company/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/pharmacy-company/lib.go b/internal/use-case/main-use-case/pharmacy-company/lib.go index b0e9c146..efc03283 100644 --- a/internal/use-case/main-use-case/pharmacy-company/lib.go +++ b/internal/use-case/main-use-case/pharmacy-company/lib.go @@ -47,9 +47,17 @@ func ReadListData(input e.ReadListDto, event *pl.Event, dbx ...*gorm.DB) ([]e.Ph tx = dg.I } + if len(input.Preloads) > 0 { + for _, preload := range input.Preloads { + tx = tx.Preload(preload) + } + } + + tx = plh.SearchCodeOrName(input.Search, tx) + tx = tx. Model(&e.PharmacyCompany{}). - 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/procedure-src/case.go b/internal/use-case/main-use-case/procedure-src/case.go index 1b91f6bb..c41e47d6 100644 --- a/internal/use-case/main-use-case/procedure-src/case.go +++ b/internal/use-case/main-use-case/procedure-src/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/procedure-src/lib.go b/internal/use-case/main-use-case/procedure-src/lib.go index 6cd2b7dd..cbf2e086 100644 --- a/internal/use-case/main-use-case/procedure-src/lib.go +++ b/internal/use-case/main-use-case/procedure-src/lib.go @@ -47,11 +47,11 @@ func ReadListData(input e.ReadListDto, event *pl.Event, dbx ...*gorm.DB) ([]e.Pr tx = dg.I } - plh.SearchCodeOrName(input.Search, tx) + tx = plh.SearchCodeOrName(input.Search, tx) tx = tx. Model(&e.ProcedureSrc{}). - 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/province/lib.go b/internal/use-case/main-use-case/province/lib.go index 2314459d..c55dce15 100644 --- a/internal/use-case/main-use-case/province/lib.go +++ b/internal/use-case/main-use-case/province/lib.go @@ -53,9 +53,9 @@ func ReadListData(input e.ReadListDto, event *pl.Event, dbx ...*gorm.DB) ([]e.Pr } } - plh.SearchCodeOrName(input.Search, tx) + tx = plh.SearchCodeOrName(input.Search, tx) - tx = tx. + tx = tx.Debug(). Model(&e.Province{}). Scopes(gh.Filter(input.FilterDto)). Count(&count). diff --git a/internal/use-case/main-use-case/regency/lib.go b/internal/use-case/main-use-case/regency/lib.go index fb049908..91c8007a 100644 --- a/internal/use-case/main-use-case/regency/lib.go +++ b/internal/use-case/main-use-case/regency/lib.go @@ -53,7 +53,7 @@ func ReadListData(input e.ReadListDto, event *pl.Event, dbx ...*gorm.DB) ([]e.Re } } - plh.SearchCodeOrName(input.Search, tx) + tx = plh.SearchCodeOrName(input.Search, tx) tx = tx. Model(&e.Regency{}). diff --git a/internal/use-case/main-use-case/specialist/lib.go b/internal/use-case/main-use-case/specialist/lib.go index 04b1b552..caf2a34d 100644 --- a/internal/use-case/main-use-case/specialist/lib.go +++ b/internal/use-case/main-use-case/specialist/lib.go @@ -53,7 +53,7 @@ func ReadListData(input e.ReadListDto, event *pl.Event, dbx ...*gorm.DB) ([]e.Sp } } - plh.SearchCodeOrName(input.Search, tx) + tx = plh.SearchCodeOrName(input.Search, tx) tx = tx. Model(&e.Specialist{}). diff --git a/internal/use-case/main-use-case/subspecialist/lib.go b/internal/use-case/main-use-case/subspecialist/lib.go index 428c0a5f..88849600 100644 --- a/internal/use-case/main-use-case/subspecialist/lib.go +++ b/internal/use-case/main-use-case/subspecialist/lib.go @@ -53,7 +53,7 @@ func ReadListData(input e.ReadListDto, event *pl.Event, dbx ...*gorm.DB) ([]e.Su } } - plh.SearchCodeOrName(input.Search, tx) + tx = plh.SearchCodeOrName(input.Search, tx) tx = tx. Model(&e.Subspecialist{}). diff --git a/internal/use-case/main-use-case/unit/lib.go b/internal/use-case/main-use-case/unit/lib.go index 2924b7df..63cddccc 100644 --- a/internal/use-case/main-use-case/unit/lib.go +++ b/internal/use-case/main-use-case/unit/lib.go @@ -53,7 +53,7 @@ func ReadListData(input e.ReadListDto, event *pl.Event, dbx ...*gorm.DB) ([]e.Un } } - plh.SearchCodeOrName(input.Search, tx) + tx = plh.SearchCodeOrName(input.Search, tx) tx = tx. Model(&e.Unit{}). diff --git a/internal/use-case/main-use-case/uom/lib.go b/internal/use-case/main-use-case/uom/lib.go index 9c524c8d..1cd00f62 100644 --- a/internal/use-case/main-use-case/uom/lib.go +++ b/internal/use-case/main-use-case/uom/lib.go @@ -53,7 +53,7 @@ func ReadListData(input e.ReadListDto, event *pl.Event, dbx ...*gorm.DB) ([]e.Uo } } - plh.SearchCodeOrName(input.Search, tx) + tx = plh.SearchCodeOrName(input.Search, tx) tx = tx. Model(&e.Uom{}). diff --git a/internal/use-case/main-use-case/village/lib.go b/internal/use-case/main-use-case/village/lib.go index de30dc9d..0e29ff17 100644 --- a/internal/use-case/main-use-case/village/lib.go +++ b/internal/use-case/main-use-case/village/lib.go @@ -53,7 +53,7 @@ func ReadListData(input e.ReadListDto, event *pl.Event, dbx ...*gorm.DB) ([]e.Vi } } - plh.SearchCodeOrName(input.Search, tx) + tx = plh.SearchCodeOrName(input.Search, tx) tx = tx. Model(&e.Village{}). diff --git a/pkg/lib-helper/lib-helper.go b/pkg/lib-helper/lib-helper.go index b24c1004..1131447a 100644 --- a/pkg/lib-helper/lib-helper.go +++ b/pkg/lib-helper/lib-helper.go @@ -8,10 +8,12 @@ import ( "gorm.io/gorm" ) -func SearchCodeOrName(search string, tx *gorm.DB) { +func SearchCodeOrName(search string, tx *gorm.DB) *gorm.DB { if search != "" { - tx.Where("\"Code\" ILIKE ? OR \"Name\" ILIKE ?", "%"+search+"%", "%"+search+"%") + tx = tx.Where("\"Code\" ILIKE ? OR \"Name\" ILIKE ?", "%"+search+"%", "%"+search+"%") } + + return tx } func HandleCreateError(input any, event *pl.Event, err error) error { From 7452acfa7d5c6f84ec45c5da1acae5856fa2d11f Mon Sep 17 00:00:00 2001 From: dpurbosakti Date: Wed, 8 Oct 2025 12:24:14 +0700 Subject: [PATCH 7/9] add headstatus into divisionPosition --- cmd/main-migration/migrations/20251008052346.sql | 2 ++ cmd/main-migration/migrations/atlas.sum | 7 ++++--- internal/domain/main-entities/division-position/entity.go | 1 + 3 files changed, 7 insertions(+), 3 deletions(-) create mode 100644 cmd/main-migration/migrations/20251008052346.sql diff --git a/cmd/main-migration/migrations/20251008052346.sql b/cmd/main-migration/migrations/20251008052346.sql new file mode 100644 index 00000000..d664f92d --- /dev/null +++ b/cmd/main-migration/migrations/20251008052346.sql @@ -0,0 +1,2 @@ +-- Modify "DivisionPosition" table +ALTER TABLE "public"."DivisionPosition" ADD COLUMN "HeadStatus" boolean NULL; diff --git a/cmd/main-migration/migrations/atlas.sum b/cmd/main-migration/migrations/atlas.sum index 34db99e7..b9b32c7e 100644 --- a/cmd/main-migration/migrations/atlas.sum +++ b/cmd/main-migration/migrations/atlas.sum @@ -1,4 +1,4 @@ -h1:ggc8pOi/e+U1WtE8F5K1QjGB3iuTm2Xr71jLLMn7LJc= +h1:+Bnziu7HqAI3VE4WAD5kHgKMKpTnOOy/BEpKYk4D17I= 20250904105930.sql h1:MEM6blCgke9DzWQSTnLzasbPIrcHssNNrJqZpSkEo6k= 20250904141448.sql h1:J8cmYNk4ZrG9fhfbi2Z1IWz7YkfvhFqTzrLFo58BPY0= 20250908062237.sql h1:Pu23yEW/aKkwozHoOuROvHS/GK4ngARJGdO7FB7HZuI= @@ -28,5 +28,6 @@ h1:ggc8pOi/e+U1WtE8F5K1QjGB3iuTm2Xr71jLLMn7LJc= 20251006045658.sql h1:3FmGCPCzjgMPdWDRodZTsx3KVaodd9zB9ilib69aewk= 20251006045928.sql h1:Z5g31PmnzNwk/OKdODcxZGm8fjJQdMFK32Xfnt3bRHg= 20251007022859.sql h1:FO03zEfaNEk/aXwY81d5Lp3MoBB9kPQuXlXJ4BPiSR8= -20251008031337.sql h1:IYmKye5jNMkepsnEcUzaB0lLWDGzn7dO9zT3dZxIhgY= -20251008031554.sql h1:zqUmpXDFfFgDi7I8I/izxPG6D4SPeF8B3WfpnT6mo4Y= +20251008031337.sql h1:l+sxUAGvcTfj3I6kAFHo+T6AYodC9k9GkR+jaKO2xXc= +20251008031554.sql h1:AqrVfIhSzY3PCy8ZlP5W91wn2iznfIuj5qQfubp6/94= +20251008052346.sql h1:kkRzCo2vImbvmG/HMhYcvUQ22IaaYqVSCIaYXtglia8= diff --git a/internal/domain/main-entities/division-position/entity.go b/internal/domain/main-entities/division-position/entity.go index 27614764..3d1d2eca 100644 --- a/internal/domain/main-entities/division-position/entity.go +++ b/internal/domain/main-entities/division-position/entity.go @@ -12,6 +12,7 @@ type DivisionPosition struct { Division *ed.Division `json:"division" gorm:"foreignKey:Division_Id"` Code string `json:"code" gorm:"unique;size:10"` Name string `json:"name" gorm:"size:50"` + HeadStatus bool `json:"head_status"` Employee_Id *uint `json:"employee_id"` Employee *ee.Employee `json:"employee,omitempty" gorm:"foreignKey:Employee_Id;references:Id"` } From 37264756427ba79f92db9b53937e8ce6d6bbab64 Mon Sep 17 00:00:00 2001 From: dpurbosakti Date: Wed, 8 Oct 2025 12:25:39 +0700 Subject: [PATCH 8/9] feat (division-position): add head status --- internal/domain/main-entities/division-position/dto.go | 4 ++++ internal/use-case/main-use-case/division-position/helper.go | 1 + 2 files changed, 5 insertions(+) diff --git a/internal/domain/main-entities/division-position/dto.go b/internal/domain/main-entities/division-position/dto.go index d746d855..d5bfa15b 100644 --- a/internal/domain/main-entities/division-position/dto.go +++ b/internal/domain/main-entities/division-position/dto.go @@ -10,6 +10,7 @@ type CreateDto struct { Division_Id *uint16 `json:"division_id"` Code string `json:"code" validate:"maxLength=10"` Name string `json:"name" validate:"maxLength=50"` + HeadStatus bool `json:"head_status"` Employee_Id *uint `json:"employee_id"` } @@ -25,6 +26,7 @@ type FilterDto struct { Division_Id *uint16 `json:"division-id"` Code string `json:"code"` Name string `json:"name"` + HeadStatus *bool `json:"head-status"` Employee_Id *uint `json:"employee-id"` } @@ -54,6 +56,7 @@ type ResponseDto struct { Division *ed.Division `json:"division,omitempty"` Code string `json:"code"` Name string `json:"name"` + HeadStatus bool `json:"head_status"` Employee_Id *uint `json:"employee_id"` Employee *ee.Employee `json:"employee,omitempty"` } @@ -63,6 +66,7 @@ func (d DivisionPosition) ToResponse() ResponseDto { Division_Id: d.Division_Id, Code: d.Code, Name: d.Name, + HeadStatus: d.HeadStatus, Employee_Id: d.Employee_Id, Employee: d.Employee, } diff --git a/internal/use-case/main-use-case/division-position/helper.go b/internal/use-case/main-use-case/division-position/helper.go index 97f2f26c..482dbc4e 100644 --- a/internal/use-case/main-use-case/division-position/helper.go +++ b/internal/use-case/main-use-case/division-position/helper.go @@ -20,5 +20,6 @@ func setData[T *e.CreateDto | *e.UpdateDto](input T, data *e.DivisionPosition) { data.Division_Id = inputSrc.Division_Id data.Code = inputSrc.Code data.Name = inputSrc.Name + data.HeadStatus = inputSrc.HeadStatus data.Employee_Id = inputSrc.Employee_Id } From 983a68d906b2f61fe9c0f27e23b4367f97988ef4 Mon Sep 17 00:00:00 2001 From: dpurbosakti Date: Wed, 8 Oct 2025 12:26:16 +0700 Subject: [PATCH 9/9] fix naming convention --- internal/domain/main-entities/division-position/dto.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/domain/main-entities/division-position/dto.go b/internal/domain/main-entities/division-position/dto.go index d5bfa15b..48287959 100644 --- a/internal/domain/main-entities/division-position/dto.go +++ b/internal/domain/main-entities/division-position/dto.go @@ -10,7 +10,7 @@ type CreateDto struct { Division_Id *uint16 `json:"division_id"` Code string `json:"code" validate:"maxLength=10"` Name string `json:"name" validate:"maxLength=50"` - HeadStatus bool `json:"head_status"` + HeadStatus bool `json:"headStatus"` Employee_Id *uint `json:"employee_id"` } @@ -56,7 +56,7 @@ type ResponseDto struct { Division *ed.Division `json:"division,omitempty"` Code string `json:"code"` Name string `json:"name"` - HeadStatus bool `json:"head_status"` + HeadStatus bool `json:"headStatus"` Employee_Id *uint `json:"employee_id"` Employee *ee.Employee `json:"employee,omitempty"` }