feat (employee): add create feat doctor, nurse, nutritionist, pharmacy
This commit is contained in:
@@ -11,13 +11,16 @@ import (
|
||||
|
||||
type CreateDto struct {
|
||||
User_Id *uint `json:"user_id"`
|
||||
UserRequest *eu.CreateDto `json:"user_request"`
|
||||
User *eu.CreateDto `json:"user"`
|
||||
Person_Id *uint `json:"person_id"`
|
||||
PersonRequest *ep.CreateDto `json:"person_request"`
|
||||
Person *ep.CreateDto `json:"person"`
|
||||
Position_Code ero.EmployeePosisitionCode `json:"position_code"`
|
||||
Division_Code *string `json:"division_code"`
|
||||
Number *string `json:"number"`
|
||||
Status_Code erc.ActiveStatusCode `json:"status_code"`
|
||||
IHS_Number *string `json:"ihs_number"`
|
||||
SIP_Number *string `json:"sip_number"`
|
||||
Unit_Id *uint `json:"unit_id"`
|
||||
}
|
||||
|
||||
type ReadListDto struct {
|
||||
@@ -99,6 +102,6 @@ func ToResponseList(data []Employee) []ResponseDto {
|
||||
|
||||
func (c CreateDto) Sanitize() CreateDto {
|
||||
sanitized := c
|
||||
sanitized.UserRequest.Password = "[REDACTED]"
|
||||
sanitized.User.Password = "[REDACTED]"
|
||||
return sanitized
|
||||
}
|
||||
|
||||
@@ -1,15 +1,25 @@
|
||||
package employee
|
||||
|
||||
import (
|
||||
ed "simrs-vx/internal/domain/main-entities/doctor"
|
||||
e "simrs-vx/internal/domain/main-entities/employee"
|
||||
en "simrs-vx/internal/domain/main-entities/nurse"
|
||||
et "simrs-vx/internal/domain/main-entities/nutritionist"
|
||||
ep "simrs-vx/internal/domain/main-entities/pharmacist"
|
||||
"strconv"
|
||||
|
||||
dg "github.com/karincake/apem/db-gorm-pg"
|
||||
d "github.com/karincake/dodol"
|
||||
ud "simrs-vx/internal/use-case/main-use-case/doctor"
|
||||
un "simrs-vx/internal/use-case/main-use-case/nurse"
|
||||
ut "simrs-vx/internal/use-case/main-use-case/nutritionist"
|
||||
up "simrs-vx/internal/use-case/main-use-case/pharmacist"
|
||||
|
||||
ero "simrs-vx/internal/domain/references/organization"
|
||||
|
||||
pl "simrs-vx/pkg/logger"
|
||||
pu "simrs-vx/pkg/use-case-helper"
|
||||
|
||||
dg "github.com/karincake/apem/db-gorm-pg"
|
||||
d "github.com/karincake/dodol"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
@@ -34,11 +44,10 @@ func Create(input e.CreateDto) (*d.Data, error) {
|
||||
return err
|
||||
}
|
||||
|
||||
if input.Person_Id == nil {
|
||||
if err := createPerson(&input, &event, tx); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := createOrUpdatePerson(&input, &event, tx); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := createUser(&input, &event, tx); err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -49,6 +58,43 @@ func Create(input e.CreateDto) (*d.Data, error) {
|
||||
data = *resData
|
||||
}
|
||||
|
||||
switch input.Position_Code {
|
||||
case ero.EPCDoc:
|
||||
createDoc := ed.CreateDto{
|
||||
Employee_Id: &data.Id,
|
||||
IHS_Number: input.IHS_Number,
|
||||
SIP_Number: input.SIP_Number,
|
||||
Unit_Id: input.Unit_Id,
|
||||
}
|
||||
if _, err := ud.CreateData(createDoc, &event, tx); err != nil {
|
||||
return err
|
||||
}
|
||||
case ero.EPCNur:
|
||||
createNurse := en.CreateDto{
|
||||
Employee_Id: &data.Id,
|
||||
IHS_Number: input.IHS_Number,
|
||||
}
|
||||
if _, err := un.CreateData(createNurse, &event, tx); err != nil {
|
||||
return err
|
||||
}
|
||||
case ero.EPCNut:
|
||||
createNutritionist := et.CreateDto{
|
||||
Employee_Id: &data.Id,
|
||||
IHS_Number: input.IHS_Number,
|
||||
}
|
||||
if _, err := ut.CreateData(createNutritionist, &event, tx); err != nil {
|
||||
return err
|
||||
}
|
||||
case ero.EPCPha:
|
||||
createPharmacist := ep.CreateDto{
|
||||
Employee_Id: &data.Id,
|
||||
IHS_Number: input.IHS_Number,
|
||||
}
|
||||
if _, err := up.CreateData(createPharmacist, &event, tx); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
mwRunner.setMwType(pu.MWTPost)
|
||||
// Run post-middleware
|
||||
if err := mwRunner.RunCreateMiddleware(createPostMw, &input, &data); err != nil {
|
||||
|
||||
@@ -7,11 +7,14 @@ package employee
|
||||
import (
|
||||
"errors"
|
||||
e "simrs-vx/internal/domain/main-entities/employee"
|
||||
pl "simrs-vx/pkg/logger"
|
||||
ep "simrs-vx/internal/domain/main-entities/person"
|
||||
"strconv"
|
||||
|
||||
up "simrs-vx/internal/use-case/main-use-case/person"
|
||||
uu "simrs-vx/internal/use-case/main-use-case/user"
|
||||
|
||||
pl "simrs-vx/pkg/logger"
|
||||
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
@@ -33,7 +36,7 @@ func setData[T *e.CreateDto | *e.UpdateDto](input T, data *e.Employee) {
|
||||
}
|
||||
|
||||
func createUser(input *e.CreateDto, event *pl.Event, tx *gorm.DB) error {
|
||||
if input.UserRequest == nil {
|
||||
if input.User == nil {
|
||||
event.Status = "failed"
|
||||
event.ErrInfo = pl.ErrorInfo{
|
||||
Code: "data-create-fail",
|
||||
@@ -42,7 +45,7 @@ func createUser(input *e.CreateDto, event *pl.Event, tx *gorm.DB) error {
|
||||
}
|
||||
return pl.SetLogError(event, input)
|
||||
}
|
||||
user, err := uu.CreateData(*input.UserRequest, event, tx)
|
||||
user, err := uu.CreateData(*input.User, event, tx)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -50,21 +53,33 @@ func createUser(input *e.CreateDto, event *pl.Event, tx *gorm.DB) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func createPerson(input *e.CreateDto, event *pl.Event, tx *gorm.DB) error {
|
||||
if input.PersonRequest == nil {
|
||||
event.Status = "failed"
|
||||
event.ErrInfo = pl.ErrorInfo{
|
||||
Code: "data-create-fail",
|
||||
Detail: "person request is required",
|
||||
Raw: errors.New("person request is required"),
|
||||
func createOrUpdatePerson(input *e.CreateDto, event *pl.Event, tx *gorm.DB) error {
|
||||
if input.Person_Id == nil {
|
||||
person, err := up.CreateData(*input.Person, event, tx)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return pl.SetLogError(event, input)
|
||||
input.Person_Id = &person.Id
|
||||
return nil
|
||||
}
|
||||
person, err := up.CreateData(*input.PersonRequest, event, tx)
|
||||
|
||||
person, err := up.ReadDetailData(ep.ReadDetailDto{Id: *input.Person_Id}, event, tx)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
input.Person_Id = &person.Id
|
||||
return nil
|
||||
|
||||
if person == nil {
|
||||
event.Status = "failed"
|
||||
event.ErrInfo = pl.ErrorInfo{
|
||||
Code: "data-notFound",
|
||||
Detail: "person with ID " + strconv.Itoa(int(*input.Person_Id)) + " not found",
|
||||
Raw: errors.New("person with ID " + strconv.Itoa(int(*input.Person_Id)) + " not found"),
|
||||
}
|
||||
return pl.SetLogError(event, input)
|
||||
}
|
||||
|
||||
if err := up.UpdateData(ep.UpdateDto{CreateDto: *input.Person}, person, event, tx); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user