wip
This commit is contained in:
No files matched your search
@@ -13,3 +13,7 @@ type DeviceOrder struct {
|
|||||||
Encounter *ee.Encounter `json:"encounter,omitempty" gorm:"foreignKey:Encounter_Id;references:Id"`
|
Encounter *ee.Encounter `json:"encounter,omitempty" gorm:"foreignKey:Encounter_Id;references:Id"`
|
||||||
Status_Code erc.DataStatusCode `json:"status_code"`
|
Status_Code erc.DataStatusCode `json:"status_code"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (d DeviceOrder) IsCompleted() bool {
|
||||||
|
return d.Status_Code == erc.DSCDone
|
||||||
|
}
|
||||||
@@ -13,3 +13,7 @@ type MaterialOrder struct {
|
|||||||
Encounter *ee.Encounter `json:"encounter,omitempty" gorm:"foreignKey:Encounter_Id;references:Id"`
|
Encounter *ee.Encounter `json:"encounter,omitempty" gorm:"foreignKey:Encounter_Id;references:Id"`
|
||||||
Status_Code erc.DataStatusCode `json:"status_code"`
|
Status_Code erc.DataStatusCode `json:"status_code"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (d MaterialOrder) IsCompleted() bool {
|
||||||
|
return d.Status_Code == erc.DSCDone
|
||||||
|
}
|
||||||
@@ -3,6 +3,9 @@ package medicationitem
|
|||||||
import (
|
import (
|
||||||
ecore "simrs-vx/internal/domain/base-entities/core"
|
ecore "simrs-vx/internal/domain/base-entities/core"
|
||||||
emi "simrs-vx/internal/domain/main-entities/medication-item"
|
emi "simrs-vx/internal/domain/main-entities/medication-item"
|
||||||
|
|
||||||
|
pa "simrs-vx/pkg/auth-helper"
|
||||||
|
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -42,6 +45,13 @@ type DeleteDto struct {
|
|||||||
Id uint16 `json:"id"`
|
Id uint16 `json:"id"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type ConsumeDto struct {
|
||||||
|
Id uint16 `json:"id"`
|
||||||
|
Usage float64 `json:"usage"`
|
||||||
|
|
||||||
|
pa.AuthInfo
|
||||||
|
}
|
||||||
|
|
||||||
type MetaDto struct {
|
type MetaDto struct {
|
||||||
PageNumber int `json:"page_number"`
|
PageNumber int `json:"page_number"`
|
||||||
PageSize int `json:"page_size"`
|
PageSize int `json:"page_size"`
|
||||||
|
|||||||
@@ -5,7 +5,10 @@ import (
|
|||||||
ee "simrs-vx/internal/domain/main-entities/encounter"
|
ee "simrs-vx/internal/domain/main-entities/encounter"
|
||||||
ep "simrs-vx/internal/domain/main-entities/pharmacist"
|
ep "simrs-vx/internal/domain/main-entities/pharmacist"
|
||||||
erc "simrs-vx/internal/domain/references/common"
|
erc "simrs-vx/internal/domain/references/common"
|
||||||
|
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
pa "simrs-vx/pkg/auth-helper"
|
||||||
)
|
)
|
||||||
|
|
||||||
type CreateDto struct {
|
type CreateDto struct {
|
||||||
@@ -33,6 +36,8 @@ type FilterDto struct {
|
|||||||
}
|
}
|
||||||
type ReadDetailDto struct {
|
type ReadDetailDto struct {
|
||||||
Id uint16 `json:"id"`
|
Id uint16 `json:"id"`
|
||||||
|
|
||||||
|
pa.AuthInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
type UpdateDto struct {
|
type UpdateDto struct {
|
||||||
|
|||||||
@@ -19,3 +19,7 @@ type Medication struct {
|
|||||||
Pharmacist *ep.Pharmacist `json:"pharmacist,omitempty" gorm:"foreignKey:Pharmacist_Id;references:Id"`
|
Pharmacist *ep.Pharmacist `json:"pharmacist,omitempty" gorm:"foreignKey:Pharmacist_Id;references:Id"`
|
||||||
Status_Code erc.DataStatusCode `json:"status_code"`
|
Status_Code erc.DataStatusCode `json:"status_code"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (d Medication) IsCompleted() bool {
|
||||||
|
return d.Status_Code == erc.DSCDone
|
||||||
|
}
|
||||||
@@ -69,3 +69,15 @@ func (obj myBase) Delete(w http.ResponseWriter, r *http.Request) {
|
|||||||
res, err := u.Delete(dto)
|
res, err := u.Delete(dto)
|
||||||
rw.DataResponse(w, res, err)
|
rw.DataResponse(w, res, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (obj myBase) Complete(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.Complete(dto)
|
||||||
|
rw.DataResponse(w, res, err)
|
||||||
|
}
|
||||||
@@ -138,6 +138,50 @@ func SetRoutes() http.Handler {
|
|||||||
"DELETE /{id}": encounter.O.Delete,
|
"DELETE /{id}": encounter.O.Delete,
|
||||||
"PATCH /{id}/checkout": encounter.O.CheckOut,
|
"PATCH /{id}/checkout": encounter.O.CheckOut,
|
||||||
})
|
})
|
||||||
|
hk.GroupRoutes("/v1/medication", r, auth.GuardMW, hk.MapHandlerFunc{
|
||||||
|
"GET /": medication.O.GetList,
|
||||||
|
"GET /{id}": medication.O.GetDetail,
|
||||||
|
"POST /": medication.O.Create,
|
||||||
|
"PATCH /{id}": medication.O.Update,
|
||||||
|
"DELETE /{id}": medication.O.Delete,
|
||||||
|
"PATCH /{id}/complete": medication.O.Complete,
|
||||||
|
})
|
||||||
|
|
||||||
|
hk.GroupRoutes("/v1/medication-item", r, hk.MapHandlerFunc{
|
||||||
|
"GET /": medicationitem.O.GetList,
|
||||||
|
"GET /{id}": medicationitem.O.GetDetail,
|
||||||
|
"POST /": medicationitem.O.Create,
|
||||||
|
"PATCH /{id}": medicationitem.O.Update,
|
||||||
|
"DELETE /{id}": medicationitem.O.Delete,
|
||||||
|
"PATCH /{id}/redeem": medicationitem.O.Redeem,
|
||||||
|
})
|
||||||
|
|
||||||
|
hk.GroupRoutes("/v1/medication-item-dist", r, auth.GuardMW, hk.MapHandlerFunc{
|
||||||
|
"GET /": medicationitemdist.O.GetList,
|
||||||
|
"GET /{id}": medicationitemdist.O.GetDetail,
|
||||||
|
"POST /": medicationitemdist.O.Create,
|
||||||
|
"PATCH /{id}": medicationitemdist.O.Update,
|
||||||
|
"DELETE /{id}": medicationitemdist.O.Delete,
|
||||||
|
"PATCH /{id}/consume": medicationitemdist.O.Consume,
|
||||||
|
})
|
||||||
|
|
||||||
|
hk.GroupRoutes("/v1/device-order", r, hk.MapHandlerFunc{
|
||||||
|
"GET /": deviceorder.O.GetList,
|
||||||
|
"GET /{id}": deviceorder.O.GetDetail,
|
||||||
|
"POST /": deviceorder.O.Create,
|
||||||
|
"PATCH /{id}": deviceorder.O.Update,
|
||||||
|
"DELETE /{id}": deviceorder.O.Delete,
|
||||||
|
"PATCH /{id}/complete": deviceorder.O.Complete,
|
||||||
|
})
|
||||||
|
|
||||||
|
hk.GroupRoutes("/v1/material-order", r, hk.MapHandlerFunc{
|
||||||
|
"GET /": materialorder.O.GetList,
|
||||||
|
"GET /{id}": materialorder.O.GetDetail,
|
||||||
|
"POST /": materialorder.O.Create,
|
||||||
|
"PATCH /{id}": materialorder.O.Update,
|
||||||
|
"DELETE /{id}": materialorder.O.Delete,
|
||||||
|
"PATCH /{id}/complete": materialorder.O.Complete,
|
||||||
|
})
|
||||||
|
|
||||||
hc.RegCrud(r, "/v1/soapi", auth.GuardMW, soapi.O)
|
hc.RegCrud(r, "/v1/soapi", auth.GuardMW, soapi.O)
|
||||||
hc.RegCrud(r, "/v1/adime", auth.GuardMW, adime.O)
|
hc.RegCrud(r, "/v1/adime", auth.GuardMW, adime.O)
|
||||||
@@ -152,12 +196,7 @@ func SetRoutes() http.Handler {
|
|||||||
hc.RegCrud(r, "/v1/pharmacist", pharmacist.O)
|
hc.RegCrud(r, "/v1/pharmacist", pharmacist.O)
|
||||||
hc.RegCrud(r, "/v1/prescription", prescription.O)
|
hc.RegCrud(r, "/v1/prescription", prescription.O)
|
||||||
hc.RegCrud(r, "/v1/prescription-item", prescriptionitem.O)
|
hc.RegCrud(r, "/v1/prescription-item", prescriptionitem.O)
|
||||||
hc.RegCrud(r, "/v1/medication", medication.O)
|
|
||||||
hc.RegCrud(r, "/v1/medication-item", medicationitem.O)
|
|
||||||
hc.RegCrud(r, "/v1/medication-item-dist", medicationitemdist.O)
|
|
||||||
hc.RegCrud(r, "/v1/device-order", deviceorder.O)
|
|
||||||
hc.RegCrud(r, "/v1/device-order-item", deviceorderitem.O)
|
hc.RegCrud(r, "/v1/device-order-item", deviceorderitem.O)
|
||||||
hc.RegCrud(r, "/v1/material-order", materialorder.O)
|
|
||||||
hc.RegCrud(r, "/v1/material-order-item", materialorderitem.O)
|
hc.RegCrud(r, "/v1/material-order-item", materialorderitem.O)
|
||||||
hc.RegCrud(r, "/v1/mcu-order", mcuorder.O)
|
hc.RegCrud(r, "/v1/mcu-order", mcuorder.O)
|
||||||
hc.RegCrud(r, "/v1/mcu-order-item", mcuorderitem.O)
|
hc.RegCrud(r, "/v1/mcu-order-item", mcuorderitem.O)
|
||||||
|
|||||||
@@ -69,3 +69,15 @@ func (obj myBase) Delete(w http.ResponseWriter, r *http.Request) {
|
|||||||
res, err := u.Delete(dto)
|
res, err := u.Delete(dto)
|
||||||
rw.DataResponse(w, res, err)
|
rw.DataResponse(w, res, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (obj myBase) Complete(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.Complete(dto)
|
||||||
|
rw.DataResponse(w, res, err)
|
||||||
|
}
|
||||||
@@ -6,10 +6,12 @@ import (
|
|||||||
rw "github.com/karincake/risoles"
|
rw "github.com/karincake/risoles"
|
||||||
sf "github.com/karincake/semprit"
|
sf "github.com/karincake/semprit"
|
||||||
|
|
||||||
// ua "github.com/karincake/tumpeng/auth/svc"
|
pa "simrs-vx/pkg/auth-helper"
|
||||||
|
|
||||||
e "simrs-vx/internal/domain/main-entities/medication-item-dist"
|
e "simrs-vx/internal/domain/main-entities/medication-item-dist"
|
||||||
u "simrs-vx/internal/use-case/main-use-case/medication-item-dist"
|
u "simrs-vx/internal/use-case/main-use-case/medication-item-dist"
|
||||||
|
|
||||||
|
d "github.com/karincake/dodol"
|
||||||
)
|
)
|
||||||
|
|
||||||
type myBase struct{}
|
type myBase struct{}
|
||||||
@@ -69,3 +71,24 @@ func (obj myBase) Delete(w http.ResponseWriter, r *http.Request) {
|
|||||||
res, err := u.Delete(dto)
|
res, err := u.Delete(dto)
|
||||||
rw.DataResponse(w, res, err)
|
rw.DataResponse(w, res, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (obj myBase) Consume(w http.ResponseWriter, r *http.Request) {
|
||||||
|
id := rw.ValidateInt(w, "id", r.PathValue("id"))
|
||||||
|
if id <= 0 {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
authInfo, err := pa.GetAuthInfo(r)
|
||||||
|
if err != nil {
|
||||||
|
rw.WriteJSON(w, http.StatusUnauthorized, d.IS{"message": err.Error()}, nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
dto := e.ConsumeDto{}
|
||||||
|
if res := rw.ValidateStructByIOR(w, r.Body, &dto); !res {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
dto.AuthInfo = *authInfo
|
||||||
|
dto.Id = uint16(id)
|
||||||
|
res, err := u.Consume(dto)
|
||||||
|
rw.DataResponse(w, res, err)
|
||||||
|
}
|
||||||
@@ -69,3 +69,15 @@ func (obj myBase) Delete(w http.ResponseWriter, r *http.Request) {
|
|||||||
res, err := u.Delete(dto)
|
res, err := u.Delete(dto)
|
||||||
rw.DataResponse(w, res, err)
|
rw.DataResponse(w, res, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (obj myBase) Redeem(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.Redeem(dto)
|
||||||
|
rw.DataResponse(w, res, err)
|
||||||
|
}
|
||||||
@@ -6,10 +6,12 @@ import (
|
|||||||
rw "github.com/karincake/risoles"
|
rw "github.com/karincake/risoles"
|
||||||
sf "github.com/karincake/semprit"
|
sf "github.com/karincake/semprit"
|
||||||
|
|
||||||
// ua "github.com/karincake/tumpeng/auth/svc"
|
pa "simrs-vx/pkg/auth-helper"
|
||||||
|
|
||||||
e "simrs-vx/internal/domain/main-entities/medication"
|
e "simrs-vx/internal/domain/main-entities/medication"
|
||||||
u "simrs-vx/internal/use-case/main-use-case/medication"
|
u "simrs-vx/internal/use-case/main-use-case/medication"
|
||||||
|
|
||||||
|
d "github.com/karincake/dodol"
|
||||||
)
|
)
|
||||||
|
|
||||||
type myBase struct{}
|
type myBase struct{}
|
||||||
@@ -69,3 +71,24 @@ func (obj myBase) Delete(w http.ResponseWriter, r *http.Request) {
|
|||||||
res, err := u.Delete(dto)
|
res, err := u.Delete(dto)
|
||||||
rw.DataResponse(w, res, err)
|
rw.DataResponse(w, res, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (obj myBase) Complete(w http.ResponseWriter, r *http.Request) {
|
||||||
|
id := rw.ValidateInt(w, "id", r.PathValue("id"))
|
||||||
|
if id <= 0 {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
authInfo, err := pa.GetAuthInfo(r)
|
||||||
|
if err != nil {
|
||||||
|
rw.WriteJSON(w, http.StatusUnauthorized, d.IS{"message": err.Error()}, nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
dto := e.ReadDetailDto{}
|
||||||
|
if res := rw.ValidateStructByIOR(w, r.Body, &dto); !res {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
dto.AuthInfo = *authInfo
|
||||||
|
dto.Id = uint16(id)
|
||||||
|
res, err := u.Complete(dto)
|
||||||
|
rw.DataResponse(w, res, err)
|
||||||
|
}
|
||||||
@@ -19,4 +19,5 @@ func setData[T *e.CreateDto | *e.UpdateDto](input T, data *e.DeviceOrderItem) {
|
|||||||
|
|
||||||
data.DeviceOrder_Id = inputSrc.DeviceOrder_Id
|
data.DeviceOrder_Id = inputSrc.DeviceOrder_Id
|
||||||
data.Device_Id = inputSrc.Device_Id
|
data.Device_Id = inputSrc.Device_Id
|
||||||
|
data.Count = inputSrc.Count
|
||||||
}
|
}
|
||||||
@@ -1,10 +1,13 @@
|
|||||||
package deviceorder
|
package deviceorder
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
e "simrs-vx/internal/domain/main-entities/device-order"
|
e "simrs-vx/internal/domain/main-entities/device-order"
|
||||||
|
|
||||||
|
erc "simrs-vx/internal/domain/references/common"
|
||||||
|
|
||||||
dg "github.com/karincake/apem/db-gorm-pg"
|
dg "github.com/karincake/apem/db-gorm-pg"
|
||||||
d "github.com/karincake/dodol"
|
d "github.com/karincake/dodol"
|
||||||
|
|
||||||
@@ -187,6 +190,9 @@ func Update(input e.UpdateDto) (*d.Data, error) {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if data.IsCompleted() {
|
||||||
|
return errors.New("data already completed")
|
||||||
|
}
|
||||||
mwRunner := newMiddlewareRunner(&event, tx)
|
mwRunner := newMiddlewareRunner(&event, tx)
|
||||||
mwRunner.setMwType(pu.MWTPre)
|
mwRunner.setMwType(pu.MWTPre)
|
||||||
// Run pre-middleware
|
// Run pre-middleware
|
||||||
@@ -243,6 +249,9 @@ func Delete(input e.DeleteDto) (*d.Data, error) {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if data.IsCompleted() {
|
||||||
|
return errors.New("data already completed")
|
||||||
|
}
|
||||||
mwRunner := newMiddlewareRunner(&event, tx)
|
mwRunner := newMiddlewareRunner(&event, tx)
|
||||||
mwRunner.setMwType(pu.MWTPre)
|
mwRunner.setMwType(pu.MWTPre)
|
||||||
// Run pre-middleware
|
// Run pre-middleware
|
||||||
@@ -277,3 +286,54 @@ func Delete(input e.DeleteDto) (*d.Data, error) {
|
|||||||
}, nil
|
}, nil
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Complete(input e.ReadDetailDto) (*d.Data, error) {
|
||||||
|
var data *e.DeviceOrder
|
||||||
|
var err error
|
||||||
|
|
||||||
|
event := pl.Event{
|
||||||
|
Feature: "Complete",
|
||||||
|
Source: source,
|
||||||
|
}
|
||||||
|
|
||||||
|
// Start log
|
||||||
|
pl.SetLogInfo(&event, input, "started", "complete")
|
||||||
|
|
||||||
|
err = dg.I.Transaction(func(tx *gorm.DB) error {
|
||||||
|
data, err = ReadDetailData(input, &event, tx)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if data.IsCompleted() {
|
||||||
|
return errors.New("data already completed")
|
||||||
|
}
|
||||||
|
|
||||||
|
data.Status_Code = erc.DSCDone
|
||||||
|
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
|
||||||
|
})
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return &d.Data{
|
||||||
|
Meta: d.IS{
|
||||||
|
"source": source,
|
||||||
|
"structure": "single-data",
|
||||||
|
"status": "fetched",
|
||||||
|
},
|
||||||
|
Data: data.ToResponse(),
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
@@ -18,4 +18,5 @@ func setData[T *e.CreateDto | *e.UpdateDto](input T, data *e.DeviceOrder) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
data.Encounter_Id = inputSrc.Encounter_Id
|
data.Encounter_Id = inputSrc.Encounter_Id
|
||||||
|
data.Status_Code = inputSrc.Status_Code
|
||||||
}
|
}
|
||||||
@@ -1,10 +1,13 @@
|
|||||||
package materialorder
|
package materialorder
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
e "simrs-vx/internal/domain/main-entities/material-order"
|
e "simrs-vx/internal/domain/main-entities/material-order"
|
||||||
|
|
||||||
|
erc "simrs-vx/internal/domain/references/common"
|
||||||
|
|
||||||
dg "github.com/karincake/apem/db-gorm-pg"
|
dg "github.com/karincake/apem/db-gorm-pg"
|
||||||
d "github.com/karincake/dodol"
|
d "github.com/karincake/dodol"
|
||||||
|
|
||||||
@@ -187,6 +190,10 @@ func Update(input e.UpdateDto) (*d.Data, error) {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if data.IsCompleted() {
|
||||||
|
return errors.New("data already completed")
|
||||||
|
}
|
||||||
|
|
||||||
mwRunner := newMiddlewareRunner(&event, tx)
|
mwRunner := newMiddlewareRunner(&event, tx)
|
||||||
mwRunner.setMwType(pu.MWTPre)
|
mwRunner.setMwType(pu.MWTPre)
|
||||||
// Run pre-middleware
|
// Run pre-middleware
|
||||||
@@ -243,6 +250,10 @@ func Delete(input e.DeleteDto) (*d.Data, error) {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if data.IsCompleted() {
|
||||||
|
return errors.New("data already completed")
|
||||||
|
}
|
||||||
|
|
||||||
mwRunner := newMiddlewareRunner(&event, tx)
|
mwRunner := newMiddlewareRunner(&event, tx)
|
||||||
mwRunner.setMwType(pu.MWTPre)
|
mwRunner.setMwType(pu.MWTPre)
|
||||||
// Run pre-middleware
|
// Run pre-middleware
|
||||||
@@ -277,3 +288,54 @@ func Delete(input e.DeleteDto) (*d.Data, error) {
|
|||||||
}, nil
|
}, nil
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Complete(input e.ReadDetailDto) (*d.Data, error) {
|
||||||
|
var data *e.MaterialOrder
|
||||||
|
var err error
|
||||||
|
|
||||||
|
event := pl.Event{
|
||||||
|
Feature: "Complete",
|
||||||
|
Source: source,
|
||||||
|
}
|
||||||
|
|
||||||
|
// Start log
|
||||||
|
pl.SetLogInfo(&event, input, "started", "complete")
|
||||||
|
|
||||||
|
err = dg.I.Transaction(func(tx *gorm.DB) error {
|
||||||
|
data, err = ReadDetailData(input, &event, tx)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if data.IsCompleted() {
|
||||||
|
return errors.New("data already completed")
|
||||||
|
}
|
||||||
|
|
||||||
|
data.Status_Code = erc.DSCDone
|
||||||
|
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
|
||||||
|
})
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return &d.Data{
|
||||||
|
Meta: d.IS{
|
||||||
|
"source": source,
|
||||||
|
"structure": "single-data",
|
||||||
|
"status": "fetched",
|
||||||
|
},
|
||||||
|
Data: data.ToResponse(),
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
@@ -18,4 +18,5 @@ func setData[T *e.CreateDto | *e.UpdateDto](input T, data *e.MaterialOrder) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
data.Encounter_Id = inputSrc.Encounter_Id
|
data.Encounter_Id = inputSrc.Encounter_Id
|
||||||
|
data.Status_Code = inputSrc.Status_Code
|
||||||
}
|
}
|
||||||
@@ -1,10 +1,13 @@
|
|||||||
package medicationitemdist
|
package medicationitemdist
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
e "simrs-vx/internal/domain/main-entities/medication-item-dist"
|
e "simrs-vx/internal/domain/main-entities/medication-item-dist"
|
||||||
|
|
||||||
|
un "simrs-vx/internal/use-case/main-use-case/nurse"
|
||||||
|
|
||||||
dg "github.com/karincake/apem/db-gorm-pg"
|
dg "github.com/karincake/apem/db-gorm-pg"
|
||||||
d "github.com/karincake/dodol"
|
d "github.com/karincake/dodol"
|
||||||
|
|
||||||
@@ -277,3 +280,74 @@ func Delete(input e.DeleteDto) (*d.Data, error) {
|
|||||||
}, nil
|
}, nil
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Consume(input e.ConsumeDto) (*d.Data, error) {
|
||||||
|
rdDto := e.ReadDetailDto{Id: input.Id}
|
||||||
|
var data *e.MedicationItemDist
|
||||||
|
var err error
|
||||||
|
|
||||||
|
event := pl.Event{
|
||||||
|
Feature: "Consume",
|
||||||
|
Source: source,
|
||||||
|
}
|
||||||
|
|
||||||
|
// Start log
|
||||||
|
pl.SetLogInfo(&event, input, "started", "consume")
|
||||||
|
|
||||||
|
err = dg.I.Transaction(func(tx *gorm.DB) error {
|
||||||
|
if !input.AuthInfo.IsNurse() {
|
||||||
|
event.Status = "failed"
|
||||||
|
event.ErrInfo = pl.ErrorInfo{
|
||||||
|
Code: "auth-forbidden",
|
||||||
|
Detail: "user position is not allowed",
|
||||||
|
Raw: errors.New("authentication failed"),
|
||||||
|
}
|
||||||
|
return pl.SetLogError(&event, input)
|
||||||
|
}
|
||||||
|
|
||||||
|
nurse_id, err := un.GetIdByUserId(&input.AuthInfo.User_Id, &event, tx)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if data, err = ReadDetailData(rdDto, &event, tx); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if data.Remain <= 0 {
|
||||||
|
return errors.New("data already consumed")
|
||||||
|
} else if data.Remain < input.Usage {
|
||||||
|
return errors.New("data remain less than usage")
|
||||||
|
}
|
||||||
|
|
||||||
|
data.Remain -= input.Usage
|
||||||
|
data.Nurse_Id = nurse_id
|
||||||
|
|
||||||
|
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
|
||||||
|
})
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return &d.Data{
|
||||||
|
Meta: d.IS{
|
||||||
|
"source": source,
|
||||||
|
"structure": "single-data",
|
||||||
|
"status": "updated",
|
||||||
|
},
|
||||||
|
Data: data.ToResponse(),
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
@@ -20,4 +20,5 @@ func setData[T *e.CreateDto | *e.UpdateDto](input T, data *e.MedicationItemDist)
|
|||||||
data.MedicationItem_Id = inputSrc.MedicationItem_Id
|
data.MedicationItem_Id = inputSrc.MedicationItem_Id
|
||||||
data.DateTime = inputSrc.DateTime
|
data.DateTime = inputSrc.DateTime
|
||||||
data.Remain = inputSrc.Remain
|
data.Remain = inputSrc.Remain
|
||||||
|
data.Nurse_Id = inputSrc.Nurse_Id
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
package medicationitem
|
package medicationitem
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
e "simrs-vx/internal/domain/main-entities/medication-item"
|
e "simrs-vx/internal/domain/main-entities/medication-item"
|
||||||
@@ -277,3 +278,54 @@ func Delete(input e.DeleteDto) (*d.Data, error) {
|
|||||||
}, nil
|
}, nil
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Redeem(input e.ReadDetailDto) (*d.Data, error) {
|
||||||
|
var data *e.MedicationItem
|
||||||
|
var err error
|
||||||
|
|
||||||
|
event := pl.Event{
|
||||||
|
Feature: "Redeem",
|
||||||
|
Source: source,
|
||||||
|
}
|
||||||
|
|
||||||
|
// Start log
|
||||||
|
pl.SetLogInfo(&event, input, "started", "redeem")
|
||||||
|
|
||||||
|
err = dg.I.Transaction(func(tx *gorm.DB) error {
|
||||||
|
data, err = ReadDetailData(input, &event, tx)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if data.IsRedeemed {
|
||||||
|
return errors.New("data already redeemed")
|
||||||
|
}
|
||||||
|
|
||||||
|
data.IsRedeemed = true
|
||||||
|
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
|
||||||
|
})
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return &d.Data{
|
||||||
|
Meta: d.IS{
|
||||||
|
"source": source,
|
||||||
|
"structure": "single-data",
|
||||||
|
"status": "fetched",
|
||||||
|
},
|
||||||
|
Data: data.ToResponse(),
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
@@ -23,4 +23,6 @@ func setData[T *e.CreateDto | *e.UpdateDto](input T, data *e.MedicationItem) {
|
|||||||
data.MedicineMix_Id = inputSrc.MedicineMix_Id
|
data.MedicineMix_Id = inputSrc.MedicineMix_Id
|
||||||
data.Usage = inputSrc.Usage
|
data.Usage = inputSrc.Usage
|
||||||
data.Interval = inputSrc.Interval
|
data.Interval = inputSrc.Interval
|
||||||
|
data.IntervalUnit_Code = inputSrc.IntervalUnit_Code
|
||||||
|
data.IsRedeemed = inputSrc.IsRedeemed
|
||||||
}
|
}
|
||||||
@@ -1,10 +1,15 @@
|
|||||||
package medication
|
package medication
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
e "simrs-vx/internal/domain/main-entities/medication"
|
e "simrs-vx/internal/domain/main-entities/medication"
|
||||||
|
|
||||||
|
erc "simrs-vx/internal/domain/references/common"
|
||||||
|
|
||||||
|
up "simrs-vx/internal/use-case/main-use-case/pharmacist"
|
||||||
|
|
||||||
dg "github.com/karincake/apem/db-gorm-pg"
|
dg "github.com/karincake/apem/db-gorm-pg"
|
||||||
d "github.com/karincake/dodol"
|
d "github.com/karincake/dodol"
|
||||||
|
|
||||||
@@ -277,3 +282,70 @@ func Delete(input e.DeleteDto) (*d.Data, error) {
|
|||||||
}, nil
|
}, nil
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Complete(input e.ReadDetailDto) (*d.Data, error) {
|
||||||
|
var data *e.Medication
|
||||||
|
var err error
|
||||||
|
|
||||||
|
event := pl.Event{
|
||||||
|
Feature: "Complete",
|
||||||
|
Source: source,
|
||||||
|
}
|
||||||
|
|
||||||
|
// Start log
|
||||||
|
pl.SetLogInfo(&event, input, "started", "complete")
|
||||||
|
|
||||||
|
err = dg.I.Transaction(func(tx *gorm.DB) error {
|
||||||
|
data, err = ReadDetailData(input, &event, tx)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if data.IsCompleted() {
|
||||||
|
return errors.New("data already completed")
|
||||||
|
}
|
||||||
|
|
||||||
|
if !input.AuthInfo.IsPharmacist() {
|
||||||
|
event.Status = "failed"
|
||||||
|
event.ErrInfo = pl.ErrorInfo{
|
||||||
|
Code: "auth-forbidden",
|
||||||
|
Detail: "user position is not allowed",
|
||||||
|
Raw: errors.New("authentication failed"),
|
||||||
|
}
|
||||||
|
return pl.SetLogError(&event, input)
|
||||||
|
}
|
||||||
|
|
||||||
|
pharmacist_id, err := up.GetIdByUserId(&input.AuthInfo.User_Id, &event, tx)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
data.Status_Code = erc.DSCDone
|
||||||
|
data.Pharmacist_Id = pharmacist_id
|
||||||
|
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
|
||||||
|
})
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return &d.Data{
|
||||||
|
Meta: d.IS{
|
||||||
|
"source": source,
|
||||||
|
"structure": "single-data",
|
||||||
|
"status": "fetched",
|
||||||
|
},
|
||||||
|
Data: data.ToResponse(),
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
@@ -6,6 +6,10 @@ package medication
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
e "simrs-vx/internal/domain/main-entities/medication"
|
e "simrs-vx/internal/domain/main-entities/medication"
|
||||||
|
// emi "simrs-vx/internal/domain/main-entities/medication-item"
|
||||||
|
// emid "simrs-vx/internal/domain/main-entities/medication-item-dist"
|
||||||
|
// umi "simrs-vx/internal/use-case/main-use-case/medication-item"
|
||||||
|
// umid "simrs-vx/internal/use-case/main-use-case/medication-item-dist"
|
||||||
)
|
)
|
||||||
|
|
||||||
func setData[T *e.CreateDto | *e.UpdateDto](input T, data *e.Medication) {
|
func setData[T *e.CreateDto | *e.UpdateDto](input T, data *e.Medication) {
|
||||||
@@ -20,4 +24,35 @@ func setData[T *e.CreateDto | *e.UpdateDto](input T, data *e.Medication) {
|
|||||||
data.Encounter_Id = inputSrc.Encounter_Id
|
data.Encounter_Id = inputSrc.Encounter_Id
|
||||||
data.IssuedAt = inputSrc.IssuedAt
|
data.IssuedAt = inputSrc.IssuedAt
|
||||||
data.Pharmacist_Id = inputSrc.Pharmacist_Id
|
data.Pharmacist_Id = inputSrc.Pharmacist_Id
|
||||||
|
data.Status_Code = inputSrc.Status_Code
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// func createMedicationItemDist(medication_id *uint, event *pl.Event, dbx ...*gorm.DB) error {
|
||||||
|
// pl.SetLogInfo(event, nil, "started", "createMedicationItemDist")
|
||||||
|
// var tx *gorm.DB
|
||||||
|
// if len(dbx) > 0 {
|
||||||
|
// tx = dbx[0]
|
||||||
|
// } else {
|
||||||
|
// tx = dg.I
|
||||||
|
// }
|
||||||
|
|
||||||
|
// filterMI := emi.ReadListDto{FilterDto: emi.FilterDto{Medication_Id: medication_id, IsRedeemed: true}}
|
||||||
|
// medicationItemList, _, err := umi.ReadListData(filterMI, event, tx)
|
||||||
|
// if err != nil {
|
||||||
|
// return err
|
||||||
|
// }
|
||||||
|
// for _, medicationItem := range medicationItemList {
|
||||||
|
// midCreate := emid.CreateDto{
|
||||||
|
// MedicationItem_Id: &medicationItem.Id,
|
||||||
|
// DateTime: medicationItem.MedicationItem.DateTime,
|
||||||
|
// Remain: medicationItem.MedicationItem.Remain,
|
||||||
|
// Nurse_Id: medicationItem.MedicationItem.Nurse_Id,
|
||||||
|
// }
|
||||||
|
// if err := umid.Create(midCreate); err != nil {
|
||||||
|
// return err
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
// pl.SetLogInfo(event, nil, "complete")
|
||||||
|
// return nil
|
||||||
|
// }
|
||||||
@@ -159,3 +159,34 @@ func DeleteData(data *e.Nurse, event *pl.Event, dbx ...*gorm.DB) error {
|
|||||||
pl.SetLogInfo(event, nil, "complete")
|
pl.SetLogInfo(event, nil, "complete")
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func GetIdByUserId(user_id *uint, event *pl.Event, dbx ...*gorm.DB) (*uint, error) {
|
||||||
|
pl.SetLogInfo(event, nil, "started", "DBGetIdByUserId")
|
||||||
|
var tx *gorm.DB
|
||||||
|
if len(dbx) > 0 {
|
||||||
|
tx = dbx[0]
|
||||||
|
} else {
|
||||||
|
tx = dg.I
|
||||||
|
}
|
||||||
|
|
||||||
|
var nurse_id uint
|
||||||
|
|
||||||
|
err := tx.Model(&e.Nurse{}).
|
||||||
|
Select("Nurse.Id as nurse_id").
|
||||||
|
Joins("JOIN Employee e ON e.Id = Nurse.Employee_Id").
|
||||||
|
Where("e.User_Id = ?", user_id).
|
||||||
|
Scan(&nurse_id).Error
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
event.Status = "failed"
|
||||||
|
event.ErrInfo = pl.ErrorInfo{
|
||||||
|
Code: "data-get-fail",
|
||||||
|
Detail: "Database get failed",
|
||||||
|
Raw: err,
|
||||||
|
}
|
||||||
|
return nil, pl.SetLogError(event, user_id)
|
||||||
|
}
|
||||||
|
|
||||||
|
pl.SetLogInfo(event, nil, "complete")
|
||||||
|
return &nurse_id, nil
|
||||||
|
}
|
||||||
@@ -159,3 +159,34 @@ func DeleteData(data *e.Pharmacist, event *pl.Event, dbx ...*gorm.DB) error {
|
|||||||
pl.SetLogInfo(event, nil, "complete")
|
pl.SetLogInfo(event, nil, "complete")
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func GetIdByUserId(user_id *uint, event *pl.Event, dbx ...*gorm.DB) (*uint, error) {
|
||||||
|
pl.SetLogInfo(event, nil, "started", "DBGetIdByUserId")
|
||||||
|
var tx *gorm.DB
|
||||||
|
if len(dbx) > 0 {
|
||||||
|
tx = dbx[0]
|
||||||
|
} else {
|
||||||
|
tx = dg.I
|
||||||
|
}
|
||||||
|
|
||||||
|
var pharmacist_id uint
|
||||||
|
|
||||||
|
err := tx.Model(&e.Pharmacist{}).
|
||||||
|
Select("Pharmacist.Id as pharmacist_id").
|
||||||
|
Joins("JOIN Employee e ON e.Id = Pharmacist.Employee_Id").
|
||||||
|
Where("e.User_Id = ?", user_id).
|
||||||
|
Scan(&pharmacist_id).Error
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
event.Status = "failed"
|
||||||
|
event.ErrInfo = pl.ErrorInfo{
|
||||||
|
Code: "data-get-fail",
|
||||||
|
Detail: "Database get failed",
|
||||||
|
Raw: err,
|
||||||
|
}
|
||||||
|
return nil, pl.SetLogError(event, user_id)
|
||||||
|
}
|
||||||
|
|
||||||
|
pl.SetLogInfo(event, nil, "complete")
|
||||||
|
return &pharmacist_id, nil
|
||||||
|
}
|
||||||
@@ -23,4 +23,5 @@ func setData[T *e.CreateDto | *e.UpdateDto](input T, data *e.PrescriptionItem) {
|
|||||||
data.MedicineMix_Id = inputSrc.MedicineMix_Id
|
data.MedicineMix_Id = inputSrc.MedicineMix_Id
|
||||||
data.Usage = inputSrc.Usage
|
data.Usage = inputSrc.Usage
|
||||||
data.Interval = inputSrc.Interval
|
data.Interval = inputSrc.Interval
|
||||||
|
data.IntervalUnit_Code = inputSrc.IntervalUnit_Code
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user