adjust after references fixed

This commit is contained in:
dpurbosakti
2025-08-29 14:59:19 +07:00
parent 0fa7e8ccde
commit 2fa3de8c53
28 changed files with 134 additions and 1669 deletions

No files matched your search

@@ -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 "DiagnoseSrc" table
CREATE TABLE "public"."DiagnoseSrc" ( CREATE TABLE "public"."DiagnoseSrc" (
"Id" bigserial NOT NULL, "Id" bigserial NOT NULL,
@@ -10,52 +25,16 @@ CREATE TABLE "public"."DiagnoseSrc" (
PRIMARY KEY ("Id"), PRIMARY KEY ("Id"),
CONSTRAINT "uni_DiagnoseSrc_Code" UNIQUE ("Code") CONSTRAINT "uni_DiagnoseSrc_Code" UNIQUE ("Code")
); );
-- Create "PharmacyCompany" table -- Create "Uom" table
CREATE TABLE "public"."PharmacyCompany" ( CREATE TABLE "public"."Uom" (
"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" (
"Id" serial NOT NULL, "Id" serial NOT NULL,
"CreatedAt" timestamptz NULL, "CreatedAt" timestamptz NULL,
"UpdatedAt" timestamptz NULL, "UpdatedAt" timestamptz NULL,
"DeletedAt" timestamptz NULL, "DeletedAt" timestamptz NULL,
"Code" character varying(20) NULL, "Code" character varying(10) NULL,
"Name" character varying(50) NULL, "Name" character varying(50) NULL,
"CheckupCategory_Code" character varying(20) NULL,
PRIMARY KEY ("Id"), PRIMARY KEY ("Id"),
CONSTRAINT "uni_McuSrc_Code" UNIQUE ("Code") CONSTRAINT "uni_Uom_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")
); );
-- Create "Counter" table -- Create "Counter" table
CREATE TABLE "public"."Counter" ( CREATE TABLE "public"."Counter" (
@@ -72,31 +51,41 @@ CREATE TABLE "public"."Counter" (
PRIMARY KEY ("Id"), PRIMARY KEY ("Id"),
CONSTRAINT "uni_Counter_Code" UNIQUE ("Code") CONSTRAINT "uni_Counter_Code" UNIQUE ("Code")
); );
-- Create "User" table -- Create "McuSrcCategory" table
CREATE TABLE "public"."User" ( CREATE TABLE "public"."McuSrcCategory" (
"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" (
"Id" serial NOT NULL, "Id" serial NOT NULL,
"CreatedAt" timestamptz NULL, "CreatedAt" timestamptz NULL,
"UpdatedAt" timestamptz NULL, "UpdatedAt" timestamptz NULL,
"DeletedAt" timestamptz NULL, "DeletedAt" timestamptz NULL,
"Code" character varying(10) NULL, "Code" character varying(20) NULL,
"Name" character varying(50) NULL, "Name" character varying(50) NULL,
"Scope_Code" character varying(10) NULL,
PRIMARY KEY ("Id"), 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 "Item" table
CREATE TABLE "public"."Item" ( CREATE TABLE "public"."Item" (
@@ -112,7 +101,6 @@ CREATE TABLE "public"."Item" (
"Stock" bigint NULL, "Stock" bigint NULL,
PRIMARY KEY ("Id"), PRIMARY KEY ("Id"),
CONSTRAINT "uni_Item_Code" UNIQUE ("Code"), 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 CONSTRAINT "fk_Item_Uom" FOREIGN KEY ("Uom_Code") REFERENCES "public"."Uom" ("Code") ON UPDATE NO ACTION ON DELETE NO ACTION
); );
-- Create "Device" table -- 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_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 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 "Infra" table
CREATE TABLE "public"."Infra" ( CREATE TABLE "public"."Infra" (
"Id" serial NOT NULL, "Id" serial NOT NULL,
@@ -276,7 +252,6 @@ CREATE TABLE "public"."Infra" (
"Item_Id" bigint NULL, "Item_Id" bigint NULL,
PRIMARY KEY ("Id"), PRIMARY KEY ("Id"),
CONSTRAINT "uni_Infra_Code" UNIQUE ("Code"), 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 CONSTRAINT "fk_Infra_Item" FOREIGN KEY ("Item_Id") REFERENCES "public"."Item" ("Id") ON UPDATE NO ACTION ON DELETE NO ACTION
); );
-- Create "InsuranceCompany" table -- Create "InsuranceCompany" table
+2 -2
View File
@@ -1,2 +1,2 @@
h1:kBvWq4ulyP8Gz3UPNE/UdpYtWBIpEQskVnanFmaFCRc= h1:EYDfTQ6odgD5wgHGPw24RCXeKOoI17X2Bdn5MiCcftM=
20250828092003.sql h1:ZxYlga6zF0PsTCMisoQo5yUVNwilr0njJQF8mZuVS64= 20250829075746.sql h1:HZRqrJLqG8GB8W5gpmCR4Itds/Ya51xJdY57nHuXSac=
@@ -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
}
@@ -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"`
}
+24 -25
View File
@@ -2,24 +2,25 @@ package infra
import ( import (
ecore "simrs-vx/internal/domain/base-entities/core" 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" ei "simrs-vx/internal/domain/main-entities/item"
ero "simrs-vx/internal/domain/references/organization"
) )
type CreateDto struct { type CreateDto struct {
Code string `json:"code"` Code string `json:"code"`
Name string `json:"name"` Name string `json:"name"`
InfraGroup_Code *string `json:"infraGroup_code"` InfraGroup_Code *ero.InfraGroupCode `json:"infraGroup_code"`
Parent_Id *int16 `json:"parent_id"` Parent_Id *int16 `json:"parent_id"`
Item_Id *uint `json:"item_id"` Item_Id *uint `json:"item_id"`
} }
type ReadListDto struct { type ReadListDto struct {
Code string `json:"code"` Code string `json:"code"`
Name string `json:"name"` Name string `json:"name"`
InfraGroup_Code *string `json:"infraGroup_code"` InfraGroup_Code *ero.InfraGroupCode `json:"infraGroup_code"`
Parent_Id *int16 `json:"parent_id"` Parent_Id *int16 `json:"parent_id"`
Item_Id *uint `json:"item_id"` Item_Id *uint `json:"item_id"`
Page int `json:"page"` Page int `json:"page"`
PageSize int `json:"page_size"` PageSize int `json:"page_size"`
@@ -27,12 +28,12 @@ type ReadListDto struct {
} }
type ReadDetailDto struct { type ReadDetailDto struct {
Id uint16 `json:"id"` Id uint16 `json:"id"`
Code string `json:"code"` Code string `json:"code"`
Name string `json:"name"` Name string `json:"name"`
InfraGroup_Code *string `json:"infraGroup_code"` InfraGroup_Code *ero.InfraGroupCode `json:"infraGroup_code"`
Parent_Id *int16 `json:"parent_id"` Parent_Id *int16 `json:"parent_id"`
Item_Id *uint `json:"item_id"` Item_Id *uint `json:"item_id"`
} }
type UpdateDto struct { type UpdateDto struct {
@@ -52,13 +53,12 @@ type MetaDto struct {
type ResponseDto struct { type ResponseDto struct {
ecore.SmallMain ecore.SmallMain
Code string `json:"code"` Code string `json:"code"`
Name string `json:"name"` Name string `json:"name"`
InfraGroup_Code *string `json:"infraGroup_code"` InfraGroup_Code *ero.InfraGroupCode `json:"infraGroup_code"`
InfraGroup *eig.InfraGroup `json:"infraGroup,omitempty"` Parent_Id *int16 `json:"parent_id"`
Parent_Id *int16 `json:"parent_id"` Item_Id *uint `json:"item_id"`
Item_Id *uint `json:"item_id"` Item *ei.Item `json:"item,omitempty"`
Item *ei.Item `json:"item,omitempty"`
} }
func (d Infra) ToResponse() ResponseDto { func (d Infra) ToResponse() ResponseDto {
@@ -66,7 +66,6 @@ func (d Infra) ToResponse() ResponseDto {
Code: d.Code, Code: d.Code,
Name: d.Name, Name: d.Name,
InfraGroup_Code: d.InfraGroup_Code, InfraGroup_Code: d.InfraGroup_Code,
InfraGroup: d.InfraGroup,
Parent_Id: d.Parent_Id, Parent_Id: d.Parent_Id,
Item_Id: d.Item_Id, Item_Id: d.Item_Id,
Item: d.Item, Item: d.Item,
@@ -2,17 +2,17 @@ package infra
import ( import (
ecore "simrs-vx/internal/domain/base-entities/core" 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" ei "simrs-vx/internal/domain/main-entities/item"
ero "simrs-vx/internal/domain/references/organization"
) )
type Infra struct { type Infra struct {
ecore.SmallMain // adjust this according to the needs ecore.SmallMain // adjust this according to the needs
Code string `json:"code" gorm:"unique;size:10"` Code string `json:"code" gorm:"unique;size:10"`
Name string `json:"name" gorm:"size:50"` Name string `json:"name" gorm:"size:50"`
InfraGroup_Code *string `json:"infraGroup_code" gorm:"size:10"` InfraGroup_Code *ero.InfraGroupCode `json:"infraGroup_code" gorm:"size:10"`
InfraGroup *eig.InfraGroup `json:"infraGroup,omitempty" gorm:"foreignKey:InfraGroup_Code;references:Code"` Parent_Id *int16 `json:"parent_id"`
Parent_Id *int16 `json:"parent_id"` Item_Id *uint `json:"item_id"`
Item_Id *uint `json:"item_id"` Item *ei.Item `json:"item,omitempty" gorm:"foreignKey:Item_Id;references:Id"`
Item *ei.Item `json:"item,omitempty" gorm:"foreignKey:Item_Id;references:Id"`
} }
@@ -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
}
@@ -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"`
}
+27 -29
View File
@@ -2,26 +2,26 @@ package item
import ( import (
ecore "simrs-vx/internal/domain/base-entities/core" 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" eu "simrs-vx/internal/domain/main-entities/uom"
ero "simrs-vx/internal/domain/references/organization"
) )
type CreateDto struct { type CreateDto struct {
Code string `json:"code"` Code string `json:"code"`
Name string `json:"name"` Name string `json:"name"`
ItemGroup_Code *string `json:"itemGroup_code"` ItemGroup_Code *ero.ItemGroupCode `json:"itemGroup_code"`
Uom_Code *string `json:"uom_code"` Uom_Code *string `json:"uom_code"`
Infra_Id *uint16 `json:"infra_id"` Infra_Id *uint16 `json:"infra_id"`
Stock *int `json:"stock"` Stock *int `json:"stock"`
} }
type ReadListDto struct { type ReadListDto struct {
Code string `json:"code"` Code string `json:"code"`
Name string `json:"name"` Name string `json:"name"`
ItemGroup_Code *string `json:"itemGroup_code"` ItemGroup_Code *ero.ItemGroupCode `json:"itemGroup_code"`
Uom_Code *string `json:"uom_code"` Uom_Code *string `json:"uom_code"`
Infra_Id *uint16 `json:"infra_id"` Infra_Id *uint16 `json:"infra_id"`
Stock *int `json:"stock"` Stock *int `json:"stock"`
Page int `json:"page"` Page int `json:"page"`
PageSize int `json:"page_size"` PageSize int `json:"page_size"`
@@ -29,13 +29,13 @@ type ReadListDto struct {
} }
type ReadDetailDto struct { type ReadDetailDto struct {
Id uint16 `json:"id"` Id uint16 `json:"id"`
Code string `json:"code"` Code string `json:"code"`
Name string `json:"name"` Name string `json:"name"`
ItemGroup_Code *string `json:"itemGroup_code"` ItemGroup_Code *ero.ItemGroupCode `json:"itemGroup_code"`
Uom_Code *string `json:"uom_code"` Uom_Code *string `json:"uom_code"`
Infra_Id *int16 `json:"infra_id"` Infra_Id *int16 `json:"infra_id"`
Stock *int `json:"stock"` Stock *int `json:"stock"`
} }
type UpdateDto struct { type UpdateDto struct {
@@ -55,14 +55,13 @@ type MetaDto struct {
type ResponseDto struct { type ResponseDto struct {
ecore.Main ecore.Main
Code string `json:"code"` Code string `json:"code"`
Name string `json:"name"` Name string `json:"name"`
ItemGroup_Code *string `json:"itemGroup_code"` ItemGroup_Code *ero.ItemGroupCode `json:"itemGroup_code"`
ItemGroup *eig.ItemGroup `json:"itemGroup,omitempty"` Uom_Code *string `json:"uom_code"`
Uom_Code *string `json:"uom_code"` Uom *eu.Uom `json:"uom,omitempty"`
Uom *eu.Uom `json:"uom,omitempty"` Infra_Id *uint16 `json:"infra_id"`
Infra_Id *uint16 `json:"infra_id"` Stock *int `json:"stock"`
Stock *int `json:"stock"`
} }
func (d Item) ToResponse() ResponseDto { func (d Item) ToResponse() ResponseDto {
@@ -70,7 +69,6 @@ func (d Item) ToResponse() ResponseDto {
Code: d.Code, Code: d.Code,
Name: d.Name, Name: d.Name,
ItemGroup_Code: d.ItemGroup_Code, ItemGroup_Code: d.ItemGroup_Code,
ItemGroup: d.ItemGroup,
Uom_Code: d.Uom_Code, Uom_Code: d.Uom_Code,
Uom: d.Uom, Uom: d.Uom,
Infra_Id: d.Infra_Id, Infra_Id: d.Infra_Id,
+10 -10
View File
@@ -2,18 +2,18 @@ package item
import ( import (
ecore "simrs-vx/internal/domain/base-entities/core" 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" eu "simrs-vx/internal/domain/main-entities/uom"
ero "simrs-vx/internal/domain/references/organization"
) )
type Item struct { type Item struct {
ecore.Main // adjust this according to the needs ecore.Main // adjust this according to the needs
Code string `json:"code" gorm:"unique;size:50"` Code string `json:"code" gorm:"unique;size:50"`
Name string `json:"name" gorm:"size:100"` Name string `json:"name" gorm:"size:100"`
ItemGroup_Code *string `json:"itemGroup_code" gorm:"size:10"` ItemGroup_Code *ero.ItemGroupCode `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_Code *string `json:"uom_code" gorm:"size:10"` Uom *eu.Uom `json:"uom,omitempty" gorm:"foreignKey:Uom_Code;references:Code"`
Uom *eu.Uom `json:"uom,omitempty" gorm:"foreignKey:Uom_Code;references:Code"` Infra_Id *uint16 `json:"infra_id"`
Infra_Id *uint16 `json:"infra_id"` Stock *int `json:"stock"`
Stock *int `json:"stock"`
} }
@@ -2,7 +2,7 @@ package organization
type ( type (
EmployeePosisitionCode string EmployeePosisitionCode string
ItemGroupCoode string ItemGroupCode string
InfraGroupCode string InfraGroupCode string
UnitTypeCode string UnitTypeCode string
DoctorFeeTypeCode string DoctorFeeTypeCode string
@@ -18,12 +18,12 @@ const (
EPCPav EmployeePosisitionCode = "payment-verificator" // Konfirmasi pembayaran EPCPav EmployeePosisitionCode = "payment-verificator" // Konfirmasi pembayaran
EPCMan EmployeePosisitionCode = "management" // Manajemen EPCMan EmployeePosisitionCode = "management" // Manajemen
ITGCInfra ItemGroupCoode = "infra" ITGCInfra ItemGroupCode = "infra"
ITGCMedicine ItemGroupCoode = "medicine" ITGCMedicine ItemGroupCode = "medicine"
ITGCDevice ItemGroupCoode = "device" ITGCDevice ItemGroupCode = "device"
ITGCMaterial ItemGroupCoode = "material" ITGCMaterial ItemGroupCode = "material"
ITGCEmpFee ItemGroupCoode = "employee-fee" ITGCEmpFee ItemGroupCode = "employee-fee"
ITGCDocFee ItemGroupCoode = "doctor-fee" ITGCDocFee ItemGroupCode = "doctor-fee"
IFGCBuilding InfraGroupCode = "building" IFGCBuilding InfraGroupCode = "building"
IFGCFloor InfraGroupCode = "floor" IFGCFloor InfraGroupCode = "floor"
@@ -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)
}
@@ -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)
}
@@ -44,11 +44,9 @@ import (
doctorfee "simrs-vx/internal/interface/main-handler/doctor-fee" doctorfee "simrs-vx/internal/interface/main-handler/doctor-fee"
ethnic "simrs-vx/internal/interface/main-handler/ethnic" ethnic "simrs-vx/internal/interface/main-handler/ethnic"
infra "simrs-vx/internal/interface/main-handler/infra" 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" installation "simrs-vx/internal/interface/main-handler/installation"
insurancecompany "simrs-vx/internal/interface/main-handler/insurance-company" insurancecompany "simrs-vx/internal/interface/main-handler/insurance-company"
item "simrs-vx/internal/interface/main-handler/item" 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" itemprice "simrs-vx/internal/interface/main-handler/item-price"
material "simrs-vx/internal/interface/main-handler/material" material "simrs-vx/internal/interface/main-handler/material"
mcusrc "simrs-vx/internal/interface/main-handler/mcu-src" 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/pharmacy-company", pharmacycompany.O)
hc.RegCrud(r, "/v1/diagnose-src", diagnosesrc.O) hc.RegCrud(r, "/v1/diagnose-src", diagnosesrc.O)
hc.RegCrud(r, "/v1/procedure-src", proceduresrc.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/uom", uom.O)
hc.RegCrud(r, "/v1/item", item.O) hc.RegCrud(r, "/v1/item", item.O)
hc.RegCrud(r, "/v1/item-price", itemprice.O) hc.RegCrud(r, "/v1/item-price", itemprice.O)
@@ -16,11 +16,9 @@ import (
employee "simrs-vx/internal/domain/main-entities/employee" employee "simrs-vx/internal/domain/main-entities/employee"
ethnic "simrs-vx/internal/domain/main-entities/ethnic" ethnic "simrs-vx/internal/domain/main-entities/ethnic"
infra "simrs-vx/internal/domain/main-entities/infra" 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" installation "simrs-vx/internal/domain/main-entities/installation"
insurancecompany "simrs-vx/internal/domain/main-entities/insurance-company" insurancecompany "simrs-vx/internal/domain/main-entities/insurance-company"
item "simrs-vx/internal/domain/main-entities/item" 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" itemprice "simrs-vx/internal/domain/main-entities/item-price"
material "simrs-vx/internal/domain/main-entities/material" material "simrs-vx/internal/domain/main-entities/material"
mcusrc "simrs-vx/internal/domain/main-entities/mcu-src" mcusrc "simrs-vx/internal/domain/main-entities/mcu-src"
@@ -96,9 +94,7 @@ func GetEntities() []any {
&pharmacycompany.PharmacyCompany{}, &pharmacycompany.PharmacyCompany{},
&diagnosesrc.DiagnoseSrc{}, &diagnosesrc.DiagnoseSrc{},
&proceduresrc.ProcedureSrc{}, &proceduresrc.ProcedureSrc{},
&infragroup.InfraGroup{},
&employee.Employee{}, &employee.Employee{},
&itemgroup.ItemGroup{},
&doctor.Doctor{}, &doctor.Doctor{},
&nurse.Nurse{}, &nurse.Nurse{},
&nutritionist.Nutritionist{}, &nutritionist.Nutritionist{},
@@ -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
}
@@ -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
}
@@ -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
}
@@ -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
}
@@ -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},
// )
// }
@@ -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
@@ -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
}
@@ -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
}
@@ -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
}
@@ -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
}
@@ -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},
// )
// }
@@ -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
@@ -12,6 +12,8 @@ import (
ui "simrs-vx/internal/use-case/main-use-case/item" ui "simrs-vx/internal/use-case/main-use-case/item"
uip "simrs-vx/internal/use-case/main-use-case/item-price" uip "simrs-vx/internal/use-case/main-use-case/item-price"
ero "simrs-vx/internal/domain/references/organization"
pl "simrs-vx/pkg/logger" pl "simrs-vx/pkg/logger"
pu "simrs-vx/pkg/use-case-helper" 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 { func createItem(input *e.CreateDto, event *pl.Event, tx *gorm.DB) error {
igcMed := "Medicine" igcMed := ero.ITGCMedicine
itemCreate := ei.CreateDto{ itemCreate := ei.CreateDto{
Code: pu.AddPrefix("med-", input.Code), Code: pu.AddPrefix("med-", input.Code),
Name: input.Name, Name: input.Name,
@@ -57,11 +59,10 @@ func createItem(input *e.CreateDto, event *pl.Event, tx *gorm.DB) error {
return nil 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{ itemPriceCreate := eip.CreateDto{
Item_Id: item_id, Item_Id: item_id,
Price: 0, Price: 0,
InsuranceCompany_Code: input.InsuranceCompany_Code,
} }
_, err := uip.CreateData(itemPriceCreate, event, tx) _, err := uip.CreateData(itemPriceCreate, event, tx)
return err return err
@@ -72,7 +73,7 @@ func createItemWithDefaultPrice(input *e.CreateDto, event *pl.Event, tx *gorm.DB
return err 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 return err
} }