Merge branch 'migration' of https://github.com/dikstub-rssa/simrs-be into migration-vanilia

# Conflicts:
#	cmd/main-migration/migrations/atlas.sum
#	internal/interface/migration/main-entities.go
This commit is contained in:
vanilia
2025-11-04 11:14:27 +07:00
90 changed files with 3387 additions and 365 deletions
@@ -11,7 +11,7 @@ import (
e "simrs-vx/internal/domain/main-entities/adime"
u "simrs-vx/internal/use-case/main-use-case/adime"
pa "simrs-vx/pkg/auth-helper"
pa "simrs-vx/internal/lib/auth"
d "github.com/karincake/dodol"
)
@@ -0,0 +1,71 @@
package adm_employee_hist
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/adm-employee-hist"
u "simrs-vx/internal/use-case/main-use-case/adm-employee-hist"
)
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)
}
@@ -10,7 +10,7 @@ import (
m "simrs-vx/internal/domain/main-entities/user"
s "simrs-vx/internal/use-case/main-use-case/authentication"
pa "simrs-vx/pkg/auth-helper"
pa "simrs-vx/internal/lib/auth"
)
func Login(w http.ResponseWriter, r *http.Request) {
@@ -14,7 +14,7 @@ import (
u "simrs-vx/internal/use-case/main-use-case/chemo"
pa "simrs-vx/pkg/auth-helper"
pa "simrs-vx/internal/lib/auth"
d "github.com/karincake/dodol"
)
@@ -11,7 +11,7 @@ import (
e "simrs-vx/internal/domain/main-entities/consultation"
u "simrs-vx/internal/use-case/main-use-case/consultation"
pa "simrs-vx/pkg/auth-helper"
pa "simrs-vx/internal/lib/auth"
d "github.com/karincake/dodol"
)
@@ -9,7 +9,7 @@ import (
e "simrs-vx/internal/domain/main-entities/device-order"
u "simrs-vx/internal/use-case/main-use-case/device-order"
pa "simrs-vx/pkg/auth-helper"
pa "simrs-vx/internal/lib/auth"
d "github.com/karincake/dodol"
)
@@ -12,7 +12,7 @@ import (
u "simrs-vx/internal/use-case/main-use-case/encounter"
erc "simrs-vx/internal/domain/references/common"
pa "simrs-vx/pkg/auth-helper"
pa "simrs-vx/internal/lib/auth"
d "github.com/karincake/dodol"
)
@@ -36,7 +36,12 @@ func (obj myBase) Create(w http.ResponseWriter, r *http.Request) {
}
func (obj myBase) GetList(w http.ResponseWriter, r *http.Request) {
authInfo, err := pa.GetAuthInfo(r)
if err != nil {
rw.WriteJSON(w, http.StatusUnauthorized, d.IS{"message": err.Error()}, nil)
}
dto := e.ReadListDto{}
dto.AuthInfo = *authInfo
sf.UrlQueryParam(&dto, *r.URL)
res, err := u.ReadList(dto)
rw.DataResponse(w, res, err)
@@ -102,6 +107,27 @@ func (obj myBase) CheckOut(w http.ResponseWriter, r *http.Request) {
rw.DataResponse(w, res, err)
}
func (obj myBase) CheckIn(w http.ResponseWriter, r *http.Request) {
dto := e.CheckinDto{}
id := rw.ValidateInt(w, "id", r.PathValue("id"))
if id <= 0 {
return
}
if res := rw.ValidateStructByIOR(w, r.Body, &dto); !res {
return
}
// validate request body
if valid := validateRequestCheckIn(w, dto); !valid {
return
}
dto.Id = uint(id)
res, err := u.CheckIn(dto)
rw.DataResponse(w, res, err)
}
func (obj myBase) Process(w http.ResponseWriter, r *http.Request) {
id := rw.ValidateInt(w, "id", r.PathValue("id"))
if id <= 0 {
@@ -10,9 +10,9 @@ import (
rw "github.com/karincake/risoles"
)
func validateRequestCheckout(w http.ResponseWriter, i e.DischargeDto) (valid bool) {
const dataValidationFail = ""
const dataValidationFail = "data-validation-fail"
func validateRequestCheckout(w http.ResponseWriter, i e.DischargeDto) (valid bool) {
switch *i.Discharge_Method_Code {
case ere.DMCDeath:
if i.DeathCause == nil {
@@ -51,3 +51,15 @@ func validateRequestCheckout(w http.ResponseWriter, i e.DischargeDto) (valid boo
}
return true
}
func validateRequestCheckIn(w http.ResponseWriter, i e.CheckinDto) (valid bool) {
if i.Responsible_Doctor_Id == nil {
rw.DataResponse(w, nil, d.FieldError{
Code: dataValidationFail,
Message: "responsible_doctor_id required",
})
return
}
return true
}
+23 -15
View File
@@ -5,6 +5,7 @@ import (
/******************** main / transaction ********************/
adime "simrs-vx/internal/interface/main-handler/adime"
admemployeehist "simrs-vx/internal/interface/main-handler/adm-employee-hist"
ambulancetransportrequest "simrs-vx/internal/interface/main-handler/ambulance-transport-req"
auth "simrs-vx/internal/interface/main-handler/authentication"
chemo "simrs-vx/internal/interface/main-handler/chemo"
@@ -27,6 +28,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"
responsibledoctorhist "simrs-vx/internal/interface/main-handler/responsible-doctor-hist"
sbar "simrs-vx/internal/interface/main-handler/sbar"
soapi "simrs-vx/internal/interface/main-handler/soapi"
@@ -48,6 +50,7 @@ import (
hk "github.com/karincake/hongkue"
/******************** infra ********************/
ibpjs "simrs-vx/internal/infra/bpjs"
gs "simrs-vx/internal/infra/gorm-setting"
minio "simrs-vx/internal/infra/minio"
ssdb "simrs-vx/internal/infra/ss-db"
@@ -116,6 +119,7 @@ func SetRoutes() http.Handler {
a.RegisterExtCall(lh.Populate)
a.RegisterExtCall(minio.Connect)
a.RegisterExtCall(mh.I.SetClient)
a.RegisterExtCall(ibpjs.SetConfig)
a.RegisterExtCall(validation.RegisterValidation)
r := http.NewServeMux()
@@ -135,6 +139,20 @@ func SetRoutes() http.Handler {
hc.RegCrud(r, "/v1/prescription-item", prescriptionitem.O)
hc.RegCrud(r, "/v1/device-order-item", deviceorderitem.O)
hc.RegCrud(r, "/v1/material-order-item", materialorderitem.O)
hk.GroupRoutes("/v1/encounter", r, auth.GuardMW, hk.MapHandlerFunc{
"GET /": encounter.O.GetList,
"GET /{id}": encounter.O.GetDetail,
"POST /": encounter.O.Create,
"PATCH /{id}": encounter.O.Update,
"DELETE /{id}": encounter.O.Delete,
"PATCH /{id}/check-out": encounter.O.CheckOut,
"PATCH /{id}/check-in": encounter.O.CheckIn,
"PATCH /{id}/proccess": encounter.O.Process,
"PATCH /{id}/cancel": encounter.O.Cancel,
"PATCH /{id}/reject": encounter.O.Reject,
"PATCH /{id}/skip": encounter.O.Skip,
})
hk.GroupRoutes("/v1/mcu-order", r, auth.GuardMW, hk.MapHandlerFunc{
"GET /": mcuorder.O.GetList,
"GET /{id}": mcuorder.O.GetDetail,
@@ -153,7 +171,7 @@ func SetRoutes() http.Handler {
"PATCH /{id}/complete": mcuorderitem.O.Complete,
"PATCH /{id}/set-schedule": mcuorderitem.O.SetSchedule,
})
hk.GroupRoutes("/v1/prescription", r, hk.MapHandlerFunc{
hk.GroupRoutes("/v1/prescription", r, auth.GuardMW, hk.MapHandlerFunc{
"GET /": prescription.O.GetList,
"GET /{id}": prescription.O.GetDetail,
"POST /": prescription.O.Create,
@@ -161,7 +179,7 @@ func SetRoutes() http.Handler {
"DELETE /{id}": prescription.O.Delete,
"PATCH /{id}/approve": prescription.O.Approve,
})
hk.GroupRoutes("/v1/mcu-order-sub-item", r, hk.MapHandlerFunc{
hk.GroupRoutes("/v1/mcu-order-sub-item", r, auth.GuardMW, hk.MapHandlerFunc{
"GET /": mcuordersubitem.O.GetList,
"GET /{id}": mcuordersubitem.O.GetDetail,
"POST /": mcuordersubitem.O.Create,
@@ -169,18 +187,6 @@ func SetRoutes() http.Handler {
"DELETE /{id}": mcuordersubitem.O.Delete,
"PATCH /{id}/complete": mcuordersubitem.O.Complete,
})
hk.GroupRoutes("/v1/encounter", r, auth.GuardMW, hk.MapHandlerFunc{
"GET /": encounter.O.GetList,
"GET /{id}": encounter.O.GetDetail,
"POST /": encounter.O.Create,
"PATCH /{id}": encounter.O.Update,
"DELETE /{id}": encounter.O.Delete,
"PATCH /{id}/checkout": encounter.O.CheckOut,
"PATCH /{id}/proccess": encounter.O.Process,
"PATCH /{id}/cancel": encounter.O.Cancel,
"PATCH /{id}/reject": encounter.O.Reject,
"PATCH /{id}/skip": encounter.O.Skip,
})
hk.GroupRoutes("/v1/medication", r, auth.GuardMW, hk.MapHandlerFunc{
"GET /": medication.O.GetList,
"GET /{id}": medication.O.GetDetail,
@@ -190,7 +196,7 @@ func SetRoutes() http.Handler {
"PATCH /{id}/complete": medication.O.Complete,
})
hk.GroupRoutes("/v1/medication-item", r, hk.MapHandlerFunc{
hk.GroupRoutes("/v1/medication-item", r, auth.GuardMW, hk.MapHandlerFunc{
"GET /": medicationitem.O.GetList,
"GET /{id}": medicationitem.O.GetDetail,
"POST /": medicationitem.O.Create,
@@ -247,6 +253,8 @@ func SetRoutes() http.Handler {
hc.RegCrud(r, "/v1/internal-reference", internalreference.O)
hc.RegCrud(r, "/v1/ambulance-transport-req", ambulancetransportrequest.O)
hc.RegCrud(r, "/v1/responsible-doctor-hist", responsibledoctorhist.O)
hc.RegCrud(r, "/v1/adm-employee-hist", admemployeehist.O)
/******************** actor ********************/
hc.RegCrud(r, "/v1/person", person.O)
@@ -11,7 +11,7 @@ import (
e "simrs-vx/internal/domain/main-entities/material-order"
u "simrs-vx/internal/use-case/main-use-case/material-order"
pa "simrs-vx/pkg/auth-helper"
pa "simrs-vx/internal/lib/auth"
d "github.com/karincake/dodol"
)
@@ -11,7 +11,7 @@ import (
e "simrs-vx/internal/domain/main-entities/mcu-order"
u "simrs-vx/internal/use-case/main-use-case/mcu-order"
pa "simrs-vx/pkg/auth-helper"
pa "simrs-vx/internal/lib/auth"
d "github.com/karincake/dodol"
)
@@ -47,6 +47,7 @@ func (obj myBase) GetDetail(w http.ResponseWriter, r *http.Request) {
return
}
dto := e.ReadDetailDto{}
sf.UrlQueryParam(&dto, *r.URL)
dto.Id = uint(id)
res, err := u.ReadDetail(dto)
rw.DataResponse(w, res, err)
@@ -6,7 +6,7 @@ import (
rw "github.com/karincake/risoles"
sf "github.com/karincake/semprit"
pa "simrs-vx/pkg/auth-helper"
pa "simrs-vx/internal/lib/auth"
e "simrs-vx/internal/domain/main-entities/medication-item-dist"
u "simrs-vx/internal/use-case/main-use-case/medication-item-dist"
@@ -6,7 +6,7 @@ import (
rw "github.com/karincake/risoles"
sf "github.com/karincake/semprit"
pa "simrs-vx/pkg/auth-helper"
pa "simrs-vx/internal/lib/auth"
e "simrs-vx/internal/domain/main-entities/medication"
u "simrs-vx/internal/use-case/main-use-case/medication"
@@ -7,6 +7,9 @@ import (
sf "github.com/karincake/semprit"
// ua "github.com/karincake/tumpeng/auth/svc"
d "github.com/karincake/dodol"
pa "simrs-vx/internal/lib/auth"
e "simrs-vx/internal/domain/main-entities/prescription"
u "simrs-vx/internal/use-case/main-use-case/prescription"
@@ -21,6 +24,11 @@ func (obj myBase) Create(w http.ResponseWriter, r *http.Request) {
if res := rw.ValidateStructByIOR(w, r.Body, &dto); !res {
return
}
authInfo, err := pa.GetAuthInfo(r)
if err != nil {
rw.WriteJSON(w, http.StatusUnauthorized, d.IS{"message": err.Error()}, nil)
}
dto.AuthInfo = *authInfo
res, err := u.Create(dto)
rw.DataResponse(w, res, err)
}
@@ -0,0 +1,71 @@
package responsible_doctor_hist
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/responsible-doctor-hist"
u "simrs-vx/internal/use-case/main-use-case/responsible-doctor-hist"
)
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)
}
@@ -11,7 +11,7 @@ import (
e "simrs-vx/internal/domain/main-entities/sbar"
u "simrs-vx/internal/use-case/main-use-case/sbar"
pa "simrs-vx/pkg/auth-helper"
pa "simrs-vx/internal/lib/auth"
d "github.com/karincake/dodol"
)
@@ -11,7 +11,7 @@ import (
e "simrs-vx/internal/domain/main-entities/soapi"
u "simrs-vx/internal/use-case/main-use-case/soapi"
pa "simrs-vx/pkg/auth-helper"
pa "simrs-vx/internal/lib/auth"
d "github.com/karincake/dodol"
)
@@ -8,6 +8,7 @@ import (
appointment "simrs-vx/internal/domain/main-entities/appointment"
chemo "simrs-vx/internal/domain/main-entities/chemo"
consultation "simrs-vx/internal/domain/main-entities/consultation"
controlletter "simrs-vx/internal/domain/main-entities/control-letter"
counter "simrs-vx/internal/domain/main-entities/counter"
deathcause "simrs-vx/internal/domain/main-entities/death-cause"
device "simrs-vx/internal/domain/main-entities/device"
@@ -194,6 +195,7 @@ func getMainEntities() []any {
&responsibledoctorhist.ResponsibleDoctorHist{},
&admemployeehist.AdmEmployeeHist{},
&vclaimmember.VclaimMember{},
&controlletter.ControlLetter{},
&rehab.Rehab{},
}
}