diff --git a/cmd/migration/migrations/20250828092003.sql b/cmd/migration/migrations/20250829075746.sql similarity index 95% rename from cmd/migration/migrations/20250828092003.sql rename to cmd/migration/migrations/20250829075746.sql index 175129a6..11267986 100644 --- a/cmd/migration/migrations/20250828092003.sql +++ b/cmd/migration/migrations/20250829075746.sql @@ -1,3 +1,18 @@ +-- Create "User" table +CREATE TABLE "public"."User" ( + "Id" bigserial NOT NULL, + "CreatedAt" timestamptz NULL, + "UpdatedAt" timestamptz NULL, + "DeletedAt" timestamptz NULL, + "Name" character varying(25) NOT NULL, + "Password" character varying(255) NOT NULL, + "Status_Code" character varying(10) NOT NULL, + "FailedLoginCount" smallint NULL, + "LoginAttemptCount" bigint NULL, + "LastSuccessLogin" timestamptz NULL, + "LastAllowdLogin" timestamptz NULL, + PRIMARY KEY ("Id") +); -- Create "DiagnoseSrc" table CREATE TABLE "public"."DiagnoseSrc" ( "Id" bigserial NOT NULL, @@ -10,52 +25,16 @@ CREATE TABLE "public"."DiagnoseSrc" ( PRIMARY KEY ("Id"), CONSTRAINT "uni_DiagnoseSrc_Code" UNIQUE ("Code") ); --- Create "PharmacyCompany" table -CREATE TABLE "public"."PharmacyCompany" ( - "Id" bigserial NOT NULL, - "CreatedAt" timestamptz NULL, - "UpdatedAt" timestamptz NULL, - "DeletedAt" timestamptz NULL, - "Code" character varying(20) NULL, - "Name" character varying(100) NULL, - "Regency_Code" character varying(4) NULL, - PRIMARY KEY ("Id"), - CONSTRAINT "uni_PharmacyCompany_Code" UNIQUE ("Code") -); --- Create "McuSrc" table -CREATE TABLE "public"."McuSrc" ( +-- Create "Uom" table +CREATE TABLE "public"."Uom" ( "Id" serial NOT NULL, "CreatedAt" timestamptz NULL, "UpdatedAt" timestamptz NULL, "DeletedAt" timestamptz NULL, - "Code" character varying(20) NULL, + "Code" character varying(10) NULL, "Name" character varying(50) NULL, - "CheckupCategory_Code" character varying(20) NULL, PRIMARY KEY ("Id"), - CONSTRAINT "uni_McuSrc_Code" UNIQUE ("Code") -); --- Create "ItemGroup" table -CREATE TABLE "public"."ItemGroup" ( - "Id" bigserial NOT NULL, - "CreatedAt" timestamptz NULL, - "UpdatedAt" timestamptz NULL, - "DeletedAt" timestamptz NULL, - "Code" character varying(50) NULL, - "Name" character varying(100) NULL, - PRIMARY KEY ("Id"), - CONSTRAINT "uni_ItemGroup_Code" UNIQUE ("Code") -); --- Create "McuSrcCategory" table -CREATE TABLE "public"."McuSrcCategory" ( - "Id" serial NOT NULL, - "CreatedAt" timestamptz NULL, - "UpdatedAt" timestamptz NULL, - "DeletedAt" timestamptz NULL, - "Code" character varying(20) NULL, - "Name" character varying(50) NULL, - "Scope_Code" character varying(10) NULL, - PRIMARY KEY ("Id"), - CONSTRAINT "uni_McuSrcCategory_Code" UNIQUE ("Code") + CONSTRAINT "uni_Uom_Code" UNIQUE ("Code") ); -- Create "Counter" table CREATE TABLE "public"."Counter" ( @@ -72,31 +51,41 @@ CREATE TABLE "public"."Counter" ( PRIMARY KEY ("Id"), CONSTRAINT "uni_Counter_Code" UNIQUE ("Code") ); --- Create "User" table -CREATE TABLE "public"."User" ( - "Id" bigserial NOT NULL, - "CreatedAt" timestamptz NULL, - "UpdatedAt" timestamptz NULL, - "DeletedAt" timestamptz NULL, - "Name" character varying(25) NOT NULL, - "Password" character varying(255) NOT NULL, - "Status_Code" character varying(10) NOT NULL, - "FailedLoginCount" smallint NULL, - "LoginAttemptCount" bigint NULL, - "LastSuccessLogin" timestamptz NULL, - "LastAllowdLogin" timestamptz NULL, - PRIMARY KEY ("Id") -); --- Create "Uom" table -CREATE TABLE "public"."Uom" ( +-- Create "McuSrcCategory" table +CREATE TABLE "public"."McuSrcCategory" ( "Id" serial NOT NULL, "CreatedAt" timestamptz NULL, "UpdatedAt" timestamptz NULL, "DeletedAt" timestamptz NULL, - "Code" character varying(10) NULL, + "Code" character varying(20) NULL, "Name" character varying(50) NULL, + "Scope_Code" character varying(10) NULL, PRIMARY KEY ("Id"), - CONSTRAINT "uni_Uom_Code" UNIQUE ("Code") + CONSTRAINT "uni_McuSrcCategory_Code" UNIQUE ("Code") +); +-- Create "McuSrc" table +CREATE TABLE "public"."McuSrc" ( + "Id" serial NOT NULL, + "CreatedAt" timestamptz NULL, + "UpdatedAt" timestamptz NULL, + "DeletedAt" timestamptz NULL, + "Code" character varying(20) NULL, + "Name" character varying(50) NULL, + "CheckupCategory_Code" character varying(20) NULL, + PRIMARY KEY ("Id"), + CONSTRAINT "uni_McuSrc_Code" UNIQUE ("Code") +); +-- Create "PharmacyCompany" table +CREATE TABLE "public"."PharmacyCompany" ( + "Id" bigserial NOT NULL, + "CreatedAt" timestamptz NULL, + "UpdatedAt" timestamptz NULL, + "DeletedAt" timestamptz NULL, + "Code" character varying(20) NULL, + "Name" character varying(100) NULL, + "Regency_Code" character varying(4) NULL, + PRIMARY KEY ("Id"), + CONSTRAINT "uni_PharmacyCompany_Code" UNIQUE ("Code") ); -- Create "Item" table CREATE TABLE "public"."Item" ( @@ -112,7 +101,6 @@ CREATE TABLE "public"."Item" ( "Stock" bigint NULL, PRIMARY KEY ("Id"), CONSTRAINT "uni_Item_Code" UNIQUE ("Code"), - CONSTRAINT "fk_Item_ItemGroup" FOREIGN KEY ("ItemGroup_Code") REFERENCES "public"."ItemGroup" ("Code") ON UPDATE NO ACTION ON DELETE NO ACTION, CONSTRAINT "fk_Item_Uom" FOREIGN KEY ("Uom_Code") REFERENCES "public"."Uom" ("Code") ON UPDATE NO ACTION ON DELETE NO ACTION ); -- Create "Device" table @@ -251,18 +239,6 @@ CREATE TABLE "public"."DoctorFee" ( CONSTRAINT "fk_DoctorFee_Doctor" FOREIGN KEY ("Doctor_Id") REFERENCES "public"."Doctor" ("Id") ON UPDATE NO ACTION ON DELETE NO ACTION, CONSTRAINT "fk_DoctorFee_Item" FOREIGN KEY ("Item_Id") REFERENCES "public"."Item" ("Id") ON UPDATE NO ACTION ON DELETE NO ACTION ); --- Create "InfraGroup" table -CREATE TABLE "public"."InfraGroup" ( - "Id" bigserial NOT NULL, - "CreatedAt" timestamptz NULL, - "UpdatedAt" timestamptz NULL, - "DeletedAt" timestamptz NULL, - "Code" character varying(10) NULL, - "Name" character varying(50) NULL, - "Level" smallint NULL, - PRIMARY KEY ("Id"), - CONSTRAINT "uni_InfraGroup_Code" UNIQUE ("Code") -); -- Create "Infra" table CREATE TABLE "public"."Infra" ( "Id" serial NOT NULL, @@ -276,7 +252,6 @@ CREATE TABLE "public"."Infra" ( "Item_Id" bigint NULL, PRIMARY KEY ("Id"), CONSTRAINT "uni_Infra_Code" UNIQUE ("Code"), - CONSTRAINT "fk_Infra_InfraGroup" FOREIGN KEY ("InfraGroup_Code") REFERENCES "public"."InfraGroup" ("Code") ON UPDATE NO ACTION ON DELETE NO ACTION, CONSTRAINT "fk_Infra_Item" FOREIGN KEY ("Item_Id") REFERENCES "public"."Item" ("Id") ON UPDATE NO ACTION ON DELETE NO ACTION ); -- Create "InsuranceCompany" table diff --git a/cmd/migration/migrations/atlas.sum b/cmd/migration/migrations/atlas.sum index 65ea4bd7..cd54143a 100644 --- a/cmd/migration/migrations/atlas.sum +++ b/cmd/migration/migrations/atlas.sum @@ -1,2 +1,2 @@ -h1:kBvWq4ulyP8Gz3UPNE/UdpYtWBIpEQskVnanFmaFCRc= -20250828092003.sql h1:ZxYlga6zF0PsTCMisoQo5yUVNwilr0njJQF8mZuVS64= +h1:EYDfTQ6odgD5wgHGPw24RCXeKOoI17X2Bdn5MiCcftM= +20250829075746.sql h1:HZRqrJLqG8GB8W5gpmCR4Itds/Ya51xJdY57nHuXSac= diff --git a/internal/domain/main-entities/infra-group/dto.go b/internal/domain/main-entities/infra-group/dto.go deleted file mode 100644 index e33e92b1..00000000 --- a/internal/domain/main-entities/infra-group/dto.go +++ /dev/null @@ -1,68 +0,0 @@ -package infragroup - -import ( - ecore "simrs-vx/internal/domain/base-entities/core" -) - -type CreateDto struct { - Code string `json:"code"` - Name string `json:"name"` - Level uint8 `json:"level"` -} - -type ReadListDto struct { - Code string `json:"code"` - Name string `json:"name"` - Level uint8 `json:"level"` - - Page int `json:"page"` - PageSize int `json:"page_size"` - NoPagination int `json:"no_pagination"` -} - -type ReadDetailDto struct { - Id uint16 `json:"id"` - Code string `json:"code"` - Name string `json:"name"` - Level uint8 `json:"level"` -} - -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 - Code string `json:"code"` - Name string `json:"name"` - Level uint8 `json:"level"` -} - -func (d InfraGroup) ToResponse() ResponseDto { - resp := ResponseDto{ - Code: d.Code, - Name: d.Name, - Level: d.Level, - } - resp.Main = d.Main - return resp -} - -func ToResponseList(data []InfraGroup) []ResponseDto { - resp := make([]ResponseDto, len(data)) - for i, u := range data { - resp[i] = u.ToResponse() - } - return resp -} diff --git a/internal/domain/main-entities/infra-group/entity.go b/internal/domain/main-entities/infra-group/entity.go deleted file mode 100644 index 812c27f1..00000000 --- a/internal/domain/main-entities/infra-group/entity.go +++ /dev/null @@ -1,12 +0,0 @@ -package infragroup - -import ( - ecore "simrs-vx/internal/domain/base-entities/core" -) - -type InfraGroup struct { - ecore.Main // adjust this according to the needs - Code string `json:"code" gorm:"unique;size:10"` - Name string `json:"name" gorm:"size:50"` - Level uint8 `json:"level"` -} diff --git a/internal/domain/main-entities/infra/dto.go b/internal/domain/main-entities/infra/dto.go index 801883d1..abc3c014 100644 --- a/internal/domain/main-entities/infra/dto.go +++ b/internal/domain/main-entities/infra/dto.go @@ -2,24 +2,25 @@ package infra import ( ecore "simrs-vx/internal/domain/base-entities/core" - eig "simrs-vx/internal/domain/main-entities/infra-group" ei "simrs-vx/internal/domain/main-entities/item" + + ero "simrs-vx/internal/domain/references/organization" ) type CreateDto struct { - Code string `json:"code"` - Name string `json:"name"` - InfraGroup_Code *string `json:"infraGroup_code"` - Parent_Id *int16 `json:"parent_id"` - Item_Id *uint `json:"item_id"` + Code string `json:"code"` + Name string `json:"name"` + InfraGroup_Code *ero.InfraGroupCode `json:"infraGroup_code"` + Parent_Id *int16 `json:"parent_id"` + Item_Id *uint `json:"item_id"` } type ReadListDto struct { - Code string `json:"code"` - Name string `json:"name"` - InfraGroup_Code *string `json:"infraGroup_code"` - Parent_Id *int16 `json:"parent_id"` - Item_Id *uint `json:"item_id"` + Code string `json:"code"` + Name string `json:"name"` + InfraGroup_Code *ero.InfraGroupCode `json:"infraGroup_code"` + Parent_Id *int16 `json:"parent_id"` + Item_Id *uint `json:"item_id"` Page int `json:"page"` PageSize int `json:"page_size"` @@ -27,12 +28,12 @@ type ReadListDto struct { } type ReadDetailDto struct { - Id uint16 `json:"id"` - Code string `json:"code"` - Name string `json:"name"` - InfraGroup_Code *string `json:"infraGroup_code"` - Parent_Id *int16 `json:"parent_id"` - Item_Id *uint `json:"item_id"` + Id uint16 `json:"id"` + Code string `json:"code"` + Name string `json:"name"` + InfraGroup_Code *ero.InfraGroupCode `json:"infraGroup_code"` + Parent_Id *int16 `json:"parent_id"` + Item_Id *uint `json:"item_id"` } type UpdateDto struct { @@ -52,13 +53,12 @@ type MetaDto struct { type ResponseDto struct { ecore.SmallMain - Code string `json:"code"` - Name string `json:"name"` - InfraGroup_Code *string `json:"infraGroup_code"` - InfraGroup *eig.InfraGroup `json:"infraGroup,omitempty"` - Parent_Id *int16 `json:"parent_id"` - Item_Id *uint `json:"item_id"` - Item *ei.Item `json:"item,omitempty"` + Code string `json:"code"` + Name string `json:"name"` + InfraGroup_Code *ero.InfraGroupCode `json:"infraGroup_code"` + Parent_Id *int16 `json:"parent_id"` + Item_Id *uint `json:"item_id"` + Item *ei.Item `json:"item,omitempty"` } func (d Infra) ToResponse() ResponseDto { @@ -66,7 +66,6 @@ func (d Infra) ToResponse() ResponseDto { Code: d.Code, Name: d.Name, InfraGroup_Code: d.InfraGroup_Code, - InfraGroup: d.InfraGroup, Parent_Id: d.Parent_Id, Item_Id: d.Item_Id, Item: d.Item, diff --git a/internal/domain/main-entities/infra/entity.go b/internal/domain/main-entities/infra/entity.go index 7cb2001e..5a3f5730 100644 --- a/internal/domain/main-entities/infra/entity.go +++ b/internal/domain/main-entities/infra/entity.go @@ -2,17 +2,17 @@ package infra import ( ecore "simrs-vx/internal/domain/base-entities/core" - eig "simrs-vx/internal/domain/main-entities/infra-group" ei "simrs-vx/internal/domain/main-entities/item" + + ero "simrs-vx/internal/domain/references/organization" ) type Infra struct { - ecore.SmallMain // adjust this according to the needs - Code string `json:"code" gorm:"unique;size:10"` - Name string `json:"name" gorm:"size:50"` - InfraGroup_Code *string `json:"infraGroup_code" gorm:"size:10"` - InfraGroup *eig.InfraGroup `json:"infraGroup,omitempty" gorm:"foreignKey:InfraGroup_Code;references:Code"` - Parent_Id *int16 `json:"parent_id"` - Item_Id *uint `json:"item_id"` - Item *ei.Item `json:"item,omitempty" gorm:"foreignKey:Item_Id;references:Id"` + ecore.SmallMain // adjust this according to the needs + Code string `json:"code" gorm:"unique;size:10"` + Name string `json:"name" gorm:"size:50"` + InfraGroup_Code *ero.InfraGroupCode `json:"infraGroup_code" gorm:"size:10"` + Parent_Id *int16 `json:"parent_id"` + Item_Id *uint `json:"item_id"` + Item *ei.Item `json:"item,omitempty" gorm:"foreignKey:Item_Id;references:Id"` } diff --git a/internal/domain/main-entities/item-group/dto.go b/internal/domain/main-entities/item-group/dto.go deleted file mode 100644 index 99681811..00000000 --- a/internal/domain/main-entities/item-group/dto.go +++ /dev/null @@ -1,63 +0,0 @@ -package itemgroup - -import ( - ecore "simrs-vx/internal/domain/base-entities/core" -) - -type CreateDto struct { - Code string `json:"code"` - Name string `json:"name"` -} - -type ReadListDto struct { - Code string `json:"code"` - Name string `json:"name"` - - Page int `json:"page"` - PageSize int `json:"page_size"` - NoPagination int `json:"no_pagination"` -} - -type ReadDetailDto struct { - Id uint16 `json:"id"` - Code string `json:"code"` - Name string `json:"name"` -} - -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 - Code string `json:"code"` - Name string `json:"name"` -} - -func (d ItemGroup) ToResponse() ResponseDto { - resp := ResponseDto{ - Code: d.Code, - Name: d.Name, - } - resp.Main = d.Main - return resp -} - -func ToResponseList(data []ItemGroup) []ResponseDto { - resp := make([]ResponseDto, len(data)) - for i, u := range data { - resp[i] = u.ToResponse() - } - return resp -} diff --git a/internal/domain/main-entities/item-group/entity.go b/internal/domain/main-entities/item-group/entity.go deleted file mode 100644 index 24ee3331..00000000 --- a/internal/domain/main-entities/item-group/entity.go +++ /dev/null @@ -1,11 +0,0 @@ -package itemgroup - -import ( - ecore "simrs-vx/internal/domain/base-entities/core" -) - -type ItemGroup struct { - ecore.Main // adjust this according to the needs - Code string `json:"code" gorm:"unique;size:50"` - Name string `json:"name" gorm:"size:100"` -} diff --git a/internal/domain/main-entities/item/dto.go b/internal/domain/main-entities/item/dto.go index c157b541..f9cf0b6d 100644 --- a/internal/domain/main-entities/item/dto.go +++ b/internal/domain/main-entities/item/dto.go @@ -2,26 +2,26 @@ package item import ( ecore "simrs-vx/internal/domain/base-entities/core" - eig "simrs-vx/internal/domain/main-entities/item-group" eu "simrs-vx/internal/domain/main-entities/uom" + ero "simrs-vx/internal/domain/references/organization" ) type CreateDto struct { - Code string `json:"code"` - Name string `json:"name"` - ItemGroup_Code *string `json:"itemGroup_code"` - Uom_Code *string `json:"uom_code"` - Infra_Id *uint16 `json:"infra_id"` - Stock *int `json:"stock"` + Code string `json:"code"` + Name string `json:"name"` + ItemGroup_Code *ero.ItemGroupCode `json:"itemGroup_code"` + Uom_Code *string `json:"uom_code"` + Infra_Id *uint16 `json:"infra_id"` + Stock *int `json:"stock"` } type ReadListDto struct { - Code string `json:"code"` - Name string `json:"name"` - ItemGroup_Code *string `json:"itemGroup_code"` - Uom_Code *string `json:"uom_code"` - Infra_Id *uint16 `json:"infra_id"` - Stock *int `json:"stock"` + Code string `json:"code"` + Name string `json:"name"` + ItemGroup_Code *ero.ItemGroupCode `json:"itemGroup_code"` + Uom_Code *string `json:"uom_code"` + Infra_Id *uint16 `json:"infra_id"` + Stock *int `json:"stock"` Page int `json:"page"` PageSize int `json:"page_size"` @@ -29,13 +29,13 @@ type ReadListDto struct { } type ReadDetailDto struct { - Id uint16 `json:"id"` - Code string `json:"code"` - Name string `json:"name"` - ItemGroup_Code *string `json:"itemGroup_code"` - Uom_Code *string `json:"uom_code"` - Infra_Id *int16 `json:"infra_id"` - Stock *int `json:"stock"` + Id uint16 `json:"id"` + Code string `json:"code"` + Name string `json:"name"` + ItemGroup_Code *ero.ItemGroupCode `json:"itemGroup_code"` + Uom_Code *string `json:"uom_code"` + Infra_Id *int16 `json:"infra_id"` + Stock *int `json:"stock"` } type UpdateDto struct { @@ -55,14 +55,13 @@ type MetaDto struct { type ResponseDto struct { ecore.Main - Code string `json:"code"` - Name string `json:"name"` - ItemGroup_Code *string `json:"itemGroup_code"` - ItemGroup *eig.ItemGroup `json:"itemGroup,omitempty"` - Uom_Code *string `json:"uom_code"` - Uom *eu.Uom `json:"uom,omitempty"` - Infra_Id *uint16 `json:"infra_id"` - Stock *int `json:"stock"` + Code string `json:"code"` + Name string `json:"name"` + ItemGroup_Code *ero.ItemGroupCode `json:"itemGroup_code"` + Uom_Code *string `json:"uom_code"` + Uom *eu.Uom `json:"uom,omitempty"` + Infra_Id *uint16 `json:"infra_id"` + Stock *int `json:"stock"` } func (d Item) ToResponse() ResponseDto { @@ -70,7 +69,6 @@ func (d Item) ToResponse() ResponseDto { Code: d.Code, Name: d.Name, ItemGroup_Code: d.ItemGroup_Code, - ItemGroup: d.ItemGroup, Uom_Code: d.Uom_Code, Uom: d.Uom, Infra_Id: d.Infra_Id, diff --git a/internal/domain/main-entities/item/entity.go b/internal/domain/main-entities/item/entity.go index c6cb0b8f..129a7f46 100644 --- a/internal/domain/main-entities/item/entity.go +++ b/internal/domain/main-entities/item/entity.go @@ -2,18 +2,18 @@ package item import ( ecore "simrs-vx/internal/domain/base-entities/core" - eig "simrs-vx/internal/domain/main-entities/item-group" eu "simrs-vx/internal/domain/main-entities/uom" + + ero "simrs-vx/internal/domain/references/organization" ) type Item struct { - ecore.Main // adjust this according to the needs - Code string `json:"code" gorm:"unique;size:50"` - Name string `json:"name" gorm:"size:100"` - ItemGroup_Code *string `json:"itemGroup_code" gorm:"size:10"` - ItemGroup *eig.ItemGroup `json:"itemGroup,omitempty" gorm:"foreignKey:ItemGroup_Code;references:Code"` - Uom_Code *string `json:"uom_code" gorm:"size:10"` - Uom *eu.Uom `json:"uom,omitempty" gorm:"foreignKey:Uom_Code;references:Code"` - Infra_Id *uint16 `json:"infra_id"` - Stock *int `json:"stock"` + ecore.Main // adjust this according to the needs + Code string `json:"code" gorm:"unique;size:50"` + Name string `json:"name" gorm:"size:100"` + ItemGroup_Code *ero.ItemGroupCode `json:"itemGroup_code" gorm:"size:10"` + Uom_Code *string `json:"uom_code" gorm:"size:10"` + Uom *eu.Uom `json:"uom,omitempty" gorm:"foreignKey:Uom_Code;references:Code"` + Infra_Id *uint16 `json:"infra_id"` + Stock *int `json:"stock"` } diff --git a/internal/domain/references/organization/organization.go b/internal/domain/references/organization/organization.go index de9cff1c..5c86ba51 100644 --- a/internal/domain/references/organization/organization.go +++ b/internal/domain/references/organization/organization.go @@ -2,7 +2,7 @@ package organization type ( EmployeePosisitionCode string - ItemGroupCoode string + ItemGroupCode string InfraGroupCode string UnitTypeCode string DoctorFeeTypeCode string @@ -18,12 +18,12 @@ const ( EPCPav EmployeePosisitionCode = "payment-verificator" // Konfirmasi pembayaran EPCMan EmployeePosisitionCode = "management" // Manajemen - ITGCInfra ItemGroupCoode = "infra" - ITGCMedicine ItemGroupCoode = "medicine" - ITGCDevice ItemGroupCoode = "device" - ITGCMaterial ItemGroupCoode = "material" - ITGCEmpFee ItemGroupCoode = "employee-fee" - ITGCDocFee ItemGroupCoode = "doctor-fee" + ITGCInfra ItemGroupCode = "infra" + ITGCMedicine ItemGroupCode = "medicine" + ITGCDevice ItemGroupCode = "device" + ITGCMaterial ItemGroupCode = "material" + ITGCEmpFee ItemGroupCode = "employee-fee" + ITGCDocFee ItemGroupCode = "doctor-fee" IFGCBuilding InfraGroupCode = "building" IFGCFloor InfraGroupCode = "floor" diff --git a/internal/interface/main-handler/infra-group/handler.go b/internal/interface/main-handler/infra-group/handler.go deleted file mode 100644 index 9b3c090a..00000000 --- a/internal/interface/main-handler/infra-group/handler.go +++ /dev/null @@ -1,71 +0,0 @@ -package infragroup - -import ( - "net/http" - - rw "github.com/karincake/risoles" - sf "github.com/karincake/semprit" - - // ua "github.com/karincake/tumpeng/auth/svc" - - e "simrs-vx/internal/domain/main-entities/infra-group" - u "simrs-vx/internal/use-case/main-use-case/infra-group" -) - -type myBase struct{} - -var O myBase - -func (obj myBase) Create(w http.ResponseWriter, r *http.Request) { - dto := e.CreateDto{} - if res := rw.ValidateStructByIOR(w, r.Body, &dto); !res { - return - } - res, err := u.Create(dto) - rw.DataResponse(w, res, err) -} - -func (obj myBase) GetList(w http.ResponseWriter, r *http.Request) { - dto := e.ReadListDto{} - sf.UrlQueryParam(&dto, *r.URL) - res, err := u.ReadList(dto) - rw.DataResponse(w, res, err) -} - -func (obj myBase) GetDetail(w http.ResponseWriter, r *http.Request) { - id := rw.ValidateInt(w, "id", r.PathValue("id")) - if id <= 0 { - return - } - dto := e.ReadDetailDto{} - dto.Id = uint16(id) - res, err := u.ReadDetail(dto) - rw.DataResponse(w, res, err) -} - -func (obj myBase) Update(w http.ResponseWriter, r *http.Request) { - id := rw.ValidateInt(w, "id", r.PathValue("id")) - if id <= 0 { - return - } - - dto := e.UpdateDto{} - if res := rw.ValidateStructByIOR(w, r.Body, &dto); !res { - return - } - dto.Id = uint(id) - res, err := u.Update(dto) - rw.DataResponse(w, res, err) -} - -func (obj myBase) Delete(w http.ResponseWriter, r *http.Request) { - id := rw.ValidateInt(w, "id", r.PathValue("id")) - if id <= 0 { - return - } - - dto := e.DeleteDto{} - dto.Id = uint(id) - res, err := u.Delete(dto) - rw.DataResponse(w, res, err) -} diff --git a/internal/interface/main-handler/item-group/handler.go b/internal/interface/main-handler/item-group/handler.go deleted file mode 100644 index 71eb8b60..00000000 --- a/internal/interface/main-handler/item-group/handler.go +++ /dev/null @@ -1,71 +0,0 @@ -package itemgroup - -import ( - "net/http" - - rw "github.com/karincake/risoles" - sf "github.com/karincake/semprit" - - // ua "github.com/karincake/tumpeng/auth/svc" - - e "simrs-vx/internal/domain/main-entities/item-group" - u "simrs-vx/internal/use-case/main-use-case/item-group" -) - -type myBase struct{} - -var O myBase - -func (obj myBase) Create(w http.ResponseWriter, r *http.Request) { - dto := e.CreateDto{} - if res := rw.ValidateStructByIOR(w, r.Body, &dto); !res { - return - } - res, err := u.Create(dto) - rw.DataResponse(w, res, err) -} - -func (obj myBase) GetList(w http.ResponseWriter, r *http.Request) { - dto := e.ReadListDto{} - sf.UrlQueryParam(&dto, *r.URL) - res, err := u.ReadList(dto) - rw.DataResponse(w, res, err) -} - -func (obj myBase) GetDetail(w http.ResponseWriter, r *http.Request) { - id := rw.ValidateInt(w, "id", r.PathValue("id")) - if id <= 0 { - return - } - dto := e.ReadDetailDto{} - dto.Id = uint16(id) - res, err := u.ReadDetail(dto) - rw.DataResponse(w, res, err) -} - -func (obj myBase) Update(w http.ResponseWriter, r *http.Request) { - id := rw.ValidateInt(w, "id", r.PathValue("id")) - if id <= 0 { - return - } - - dto := e.UpdateDto{} - if res := rw.ValidateStructByIOR(w, r.Body, &dto); !res { - return - } - dto.Id = uint(id) - res, err := u.Update(dto) - rw.DataResponse(w, res, err) -} - -func (obj myBase) Delete(w http.ResponseWriter, r *http.Request) { - id := rw.ValidateInt(w, "id", r.PathValue("id")) - if id <= 0 { - return - } - - dto := e.DeleteDto{} - dto.Id = uint(id) - res, err := u.Delete(dto) - rw.DataResponse(w, res, err) -} diff --git a/internal/interface/main-handler/main-handler.go b/internal/interface/main-handler/main-handler.go index 4b5fd1f1..0c47e420 100644 --- a/internal/interface/main-handler/main-handler.go +++ b/internal/interface/main-handler/main-handler.go @@ -44,11 +44,9 @@ import ( doctorfee "simrs-vx/internal/interface/main-handler/doctor-fee" ethnic "simrs-vx/internal/interface/main-handler/ethnic" infra "simrs-vx/internal/interface/main-handler/infra" - infragroup "simrs-vx/internal/interface/main-handler/infra-group" installation "simrs-vx/internal/interface/main-handler/installation" insurancecompany "simrs-vx/internal/interface/main-handler/insurance-company" item "simrs-vx/internal/interface/main-handler/item" - itemgroup "simrs-vx/internal/interface/main-handler/item-group" itemprice "simrs-vx/internal/interface/main-handler/item-price" material "simrs-vx/internal/interface/main-handler/material" mcusrc "simrs-vx/internal/interface/main-handler/mcu-src" @@ -120,8 +118,6 @@ func SetRoutes() http.Handler { hc.RegCrud(r, "/v1/pharmacy-company", pharmacycompany.O) hc.RegCrud(r, "/v1/diagnose-src", diagnosesrc.O) hc.RegCrud(r, "/v1/procedure-src", proceduresrc.O) - hc.RegCrud(r, "/v1/infra-group", infragroup.O) - hc.RegCrud(r, "/v1/item-group", itemgroup.O) hc.RegCrud(r, "/v1/uom", uom.O) hc.RegCrud(r, "/v1/item", item.O) hc.RegCrud(r, "/v1/item-price", itemprice.O) diff --git a/internal/interface/migration/migration.go b/internal/interface/migration/migration.go index 6122597c..353120d3 100644 --- a/internal/interface/migration/migration.go +++ b/internal/interface/migration/migration.go @@ -16,11 +16,9 @@ import ( employee "simrs-vx/internal/domain/main-entities/employee" ethnic "simrs-vx/internal/domain/main-entities/ethnic" infra "simrs-vx/internal/domain/main-entities/infra" - infragroup "simrs-vx/internal/domain/main-entities/infra-group" installation "simrs-vx/internal/domain/main-entities/installation" insurancecompany "simrs-vx/internal/domain/main-entities/insurance-company" item "simrs-vx/internal/domain/main-entities/item" - itemgroup "simrs-vx/internal/domain/main-entities/item-group" itemprice "simrs-vx/internal/domain/main-entities/item-price" material "simrs-vx/internal/domain/main-entities/material" mcusrc "simrs-vx/internal/domain/main-entities/mcu-src" @@ -96,9 +94,7 @@ func GetEntities() []any { &pharmacycompany.PharmacyCompany{}, &diagnosesrc.DiagnoseSrc{}, &proceduresrc.ProcedureSrc{}, - &infragroup.InfraGroup{}, &employee.Employee{}, - &itemgroup.ItemGroup{}, &doctor.Doctor{}, &nurse.Nurse{}, &nutritionist.Nutritionist{}, diff --git a/internal/use-case/main-use-case/infra-group/case.go b/internal/use-case/main-use-case/infra-group/case.go deleted file mode 100644 index 9366114b..00000000 --- a/internal/use-case/main-use-case/infra-group/case.go +++ /dev/null @@ -1,275 +0,0 @@ -package infragroup - -import ( - e "simrs-vx/internal/domain/main-entities/infra-group" - "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 = "infra-group" - -func Create(input e.CreateDto) (*d.Data, error) { - data := e.InfraGroup{} - - 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.InfraGroup - var dataList []e.InfraGroup - 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 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), - }, - Data: e.ToResponseList(dataList), - }, nil -} - -func ReadDetail(input e.ReadDetailDto) (*d.Data, error) { - var data *e.InfraGroup - 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.InfraGroup - 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.InfraGroup - 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/infra-group/helper.go b/internal/use-case/main-use-case/infra-group/helper.go deleted file mode 100644 index 653c0c36..00000000 --- a/internal/use-case/main-use-case/infra-group/helper.go +++ /dev/null @@ -1,22 +0,0 @@ -/* -DESCRIPTION: -Any functions that are used internally by the use-case -*/ -package infragroup - -import ( - e "simrs-vx/internal/domain/main-entities/infra-group" -) - -func setData[T *e.CreateDto | *e.UpdateDto](input T, data *e.InfraGroup) { - var inputSrc *e.CreateDto - if inputT, ok := any(input).(*e.CreateDto); ok { - inputSrc = inputT - } else { - inputTemp := any(input).(*e.UpdateDto) - inputSrc = &inputTemp.CreateDto - } - data.Code = inputSrc.Code - data.Name = inputSrc.Name - data.Level = inputSrc.Level -} diff --git a/internal/use-case/main-use-case/infra-group/lib.go b/internal/use-case/main-use-case/infra-group/lib.go deleted file mode 100644 index ba738d71..00000000 --- a/internal/use-case/main-use-case/infra-group/lib.go +++ /dev/null @@ -1,149 +0,0 @@ -package infragroup - -import ( - e "simrs-vx/internal/domain/main-entities/infra-group" - 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.InfraGroup, error) { - pl.SetLogInfo(event, nil, "started", "DBCreate") - - data := e.InfraGroup{} - 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 { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-create-fail", - Detail: "Database insert failed", - Raw: err, - } - return nil, pl.SetLogError(event, input) - } - - pl.SetLogInfo(event, nil, "complete") - return &data, nil -} - -func ReadListData(input e.ReadListDto, event *pl.Event, dbx ...*gorm.DB) ([]e.InfraGroup, *e.MetaDto, error) { - pl.SetLogInfo(event, input, "started", "DBReadList") - data := []e.InfraGroup{} - pagination := gh.Pagination{} - count := int64(0) - meta := e.MetaDto{} - - var tx *gorm.DB - if len(dbx) > 0 { - tx = dbx[0] - } else { - tx = dg.I - } - - tx = tx. - Model(&e.InfraGroup{}). - Scopes(gh.Filter(input)). - Count(&count). - Scopes(gh.Paginate(input, &pagination)). - Order("\"CreatedAt\" DESC") - - if err := tx.Debug().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.InfraGroup, error) { - pl.SetLogInfo(event, input, "started", "DBReadDetail") - data := e.InfraGroup{} - - var tx *gorm.DB - if len(dbx) > 0 { - tx = dbx[0] - } else { - tx = dg.I - } - - if err := tx.First(&data, input.Id).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.InfraGroup, 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.InfraGroup, 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/infra-group/middleware-runner.go b/internal/use-case/main-use-case/infra-group/middleware-runner.go deleted file mode 100644 index 50b8fb7a..00000000 --- a/internal/use-case/main-use-case/infra-group/middleware-runner.go +++ /dev/null @@ -1,103 +0,0 @@ -package infragroup - -import ( - e "simrs-vx/internal/domain/main-entities/infra-group" - 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.InfraGroup) 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.InfraGroup) 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.InfraGroup) 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.InfraGroup) 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.InfraGroup) 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/infra-group/middleware.go b/internal/use-case/main-use-case/infra-group/middleware.go deleted file mode 100644 index b811bbe8..00000000 --- a/internal/use-case/main-use-case/infra-group/middleware.go +++ /dev/null @@ -1,9 +0,0 @@ -package infragroup - -// 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/infra-group/tycovar.go b/internal/use-case/main-use-case/infra-group/tycovar.go deleted file mode 100644 index cd5a9925..00000000 --- a/internal/use-case/main-use-case/infra-group/tycovar.go +++ /dev/null @@ -1,44 +0,0 @@ -/* -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 infragroup - -import ( - "gorm.io/gorm" - - e "simrs-vx/internal/domain/main-entities/infra-group" -) - -type createMw struct { - Name string - Func func(input *e.CreateDto, data *e.InfraGroup, tx *gorm.DB) error -} - -type readListMw struct { - Name string - Func func(input *e.ReadListDto, data *e.InfraGroup, tx *gorm.DB) error -} - -type readDetailMw struct { - Name string - Func func(input *e.ReadDetailDto, data *e.InfraGroup, 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/item-group/case.go b/internal/use-case/main-use-case/item-group/case.go deleted file mode 100644 index 91cd05c7..00000000 --- a/internal/use-case/main-use-case/item-group/case.go +++ /dev/null @@ -1,275 +0,0 @@ -package itemgroup - -import ( - e "simrs-vx/internal/domain/main-entities/item-group" - "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 = "item-group" - -func Create(input e.CreateDto) (*d.Data, error) { - data := e.ItemGroup{} - - 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.ItemGroup - var dataList []e.ItemGroup - 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 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), - }, - Data: e.ToResponseList(dataList), - }, nil -} - -func ReadDetail(input e.ReadDetailDto) (*d.Data, error) { - var data *e.ItemGroup - 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.ItemGroup - 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.ItemGroup - 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/item-group/helper.go b/internal/use-case/main-use-case/item-group/helper.go deleted file mode 100644 index 98af4a89..00000000 --- a/internal/use-case/main-use-case/item-group/helper.go +++ /dev/null @@ -1,22 +0,0 @@ -/* -DESCRIPTION: -Any functions that are used internally by the use-case -*/ -package itemgroup - -import ( - e "simrs-vx/internal/domain/main-entities/item-group" -) - -func setData[T *e.CreateDto | *e.UpdateDto](input T, data *e.ItemGroup) { - var inputSrc *e.CreateDto - if inputT, ok := any(input).(*e.CreateDto); ok { - inputSrc = inputT - } else { - inputTemp := any(input).(*e.UpdateDto) - inputSrc = &inputTemp.CreateDto - } - - data.Code = inputSrc.Code - data.Name = inputSrc.Name -} diff --git a/internal/use-case/main-use-case/item-group/lib.go b/internal/use-case/main-use-case/item-group/lib.go deleted file mode 100644 index 9e86970a..00000000 --- a/internal/use-case/main-use-case/item-group/lib.go +++ /dev/null @@ -1,149 +0,0 @@ -package itemgroup - -import ( - e "simrs-vx/internal/domain/main-entities/item-group" - 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.ItemGroup, error) { - pl.SetLogInfo(event, nil, "started", "DBCreate") - - data := e.ItemGroup{} - 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 { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-create-fail", - Detail: "Database insert failed", - Raw: err, - } - return nil, pl.SetLogError(event, input) - } - - pl.SetLogInfo(event, nil, "complete") - return &data, nil -} - -func ReadListData(input e.ReadListDto, event *pl.Event, dbx ...*gorm.DB) ([]e.ItemGroup, *e.MetaDto, error) { - pl.SetLogInfo(event, input, "started", "DBReadList") - data := []e.ItemGroup{} - pagination := gh.Pagination{} - count := int64(0) - meta := e.MetaDto{} - - var tx *gorm.DB - if len(dbx) > 0 { - tx = dbx[0] - } else { - tx = dg.I - } - - tx = tx. - Model(&e.ItemGroup{}). - Scopes(gh.Filter(input)). - Count(&count). - Scopes(gh.Paginate(input, &pagination)). - Order("\"CreatedAt\" DESC") - - if err := tx.Debug().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.ItemGroup, error) { - pl.SetLogInfo(event, input, "started", "DBReadDetail") - data := e.ItemGroup{} - - var tx *gorm.DB - if len(dbx) > 0 { - tx = dbx[0] - } else { - tx = dg.I - } - - if err := tx.First(&data, input.Id).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.ItemGroup, 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.ItemGroup, 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/item-group/middleware-runner.go b/internal/use-case/main-use-case/item-group/middleware-runner.go deleted file mode 100644 index 0fa678be..00000000 --- a/internal/use-case/main-use-case/item-group/middleware-runner.go +++ /dev/null @@ -1,103 +0,0 @@ -package itemgroup - -import ( - e "simrs-vx/internal/domain/main-entities/item-group" - 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.ItemGroup) 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.ItemGroup) 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.ItemGroup) 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.ItemGroup) 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.ItemGroup) 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/item-group/middleware.go b/internal/use-case/main-use-case/item-group/middleware.go deleted file mode 100644 index ab8a3227..00000000 --- a/internal/use-case/main-use-case/item-group/middleware.go +++ /dev/null @@ -1,9 +0,0 @@ -package itemgroup - -// 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/item-group/tycovar.go b/internal/use-case/main-use-case/item-group/tycovar.go deleted file mode 100644 index 17ad5bc0..00000000 --- a/internal/use-case/main-use-case/item-group/tycovar.go +++ /dev/null @@ -1,44 +0,0 @@ -/* -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 itemgroup - -import ( - "gorm.io/gorm" - - e "simrs-vx/internal/domain/main-entities/item-group" -) - -type createMw struct { - Name string - Func func(input *e.CreateDto, data *e.ItemGroup, tx *gorm.DB) error -} - -type readListMw struct { - Name string - Func func(input *e.ReadListDto, data *e.ItemGroup, tx *gorm.DB) error -} - -type readDetailMw struct { - Name string - Func func(input *e.ReadDetailDto, data *e.ItemGroup, 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/medicine/helper.go b/internal/use-case/main-use-case/medicine/helper.go index 1414b966..3a389b18 100644 --- a/internal/use-case/main-use-case/medicine/helper.go +++ b/internal/use-case/main-use-case/medicine/helper.go @@ -12,6 +12,8 @@ import ( ui "simrs-vx/internal/use-case/main-use-case/item" uip "simrs-vx/internal/use-case/main-use-case/item-price" + ero "simrs-vx/internal/domain/references/organization" + pl "simrs-vx/pkg/logger" pu "simrs-vx/pkg/use-case-helper" @@ -39,7 +41,7 @@ func setData[T *e.CreateDto | *e.UpdateDto](input T, data *e.Medicine) { } func createItem(input *e.CreateDto, event *pl.Event, tx *gorm.DB) error { - igcMed := "Medicine" + igcMed := ero.ITGCMedicine itemCreate := ei.CreateDto{ Code: pu.AddPrefix("med-", input.Code), Name: input.Name, @@ -57,11 +59,10 @@ func createItem(input *e.CreateDto, event *pl.Event, tx *gorm.DB) error { return nil } -func createItemPrice(input *e.CreateDto, event *pl.Event, tx *gorm.DB, item_id *uint) error { +func createItemPrice(event *pl.Event, tx *gorm.DB, item_id *uint) error { itemPriceCreate := eip.CreateDto{ - Item_Id: item_id, - Price: 0, - InsuranceCompany_Code: input.InsuranceCompany_Code, + Item_Id: item_id, + Price: 0, } _, err := uip.CreateData(itemPriceCreate, event, tx) return err @@ -72,7 +73,7 @@ func createItemWithDefaultPrice(input *e.CreateDto, event *pl.Event, tx *gorm.DB return err } - if err := createItemPrice(input, event, tx, input.Item_Id); err != nil { + if err := createItemPrice(event, tx, input.Item_Id); err != nil { return err }