feat/things-munaja: device and mcu order
This commit is contained in:
@@ -15,6 +15,7 @@ type CreateDto struct {
|
|||||||
type ReadListDto struct {
|
type ReadListDto struct {
|
||||||
FilterDto
|
FilterDto
|
||||||
Includes string `json:"includes"`
|
Includes string `json:"includes"`
|
||||||
|
Sort string `json:"sort"`
|
||||||
Pagination ecore.Pagination
|
Pagination ecore.Pagination
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ import (
|
|||||||
// internal - domain - main-entities
|
// internal - domain - main-entities
|
||||||
ed "simrs-vx/internal/domain/main-entities/doctor"
|
ed "simrs-vx/internal/domain/main-entities/doctor"
|
||||||
ee "simrs-vx/internal/domain/main-entities/encounter"
|
ee "simrs-vx/internal/domain/main-entities/encounter"
|
||||||
|
emoib "simrs-vx/internal/domain/main-entities/mcu-order-item/base"
|
||||||
)
|
)
|
||||||
|
|
||||||
type CreateDto struct {
|
type CreateDto struct {
|
||||||
@@ -85,7 +86,8 @@ type ResponseDto struct {
|
|||||||
ExaminationDate *time.Time `json:"examinationDate"`
|
ExaminationDate *time.Time `json:"examinationDate"`
|
||||||
Number uint8 `json:"number"`
|
Number uint8 `json:"number"`
|
||||||
Temperature float64 `json:"temperature"`
|
Temperature float64 `json:"temperature"`
|
||||||
UrgencyLevel_Code ercl.McuUrgencyLevelCode `json:"urgencyLevel_code""`
|
UrgencyLevel_Code ercl.McuUrgencyLevelCode `json:"urgencyLevel_code"`
|
||||||
|
Items []*emoib.McuOrderItem `json:"items"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d McuOrder) ToResponse() ResponseDto {
|
func (d McuOrder) ToResponse() ResponseDto {
|
||||||
@@ -100,6 +102,7 @@ func (d McuOrder) ToResponse() ResponseDto {
|
|||||||
Number: d.Number,
|
Number: d.Number,
|
||||||
Temperature: d.Temperature,
|
Temperature: d.Temperature,
|
||||||
UrgencyLevel_Code: d.UrgencyLevel_Code,
|
UrgencyLevel_Code: d.UrgencyLevel_Code,
|
||||||
|
Items: d.Items,
|
||||||
}
|
}
|
||||||
resp.Main = d.Main
|
resp.Main = d.Main
|
||||||
return resp
|
return resp
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import (
|
|||||||
ecore "simrs-vx/internal/domain/base-entities/core"
|
ecore "simrs-vx/internal/domain/base-entities/core"
|
||||||
ed "simrs-vx/internal/domain/main-entities/doctor"
|
ed "simrs-vx/internal/domain/main-entities/doctor"
|
||||||
ee "simrs-vx/internal/domain/main-entities/encounter"
|
ee "simrs-vx/internal/domain/main-entities/encounter"
|
||||||
|
emoib "simrs-vx/internal/domain/main-entities/mcu-order-item/base"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
ercl "simrs-vx/internal/domain/references/clinical"
|
ercl "simrs-vx/internal/domain/references/clinical"
|
||||||
@@ -23,6 +24,11 @@ type McuOrder struct {
|
|||||||
Temperature float64 `json:"temperature"`
|
Temperature float64 `json:"temperature"`
|
||||||
UrgencyLevel_Code ercl.McuUrgencyLevelCode `json:"urgencyLevel_code" gorm:"not null;size:15"`
|
UrgencyLevel_Code ercl.McuUrgencyLevelCode `json:"urgencyLevel_code" gorm:"not null;size:15"`
|
||||||
Scope_Code ercl.McuScopeCode `json:"scope_code" gorm:"index;size:10"`
|
Scope_Code ercl.McuScopeCode `json:"scope_code" gorm:"index;size:10"`
|
||||||
|
Items []*emoib.McuOrderItem `json:"items" gorm:"foreignKey:McuOrder_Id;references:Id"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d McuOrder) IsNotNew() bool {
|
||||||
|
return d.Status_Code != erc.DSCNew
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d McuOrder) IsCompleted() bool {
|
func (d McuOrder) IsCompleted() bool {
|
||||||
|
|||||||
@@ -173,6 +173,7 @@ func SetRoutes() http.Handler {
|
|||||||
"POST /": mcuorder.O.Create,
|
"POST /": mcuorder.O.Create,
|
||||||
"PATCH /{id}": mcuorder.O.Update,
|
"PATCH /{id}": mcuorder.O.Update,
|
||||||
"DELETE /{id}": mcuorder.O.Delete,
|
"DELETE /{id}": mcuorder.O.Delete,
|
||||||
|
"PATCH /{id}/submit": mcuorder.O.Submit,
|
||||||
"PATCH /{id}/complete": mcuorder.O.Complete,
|
"PATCH /{id}/complete": mcuorder.O.Complete,
|
||||||
"PATCH /{id}/set-schedule": mcuorder.O.SetSchedule,
|
"PATCH /{id}/set-schedule": mcuorder.O.SetSchedule,
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -85,6 +85,18 @@ func (obj myBase) Delete(w http.ResponseWriter, r *http.Request) {
|
|||||||
rw.DataResponse(w, res, err)
|
rw.DataResponse(w, res, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (obj myBase) Submit(w http.ResponseWriter, r *http.Request) {
|
||||||
|
id := rw.ValidateInt(w, "id", r.PathValue("id"))
|
||||||
|
if id <= 0 {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
dto := e.ReadDetailDto{}
|
||||||
|
dto.Id = uint(id)
|
||||||
|
res, err := u.Submit(dto)
|
||||||
|
rw.DataResponse(w, res, err)
|
||||||
|
}
|
||||||
|
|
||||||
func (obj myBase) Complete(w http.ResponseWriter, r *http.Request) {
|
func (obj myBase) Complete(w http.ResponseWriter, r *http.Request) {
|
||||||
id := rw.ValidateInt(w, "id", r.PathValue("id"))
|
id := rw.ValidateInt(w, "id", r.PathValue("id"))
|
||||||
if id <= 0 {
|
if id <= 0 {
|
||||||
|
|||||||
@@ -52,8 +52,8 @@ func ReadListData(input e.ReadListDto, event *pl.Event, dbx ...*gorm.DB) ([]e.De
|
|||||||
Scopes(gh.Preload(input.Includes)).
|
Scopes(gh.Preload(input.Includes)).
|
||||||
Scopes(gh.Filter(input.FilterDto)).
|
Scopes(gh.Filter(input.FilterDto)).
|
||||||
Count(&count).
|
Count(&count).
|
||||||
Scopes(gh.Paginate(input, &pagination)).
|
Scopes(gh.Sort(input.Sort)).
|
||||||
Order("\"CreatedAt\" DESC")
|
Scopes(gh.Paginate(input, &pagination))
|
||||||
|
|
||||||
if err := tx.Find(&data).Error; err != nil {
|
if err := tx.Find(&data).Error; err != nil {
|
||||||
if err == gorm.ErrRecordNotFound {
|
if err == gorm.ErrRecordNotFound {
|
||||||
|
|||||||
@@ -324,6 +324,65 @@ func Delete(input e.DeleteDto) (*d.Data, error) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Submit(input e.ReadDetailDto) (*d.Data, error) {
|
||||||
|
var data *e.McuOrder
|
||||||
|
var err error
|
||||||
|
|
||||||
|
event := pl.Event{
|
||||||
|
Feature: "Process",
|
||||||
|
Source: source,
|
||||||
|
}
|
||||||
|
|
||||||
|
// Start log
|
||||||
|
pl.SetLogInfo(&event, input, "started", "process")
|
||||||
|
|
||||||
|
err = dg.I.Transaction(func(tx *gorm.DB) error {
|
||||||
|
data, err = ReadDetailData(input, &event, tx)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if data.IsNotNew() {
|
||||||
|
event.Status = "failed"
|
||||||
|
event.ErrInfo = pl.ErrorInfo{
|
||||||
|
Code: "data-state-mismatch",
|
||||||
|
Detail: "prescription is not in new state",
|
||||||
|
Raw: errors.New("prescription is not in new state"),
|
||||||
|
}
|
||||||
|
return pl.SetLogError(&event, input)
|
||||||
|
}
|
||||||
|
|
||||||
|
data.Status_Code = erc.DSCSubmited
|
||||||
|
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": "submited",
|
||||||
|
},
|
||||||
|
Data: data.ToResponse(),
|
||||||
|
}, nil
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
func Complete(input e.ReadDetailDto) (*d.Data, error) {
|
func Complete(input e.ReadDetailDto) (*d.Data, error) {
|
||||||
var data *e.McuOrder
|
var data *e.McuOrder
|
||||||
var err error
|
var err error
|
||||||
|
|||||||
Reference in New Issue
Block a user