feat/things-munaja: device and mcu order

This commit is contained in:
2025-11-20 13:39:51 +07:00
parent 279636682d
commit 7c600dce5f
7 changed files with 85 additions and 3 deletions
@@ -15,6 +15,7 @@ type CreateDto struct {
type ReadListDto struct {
FilterDto
Includes string `json:"includes"`
Sort string `json:"sort"`
Pagination ecore.Pagination
}
@@ -17,6 +17,7 @@ import (
// internal - domain - main-entities
ed "simrs-vx/internal/domain/main-entities/doctor"
ee "simrs-vx/internal/domain/main-entities/encounter"
emoib "simrs-vx/internal/domain/main-entities/mcu-order-item/base"
)
type CreateDto struct {
@@ -85,7 +86,8 @@ type ResponseDto struct {
ExaminationDate *time.Time `json:"examinationDate"`
Number uint8 `json:"number"`
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 {
@@ -100,6 +102,7 @@ func (d McuOrder) ToResponse() ResponseDto {
Number: d.Number,
Temperature: d.Temperature,
UrgencyLevel_Code: d.UrgencyLevel_Code,
Items: d.Items,
}
resp.Main = d.Main
return resp
@@ -4,6 +4,7 @@ import (
ecore "simrs-vx/internal/domain/base-entities/core"
ed "simrs-vx/internal/domain/main-entities/doctor"
ee "simrs-vx/internal/domain/main-entities/encounter"
emoib "simrs-vx/internal/domain/main-entities/mcu-order-item/base"
"time"
ercl "simrs-vx/internal/domain/references/clinical"
@@ -23,6 +24,11 @@ type McuOrder struct {
Temperature float64 `json:"temperature"`
UrgencyLevel_Code ercl.McuUrgencyLevelCode `json:"urgencyLevel_code" gorm:"not null;size:15"`
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 {
@@ -173,6 +173,7 @@ func SetRoutes() http.Handler {
"POST /": mcuorder.O.Create,
"PATCH /{id}": mcuorder.O.Update,
"DELETE /{id}": mcuorder.O.Delete,
"PATCH /{id}/submit": mcuorder.O.Submit,
"PATCH /{id}/complete": mcuorder.O.Complete,
"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)
}
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) {
id := rw.ValidateInt(w, "id", r.PathValue("id"))
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.Filter(input.FilterDto)).
Count(&count).
Scopes(gh.Paginate(input, &pagination)).
Order("\"CreatedAt\" DESC")
Scopes(gh.Sort(input.Sort)).
Scopes(gh.Paginate(input, &pagination))
if err := tx.Find(&data).Error; err != nil {
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) {
var data *e.McuOrder
var err error