Merge pull request #190 from dikstub-rssa/feat/order-things

Feat/order things
This commit is contained in:
Munawwirul Jamal
2025-12-04 13:55:36 +07:00
committed by GitHub
13 changed files with 201 additions and 26 deletions
@@ -0,0 +1,4 @@
-- Modify "ProcedureRoomOrder" table
ALTER TABLE "public"."ProcedureRoomOrder" DROP COLUMN "Infra_Code";
-- Modify "ProcedureRoomOrderItem" table
ALTER TABLE "public"."ProcedureRoomOrderItem" ADD CONSTRAINT "fk_ProcedureRoomOrderItem_ProcedureRoomOrder" FOREIGN KEY ("ProcedureRoomOrder_Id") REFERENCES "public"."ProcedureRoomOrder" ("Id") ON UPDATE NO ACTION ON DELETE NO ACTION;
+2 -1
View File
@@ -1,4 +1,4 @@
h1:DgMML95zGYI7JMvZaIb/gySCvncMu62CANOIXNX0A6w=
h1:qjr3k9/ymXjw1nopw49c6+fWtu0n+H8sQgsioqUC9Fo=
20250904105930.sql h1:MEM6blCgke9DzWQSTnLzasbPIrcHssNNrJqZpSkEo6k=
20250904141448.sql h1:J8cmYNk4ZrG9fhfbi2Z1IWz7YkfvhFqTzrLFo58BPY0=
20250908062237.sql h1:Pu23yEW/aKkwozHoOuROvHS/GK4ngARJGdO7FB7HZuI=
@@ -144,3 +144,4 @@ h1:DgMML95zGYI7JMvZaIb/gySCvncMu62CANOIXNX0A6w=
20251202160848.sql h1:Kd2/TziKSMezrt4XgbjQcYvY/Lo9rX0qw7/Lz0/oyKk=
20251202180207.sql h1:IHmSMIO3ia+YV5GULixbdlV1joaUAWtnjQHPd8+HKiM=
20251202231005.sql h1:lua0KKoeBptSfs/6ehZE6Azo6YUlNkOJwGFyb1HQWkY=
20251203205052.sql h1:az/hGpk7u4YKT7gU+UuEw9guqB9AqdckPF1cYavQ3CA=
@@ -0,0 +1,12 @@
package procedureroomorder
import (
ecore "simrs-vx/internal/domain/base-entities/core"
)
type ProcedureRoomOrderItem struct {
ecore.BigMain
ProcedureRoomOrder_Id uint64 `json:"procedureRoomOrder_id"`
ProcedureRoom_Code string `json:"procedureRoom_code" gorm:"size:20"`
Note string `json:"note" gorm:"size:255"`
}
@@ -18,7 +18,8 @@ type ReadListDto struct {
}
type FilterDto struct {
Encounter_Id uint64 `json:"encounter-id"`
Encounter_Id uint64 `json:"encounter-id"`
ProcedureRoomOrder_Id uint64 `json:"procedure-room-order-id"`
}
type ReadDetailDto struct {
@@ -1,14 +1,13 @@
package procedureroomorder
import (
ecore "simrs-vx/internal/domain/base-entities/core"
epr "simrs-vx/internal/domain/main-entities/procedure-room"
epro "simrs-vx/internal/domain/main-entities/procedure-room-order"
eb "simrs-vx/internal/domain/main-entities/procedure-room-order-item/base"
)
type ProcedureRoomOrderItem struct {
ecore.BigMain
ProcedureRoomOrder_Id uint64 `json:"procedureRoomOrder_id"`
ProcedureRoom_Code string `json:"procedureRoom_code" gorm:"size:20"`
ProcedureRoom *epr.ProcedureRoom `json:"procedureRoom,omitempty" gorm:"foreignKey:ProcedureRoom_Code;references:Code"`
Note string `json:"note" gorm:"size:255"`
eb.ProcedureRoomOrderItem
ProcedureRoomOrder *epro.ProcedureRoomOrder `json:"procedureRoomOrder,omitempty" gorm:"foreignKey:ProcedureRoomOrder_Id;references:Id"`
ProcedureRoom *epr.ProcedureRoom `json:"procedureRoom,omitempty" gorm:"foreignKey:ProcedureRoom_Code;references:Code"`
}
@@ -9,9 +9,9 @@ import (
)
type CreateDto struct {
Encounter_Id uint64 `json:"encounter_id" validate:"required"`
Infra_Code string `json:"infra_code" validate:"required"`
MaterialPackage_Code string `json:"materialPackage_code" validate:"required"`
Encounter_Id uint64 `json:"encounter_id" validate:"required"`
// Infra_Code string `json:"infra_code" validate:"required"`
MaterialPackage_Code *string `json:"materialPackage_code"`
}
type ReadListDto struct {
@@ -48,7 +48,7 @@ type ResponseDto struct {
Encounter_Id uint64 `json:"encounter_id"`
Encounter *ec.Encounter `json:"encounter,omitempty"`
Infra_Code string `json:"procedure"`
MaterialPackage_Code string `json:"materialPackage_code"`
MaterialPackage_Code *string `json:"materialPackage_code"`
Status_Code erc.DataStatusCode `json:"status_code"`
ProcedureRoom *epr.ProcedureRoom `json:"procedureRoom,omitempty"`
MaterialPackage *emp.MaterialPackage `json:"materialPackage,omitempty"`
@@ -56,8 +56,8 @@ type ResponseDto struct {
func (d ProcedureRoomOrder) ToResponse() ResponseDto {
resp := ResponseDto{
Encounter_Id: d.Encounter_Id,
Infra_Code: d.Infra_Code,
Encounter_Id: d.Encounter_Id,
// Infra_Code: d.Infra_Code,
MaterialPackage_Code: d.MaterialPackage_Code,
Status_Code: d.Status_Code,
}
@@ -5,15 +5,20 @@ import (
ecore "simrs-vx/internal/domain/base-entities/core"
emp "simrs-vx/internal/domain/main-entities/material-package"
epr "simrs-vx/internal/domain/main-entities/procedure-room"
eproi "simrs-vx/internal/domain/main-entities/procedure-room-order-item/base"
)
type ProcedureRoomOrder struct {
ecore.BigMain
Encounter_Id uint64 `json:"encounter_id"`
Infra_Code string `json:"infra_code" gorm:"size:20"`
ProcedureRoom *epr.ProcedureRoom `json:"procedureRoom,omitempty" gorm:"foreignKey:Infra_Code;references:Code"`
MaterialPackage_Code string `json:"materialPackage_code" gorm:"size:20"`
MaterialPackage *emp.MaterialPackage `json:"materialPackage,omitempty" gorm:"foreignKey:MaterialPackage_Code;references:Code"`
Status_Code erc.DataStatusCode `json:"status_code" gorm:"size:20"`
Encounter_Id uint64 `json:"encounter_id"`
// Infra_Code string `json:"infra_code" gorm:"size:20"`
// ProcedureRoom *epr.ProcedureRoom `json:"procedureRoom,omitempty" gorm:"foreignKey:Infra_Code;references:Code"`
MaterialPackage_Code *string `json:"materialPackage_code" gorm:"size:20"`
MaterialPackage *emp.MaterialPackage `json:"materialPackage,omitempty" gorm:"foreignKey:MaterialPackage_Code;references:Code"`
Status_Code erc.DataStatusCode `json:"status_code" gorm:"size:20"`
Items []eproi.ProcedureRoomOrderItem `json:"items,omitempty" gorm:"foreignKey:ProcedureRoomOrder_Id;references:Id"`
}
func (d ProcedureRoomOrder) IsNotNew() bool {
return d.Status_Code != erc.DSCNew
}
@@ -25,7 +25,7 @@ type ReadListDto struct {
type FilterDto struct {
Infra_Code *string `json:"infra-code"`
Type_Code string `json:"type_code"`
Type_Code string `json:"type-code"`
Unit_Code *string `json:"unit-code"`
Specialist_Code *string `json:"specialist-code"`
Subspecialist_Code *string `json:"subspecialist-code"`
@@ -34,6 +34,7 @@ import (
practiceschedule "simrs-vx/internal/interface/main-handler/practice-schedule"
prescription "simrs-vx/internal/interface/main-handler/prescription"
prescriptionitem "simrs-vx/internal/interface/main-handler/prescription-item"
procedureroom "simrs-vx/internal/interface/main-handler/procedure-room"
procedureroomorder "simrs-vx/internal/interface/main-handler/procedure-room-order"
procedureroomorderitem "simrs-vx/internal/interface/main-handler/procedure-room-order-item"
responsibledoctorhist "simrs-vx/internal/interface/main-handler/responsible-doctor-hist"
@@ -271,7 +272,15 @@ func SetRoutes() http.Handler {
"DELETE /{id}": materialorder.O.Delete,
"PATCH /{id}/complete": materialorder.O.Complete,
})
hc.RegCrud(r, "/v1/procedure-room-order", procedureroomorder.O)
hc.RegCrud(r, "/v1/procedure-room", procedureroom.O)
hk.GroupRoutes("/v1/procedure-room-order", r, auth.GuardMW, hk.MapHandlerFunc{
"GET /": procedureroomorder.O.GetList,
"GET /{id}": procedureroomorder.O.GetDetail,
"POST /": procedureroomorder.O.Create,
"PATCH /{id}": procedureroomorder.O.Update,
"DELETE /{id}": procedureroomorder.O.Delete,
"PATCH /{id}/submit": procedureroomorder.O.Submit,
})
hc.RegCrud(r, "/v1/procedure-room-order-item", procedureroomorderitem.O)
hk.GroupRoutes("/v1/consultation", r, auth.GuardMW, hk.MapHandlerFunc{
"GET /": consultation.O.GetList,
@@ -69,3 +69,15 @@ func (obj myBase) Delete(w http.ResponseWriter, r *http.Request) {
res, err := u.Delete(dto)
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 = uint64(id)
res, err := u.Submit(dto)
rw.DataResponse(w, res, err)
}
@@ -0,0 +1,71 @@
package procedureroom
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/procedure-room"
u "simrs-vx/internal/use-case/main-use-case/procedure-room"
)
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 = uint16(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 = uint16(id)
res, err := u.Delete(dto)
rw.DataResponse(w, res, err)
}
@@ -1,16 +1,19 @@
package procedureroomorder
import (
e "simrs-vx/internal/domain/main-entities/procedure-room-order"
"errors"
"strconv"
"gorm.io/gorm"
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"
e "simrs-vx/internal/domain/main-entities/procedure-room-order"
erc "simrs-vx/internal/domain/references/common"
)
const source = "procedure-room-order"
@@ -274,3 +277,62 @@ func Delete(input e.DeleteDto) (*d.Data, error) {
}, nil
}
func Submit(input e.ReadDetailDto) (*d.Data, error) {
var data *e.ProcedureRoomOrder
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: source + " is not in new state",
Raw: errors.New(source + " 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
}
@@ -19,7 +19,6 @@ func setData[T *e.CreateDto | *e.UpdateDto](input T, data *e.ProcedureRoomOrder)
}
data.Encounter_Id = inputSrc.Encounter_Id
data.Infra_Code = inputSrc.Infra_Code
data.MaterialPackage_Code = inputSrc.MaterialPackage_Code
data.Status_Code = erc.DSCNew
}