feat (medicine): wip

This commit is contained in:
dpurbosakti
2025-08-28 14:43:39 +07:00
parent dfb9297cc8
commit e827f3d1a9
7 changed files with 141 additions and 23 deletions
+10 -9
View File
@@ -10,15 +10,16 @@ import (
)
type CreateDto struct {
Code string `json:"code"`
Name string `json:"name"`
MedicineGroup_Code *string `json:"medicineGroup_code"`
MedicineMethod_Code *string `json:"medicineMethod_code"`
Uom_Code *string `json:"uom_code"`
Dose uint8 `json:"dose"`
Infra_Id *uint16 `json:"infra_id"`
Stock *int `json:"stock"`
Item_Id *uint `json:"item_id"`
Code string `json:"code"`
Name string `json:"name"`
MedicineGroup_Code *string `json:"medicineGroup_code"`
MedicineMethod_Code *string `json:"medicineMethod_code"`
Uom_Code *string `json:"uom_code"`
Dose uint8 `json:"dose"`
Infra_Id *uint16 `json:"infra_id"`
Stock *int `json:"stock"`
Item_Id *uint `json:"item_id"`
InsuranceCompany_Code *string `json:"insuranceCompany_code"`
}
type ReadListDto struct {
@@ -48,6 +48,7 @@ import (
itemprice "simrs-vx/internal/interface/main-handler/item-price"
mcusrc "simrs-vx/internal/interface/main-handler/mcu-src"
mcusrccategory "simrs-vx/internal/interface/main-handler/mcu-src-category"
medicine "simrs-vx/internal/interface/main-handler/medicine"
medicinegroup "simrs-vx/internal/interface/main-handler/medicine-group"
medicinemethod "simrs-vx/internal/interface/main-handler/medicine-method"
pharmacycompany "simrs-vx/internal/interface/main-handler/pharmacy-company"
@@ -122,6 +123,7 @@ func SetRoutes() http.Handler {
hc.RegCrud(r, "/v1/mcu-src", mcusrc.O)
hc.RegCrud(r, "/v1/ethnic", ethnic.O)
hc.RegCrud(r, "/v1/insurance-company", insurancecompany.O)
hc.RegCrud(r, "/v1/medicine", medicine.O)
hc.RegCrud(r, "/v1/village", village.O)
hc.RegCrud(r, "/v1/district", district.O)
@@ -0,0 +1,71 @@
package medicine
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/medicine"
u "simrs-vx/internal/use-case/main-use-case/medicine"
)
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)
}
@@ -34,6 +34,9 @@ func Create(input e.CreateDto) (*d.Data, error) {
return err
}
if err := createItemWithDefaultPrice(&input, &event, tx); err != nil {
return err
}
if resData, err := CreateData(input, &event, tx); err != nil {
return err
} else {
@@ -5,7 +5,17 @@ Any functions that are used internally by the use-case
package medicine
import (
ei "simrs-vx/internal/domain/main-entities/item"
eip "simrs-vx/internal/domain/main-entities/item-price"
e "simrs-vx/internal/domain/main-entities/medicine"
ui "simrs-vx/internal/use-case/main-use-case/item"
uip "simrs-vx/internal/use-case/main-use-case/item-price"
pl "simrs-vx/pkg/logger"
pu "simrs-vx/pkg/use-case-helper"
"gorm.io/gorm"
)
func setData[T *e.CreateDto | *e.UpdateDto](input T, data *e.Medicine) {
@@ -26,3 +36,44 @@ func setData[T *e.CreateDto | *e.UpdateDto](input T, data *e.Medicine) {
data.Infra_Id = inputSrc.Infra_Id
data.Stock = inputSrc.Stock
}
func createItem(input *e.CreateDto, event *pl.Event, tx *gorm.DB) error {
igcMed := "Medicine"
itemCreate := ei.CreateDto{
Code: pu.AddPrefix("med-", input.Code),
Name: input.Name,
ItemGroup_Code: &igcMed,
Uom_Code: input.Uom_Code,
Infra_Id: input.Infra_Id,
Stock: input.Stock,
}
item, err := ui.CreateData(itemCreate, event, tx)
if err != nil {
return err
}
input.Item_Id = &item.Id
return nil
}
func createItemPrice(input *e.CreateDto, event *pl.Event, tx *gorm.DB, item_id *uint) error {
itemPriceCreate := eip.CreateDto{
Item_Id: item_id,
Price: 0,
InsuranceCompany_Code: input.InsuranceCompany_Code,
}
_, err := uip.CreateData(itemPriceCreate, event, tx)
return err
}
func createItemWithDefaultPrice(input *e.CreateDto, event *pl.Event, tx *gorm.DB) error {
if err := createItem(input, event, tx); err != nil {
return err
}
if err := createItemPrice(input, event, tx, input.Item_Id); err != nil {
return err
}
return nil
}
@@ -7,17 +7,3 @@ package medicine
// CreateMw{Name: "check-data", Func: pm.CheckData},
// )
// }
// func createItemAndItemPrice(input *e.CreateDto, data *e.Medicine, tx *gorm.DB) error {
// if input != nil {
// itemCreate := ei.CreateDto{
// Code: input.Code,
// Name: input.Name,
// ItemGroup_Code: "Medicine",
// Uom_Code: input.Uom_Code,
// Infra_Id: input.Infra_Id,
// Stock: input.Stock,
// }
// }
// return nil
// }
+4
View File
@@ -76,3 +76,7 @@ func HandleMiddlewareError(event *pl.Event, mwType, mwName string, logData inter
}
return pl.SetLogError(event, logData)
}
func AddPrefix(prefix string, str string) string {
return prefix + str
}