diff --git a/cmd/main-migration/migrations/20251019093915.sql b/cmd/main-migration/migrations/20251019093915.sql new file mode 100644 index 00000000..31ac3655 --- /dev/null +++ b/cmd/main-migration/migrations/20251019093915.sql @@ -0,0 +1,15 @@ +-- Rename a column from "Position_Code" to "ContractPosition_Code" +ALTER TABLE "public"."User" RENAME COLUMN "Position_Code" TO "ContractPosition_Code"; +-- Create "Intern" table +CREATE TABLE "public"."Intern" ( + "Id" bigserial NOT NULL, + "CreatedAt" timestamptz NULL, + "UpdatedAt" timestamptz NULL, + "DeletedAt" timestamptz NULL, + "Person_Id" bigint NULL, + "Position_Code" character varying(20) NULL, + "User_Id" bigint NULL, + PRIMARY KEY ("Id"), + CONSTRAINT "fk_Intern_Person" FOREIGN KEY ("Person_Id") REFERENCES "public"."Person" ("Id") ON UPDATE NO ACTION ON DELETE NO ACTION, + CONSTRAINT "fk_Intern_User" FOREIGN KEY ("User_Id") REFERENCES "public"."User" ("Id") ON UPDATE NO ACTION ON DELETE NO ACTION +); diff --git a/cmd/main-migration/migrations/atlas.sum b/cmd/main-migration/migrations/atlas.sum index bf732e89..582b2527 100644 --- a/cmd/main-migration/migrations/atlas.sum +++ b/cmd/main-migration/migrations/atlas.sum @@ -1,4 +1,4 @@ -h1:S3ggQSrIa2Lwhkx+yWmD9N2hZxRuVwCMZcEpsk83PJY= +h1:eCBVp2yPQk7VrLdSk2mDps+FXavKA5OcJ1/QRBh+ovI= 20250904105930.sql h1:MEM6blCgke9DzWQSTnLzasbPIrcHssNNrJqZpSkEo6k= 20250904141448.sql h1:J8cmYNk4ZrG9fhfbi2Z1IWz7YkfvhFqTzrLFo58BPY0= 20250908062237.sql h1:Pu23yEW/aKkwozHoOuROvHS/GK4ngARJGdO7FB7HZuI= @@ -49,5 +49,4 @@ h1:S3ggQSrIa2Lwhkx+yWmD9N2hZxRuVwCMZcEpsk83PJY= 20251016062912.sql h1:ACNn0fe+EMqUt3hoY+Dr3uqAV/QICBa1+mIW7fUc9Fk= 20251017060617.sql h1:4T3t9ifWrEQTPMSM0XJ98pF7Qdt+UfgtMui17bhrnWI= 20251017082207.sql h1:8vLG1l/saRRMHXkyA4nelJyjaSddhZd6r7R+Uo4JS/c= -20251018032635.sql h1:UltiY1Jm1KjAyBx/oRbhKzwEl3Aqh3o+eaOIfWdroJ8= -20251018040322.sql h1:24VgOPgO2pxfwTcAv7xCv8BHiRPqmIbHUCXNLyvrGfc= +20251019093915.sql h1:wsJMh1r45ONaY7zIq2c3rTcuGXN4mI0irZK7a96HZW8= diff --git a/internal/domain/main-entities/user/dto.go b/internal/domain/main-entities/user/dto.go index 093a597e..55a53686 100644 --- a/internal/domain/main-entities/user/dto.go +++ b/internal/domain/main-entities/user/dto.go @@ -1,22 +1,21 @@ package user import ( + ecore "simrs-vx/internal/domain/base-entities/core" "time" - ecore "simrs-vx/internal/domain/base-entities/core" ep "simrs-vx/internal/domain/main-entities/person" epa "simrs-vx/internal/domain/main-entities/person-address" epc "simrs-vx/internal/domain/main-entities/person-contact" erc "simrs-vx/internal/domain/references/common" - ero "simrs-vx/internal/domain/references/organization" + erg "simrs-vx/internal/domain/references/organization" ) type CreateDto struct { Name string `json:"name" validate:"maxLength=25"` Password string `json:"password" validate:"maxLength=255"` Status_Code erc.UserStatusCode `json:"status_code" validate:"maxLength=10"` - ContractPosition_Code ero.ContractPositionCode `json:"contractPosition_code" validate:"maxLength=20"` Person_Id *uint `json:"-"` Person *ep.UpdateDto `json:"person"` PersonAddresses []epa.UpdateDto `json:"personAddresses"` @@ -28,6 +27,7 @@ type CreateDto struct { Infra_Id *uint16 `json:"infra_id"` Specialist_Id *uint16 `json:"specialist_id"` Subspecialist_Id *uint16 `json:"subspecialist_id"` + ContractPosition_Code erg.ContractPositionCode `json:"contractPosition_code" gorm:"not null;size:20"` } type ReadListDto struct { @@ -89,7 +89,7 @@ type EmployeUpdateDto struct { Person_Id *uint `json:"-"` Division_Code *string `json:"division_code"` Number *string `json:"number" validate:"maxLength=20"` - Position_Code ero.EmployeePosisitionCode `json:"status_code" validate:"maxLength=10"` + Position_Code erg.EmployeePosisitionCode `json:"status_code" validate:"maxLength=10"` Status_Code erc.ActiveStatusCode `json:"status_code" validate:"maxLength=10"` } diff --git a/internal/domain/main-entities/user/entity.go b/internal/domain/main-entities/user/entity.go index 7a644262..f51dbf14 100644 --- a/internal/domain/main-entities/user/entity.go +++ b/internal/domain/main-entities/user/entity.go @@ -5,17 +5,16 @@ import ( ecore "simrs-vx/internal/domain/base-entities/core" erc "simrs-vx/internal/domain/references/common" - ero "simrs-vx/internal/domain/references/organization" + erg "simrs-vx/internal/domain/references/organization" ) type User struct { - ecore.Main // adjust this according to the needs - Name string `json:"name" gorm:"unique;not null;size:25"` - Password string `json:"password" gorm:"not null;size:255"` - Status_Code erc.UserStatusCode `json:"status_code" gorm:"not null;size:10"` - FailedLoginCount uint8 `json:"failedLoginCount" gorm:"type:smallint"` - // Position_Code ero.EmployeePosisitionCode `json:"position_code" gorm:"not null;size:20"` - ContractPosition_Code ero.ContractPositionCode `json:"contractPosition_Code" gorm:"not null;size:20"` + ecore.Main // adjust this according to the needs + Name string `json:"name" gorm:"unique;not null;size:25"` + Password string `json:"password" gorm:"not null;size:255"` + Status_Code erc.UserStatusCode `json:"status_code" gorm:"not null;size:10"` + ContractPosition_Code erg.ContractPositionCode `json:"contractPosition_code" gorm:"not null;size:20"` + FailedLoginCount uint8 `json:"failedLoginCount" gorm:"type:smallint"` LoginAttemptCount int `json:"-"` LastSuccessLogin *time.Time `json:"lastSuccessLogin,omitempty"` LastAllowdLogin *time.Time `json:"lastAllowdLogin,omitempty"` diff --git a/internal/domain/references/organization/organization.go b/internal/domain/references/organization/organization.go index f2482e9a..b2de9772 100644 --- a/internal/domain/references/organization/organization.go +++ b/internal/domain/references/organization/organization.go @@ -12,7 +12,7 @@ type ( const ( CSCEmp ContractPositionCode = "employee" // Pegawai - CSCSpi ContractPositionCode = "intern" // PPDS + CSCInt ContractPositionCode = "intern" // PPDS EPCReg EmployeePosisitionCode = "registration" // Admisi/Pendaftaran EPCNur EmployeePosisitionCode = "nurse" // Perawat diff --git a/internal/use-case/main-use-case/authentication/case.go b/internal/use-case/main-use-case/authentication/case.go index b6e9f2f4..ffefa7ef 100644 --- a/internal/use-case/main-use-case/authentication/case.go +++ b/internal/use-case/main-use-case/authentication/case.go @@ -10,13 +10,19 @@ import ( "github.com/golang-jwt/jwt" "github.com/google/uuid" + "simrs-vx/internal/domain/main-entities/intern" eu "simrs-vx/internal/domain/main-entities/user" - erc "simrs-vx/internal/domain/references/common" pa "simrs-vx/pkg/auth-helper" el "simrs-vx/pkg/logger" p "simrs-vx/pkg/password" + ed "simrs-vx/internal/domain/main-entities/doctor" + ee "simrs-vx/internal/domain/main-entities/employee" + en "simrs-vx/internal/domain/main-entities/nurse" + erc "simrs-vx/internal/domain/references/common" + erg "simrs-vx/internal/domain/references/organization" + a "github.com/karincake/apem" dg "github.com/karincake/apem/db-gorm-pg" ms "github.com/karincake/apem/ms-redis" @@ -72,11 +78,6 @@ func GenToken(input eu.LoginDto) (*d.Data, error) { return nil, d.FieldErrors{"authentication": d.FieldError{Code: "auth-login-unverified", Message: el.GenMessage("auth-login-unverified")}} } - userDivisionPositions, err := getDivisionPosition(user.Id) - if err != nil { - return nil, d.FieldErrors{"authentication": d.FieldError{Code: "auth-getData-failed", Message: el.GenMessage("auth-getData-failed")}} - } - // Access token prep id, err := uuid.NewRandom() if err != nil { @@ -90,19 +91,94 @@ func GenToken(input eu.LoginDto) (*d.Data, error) { atExpires := time.Now().Add(duration).Unix() atSecretKey := authCfg.AtSecretKey - // Creating Access Token + // Create Claim atClaims := jwt.MapClaims{} atClaims["user_id"] = user.Id atClaims["user_name"] = user.Name - atClaims["user_position_code"] = user.Position_Code - atClaims["exp"] = atExpires + atClaims["user_contractPosition_code"] = user.ContractPosition_Code atClaims["uuid"] = aUuid - atClaims["user_division_positions"] = userDivisionPositions + atClaims["exp"] = atExpires + + // Create output + outputData := d.II{ + "user_id": strconv.Itoa(int(user.Id)), + "user_name": user.Name, + "user_contractPosition_code": user.ContractPosition_Code, + } + + // extra + role := []string{} + switch user.ContractPosition_Code { + case erg.CSCEmp: + // employee + employee := ee.Employee{} + dg.I.Where("\"User_Id\" = ?", user.Id).First(&employee) + if employee.Id == 0 { + return nil, d.FieldErrors{"authentication": d.FieldError{Code: "auth-noEmployee", Message: el.GenMessage("auth-noEmployee")}} + } + atClaims["employee_id"] = employee.Id + outputData["employee_id"] = employee.Id + role = append(role, "emp-"+string(*employee.Position_Code)) + + if employee.Division_Code != nil { + atClaims["employee_division_code"] = employee.Division_Code + outputData["employee_division_code"] = employee.Division_Code + } + + // employee position + if employee.Id > 0 && employee.Position_Code != nil { + switch *employee.Position_Code { + case erg.EPCDoc: + doctor := ed.Doctor{} + dg.I.Where("\"Employee_Id\" = ?", employee.Id).First(&doctor) + if doctor.Id == 0 { + return nil, d.FieldErrors{"authentication": d.FieldError{Code: "auth-noDoctor", Message: el.GenMessage("auth-noDoctor")}} + } + atClaims["doctor_id"] = doctor.Id + outputData["doctor_id"] = doctor.Id + + // specialist + if doctor.Specialist_Id != nil { + atClaims["specialist_id"] = doctor.Specialist_Id + outputData["specialist_id"] = doctor.Specialist_Id + } + if doctor.Subspecialist_Id != nil { + atClaims["subspecialist_id"] = doctor.Subspecialist_Id + outputData["subspecialist_id"] = doctor.Subspecialist_Id + } + case erg.EPCNur: + nurse := en.Nurse{} + dg.I.Where("\"Employee_Id\" = ?", employee.Id).First(&nurse) + if nurse.Id == 0 { + return nil, d.FieldErrors{"authentication": d.FieldError{Code: "auth-noNurse", Message: el.GenMessage("auth-noNurse")}} + } + atClaims["nurse_id"] = nurse.Id + outputData["nurse_id"] = nurse.Id + } + // division position + divsionPositions, err := getDivisionPosition(employee.Id) + if err != nil { + return nil, d.FieldErrors{"authentication": d.FieldError{Code: "auth-getData-failed", Message: el.GenMessage("auth-getData-failed")}} + } + role = append(role, divsionPositions...) + // atClaims["division_positions"] = divsionPositions + // outputData["division_positions"] = divsionPositions + } + case erg.CSCInt: + intern := intern.Intern{} + dg.I.Where("\"User_Id\" = ?", user.Id).First(&intern) + role = append(role, "int-"+string(*intern.Position_Code)) + } + atClaims["roles"] = role + outputData["roles"] = role + + // Generate jwt at := jwt.NewWithClaims(jwt.SigningMethodHS256, atClaims) ats, err := at.SignedString([]byte(atSecretKey)) if err != nil { return nil, d.FieldErrors{"user": d.FieldError{Code: "token-sign-err", Message: el.GenMessage("token-sign-err")}} } + outputData["accessToken"] = ats // Save to redis now := time.Now() @@ -125,13 +201,7 @@ func GenToken(input eu.LoginDto) (*d.Data, error) { "structure": "single-data", "status": "verified", }, - Data: d.II{ - "user_id": strconv.Itoa(int(user.Id)), - "user_name": user.Name, - "user_position_code": user.Position_Code, - "accessToken": ats, - "user_division_positions": userDivisionPositions, - }, + Data: outputData, }, nil } @@ -186,41 +256,41 @@ func ExtractToken(r *http.Request, tokenType TokenType) (data *pa.AuthInfo, err return nil, d.FieldError{Code: "token-unidentified", Message: el.GenMessage("token-unidentified")} } user_name := fmt.Sprintf("%v", claims["user_name"]) + // user_email := "" + // if v, exist := claims["user_email"]; exist && v != nil { + // user_email = v.(string) + // } + // ref_id := 0 + // if v, exist := claims["user_ref_id"]; exist && v != nil { + // tmp := v.(float64) + // ref_id = int(tmp) + // } + // position_code := "" + // if v, exist := claims["user_position_code"]; exist && v != nil { + // position_code = v.(string) + // } + // data = &AuthInfo{ + // Uuid: accessUuid, + // User_Id: int(user_id), + // User_Name: user_name, + // User_Email: user_email, + // User_Ref_Id: ref_id, + // User_Position_Code: position_code, + contractPosition_code := "" + if v, exist := claims["contractPosition_code"]; exist && v != nil { + contractPosition_code = v.(string) + } + employee_position_code := "" + if v, exist := claims["employee_position_code"]; exist && v != nil { + employee_position_code = v.(string) + } - var userDivisionPositions []pa.DivisionPosition - raw := claims["user_division_positions"] - if raw == nil { - fmt.Println("No user_division_positions found in claims") - } else { - list, ok := raw.([]interface{}) - if !ok { - fmt.Printf("user_division_positions is not []interface{}, but %T\n", raw) - } else { - fmt.Printf("Found %d division positions\n", len(list)) - for i, item := range list { - if m, ok := item.(map[string]interface{}); ok { - fmt.Printf("Item %d: %v\n", i, m) - dp := pa.DivisionPosition{ - Division_Code: fmt.Sprintf("%v", m["division_code"]), - DivisionPosition_Code: fmt.Sprintf("%v", m["divisionPosition_code"]), - } - userDivisionPositions = append(userDivisionPositions, dp) - } else { - fmt.Printf("Item %d not map[string]interface{} but %T\n", i, item) - } - } - } - } - position_code := "" - if v, exist := claims["user_position_code"]; exist && v != nil { - position_code = v.(string) - } data = &pa.AuthInfo{ - Uuid: accessUuid, - User_Id: uint(user_id), - User_Name: user_name, - User_Position_Code: position_code, - User_DivisionPositions: userDivisionPositions, + Uuid: accessUuid, + User_Id: uint(user_id), + User_Name: user_name, + User_ContractPosition_code: contractPosition_code, + Employee_Position_Code: &employee_position_code, } return } diff --git a/internal/use-case/main-use-case/authentication/helper.go b/internal/use-case/main-use-case/authentication/helper.go index 50b0c8fd..c4e67200 100644 --- a/internal/use-case/main-use-case/authentication/helper.go +++ b/internal/use-case/main-use-case/authentication/helper.go @@ -1,11 +1,7 @@ package authentication import ( - "errors" edp "simrs-vx/internal/domain/main-entities/division-position" - ee "simrs-vx/internal/domain/main-entities/employee" - - pa "simrs-vx/pkg/auth-helper" dg "github.com/karincake/apem/db-gorm-pg" "gorm.io/gorm" @@ -27,21 +23,21 @@ func getDocName(id uint) string { return "authentication" } -func getDivisionPosition(user_id uint) ([]pa.DivisionPosition, error) { - var result []pa.DivisionPosition +func getDivisionPosition(employee_id uint) ([]string, error) { + var result []string - var employee ee.Employee - if err := dg.I.Where("\"User_Id\" = ?", user_id).First(&employee).Error; err != nil { - if err == gorm.ErrRecordNotFound { - return result, nil - } - return result, errors.New("no employee found") - } + // var employee ee.Employee + // if err := dg.I.Where("\"Employee_Id\" = ?", employee_id).First(&employee).Error; err != nil { + // if err == gorm.ErrRecordNotFound { + // return result, nil + // } + // return result, errors.New("no employee found") + // } var divisionPositions []edp.DivisionPosition err := dg.I. Preload("Division"). - Where("\"Employee_Id\" = ?", employee.Id). + Where("\"Employee_Id\" = ?", employee_id). Find(&divisionPositions).Error if err != nil { if err == gorm.ErrRecordNotFound { @@ -51,15 +47,9 @@ func getDivisionPosition(user_id uint) ([]pa.DivisionPosition, error) { } for _, dp := range divisionPositions { - result = append(result, pa.DivisionPosition{ - Division_Code: func() string { - if dp.Division != nil { - return dp.Division.Code - } - return "" - }(), - DivisionPosition_Code: dp.Code, - }) + if dp.Division != nil { + result = append(result, "div-"+dp.Division.Code+"-"+dp.Code) + } } return result, nil diff --git a/internal/use-case/main-use-case/encounter/helper.go b/internal/use-case/main-use-case/encounter/helper.go index e0d209db..7cb72938 100644 --- a/internal/use-case/main-use-case/encounter/helper.go +++ b/internal/use-case/main-use-case/encounter/helper.go @@ -9,8 +9,10 @@ import ( "fmt" "strings" - e "simrs-vx/internal/domain/main-entities/encounter" - es "simrs-vx/internal/domain/main-entities/soapi" + "gorm.io/gorm" + + pl "simrs-vx/pkg/logger" + pu "simrs-vx/pkg/use-case-helper" edo "simrs-vx/internal/domain/main-entities/device-order" emo "simrs-vx/internal/domain/main-entities/material-order" @@ -23,6 +25,7 @@ import ( epi "simrs-vx/internal/domain/main-entities/prescription-item" // udo "simrs-vx/internal/use-case/main-use-case/device-order" + es "simrs-vx/internal/domain/main-entities/soapi" um "simrs-vx/internal/use-case/main-use-case/medication" umei "simrs-vx/internal/use-case/main-use-case/medication-item" umi "simrs-vx/internal/use-case/main-use-case/medicine-mix" @@ -30,13 +33,9 @@ import ( up "simrs-vx/internal/use-case/main-use-case/prescription" upi "simrs-vx/internal/use-case/main-use-case/prescription-item" - pl "simrs-vx/pkg/logger" - pu "simrs-vx/pkg/use-case-helper" - + e "simrs-vx/internal/domain/main-entities/encounter" erc "simrs-vx/internal/domain/references/common" erg "simrs-vx/internal/domain/references/organization" - - "gorm.io/gorm" ) func setData[T *e.CreateDto | *e.UpdateDto](input T, data *e.Encounter) { @@ -114,7 +113,7 @@ func checkSoapiByDocExists(encounter_id uint, event *pl.Event, tx *gorm.DB) erro } for _, s := range soapies { - if s.Employee != nil && s.Employee.User != nil && s.Employee.Position_Code == erg.UPCDoc { + if s.Employee != nil && *s.Employee.Position_Code == erg.EPCDoc { return nil } } diff --git a/internal/use-case/main-use-case/user/case.go b/internal/use-case/main-use-case/user/case.go index ba5859ee..7d2053de 100644 --- a/internal/use-case/main-use-case/user/case.go +++ b/internal/use-case/main-use-case/user/case.go @@ -9,7 +9,6 @@ import ( ed "simrs-vx/internal/domain/main-entities/doctor" ee "simrs-vx/internal/domain/main-entities/employee" el "simrs-vx/internal/domain/main-entities/laborant" - em "simrs-vx/internal/domain/main-entities/midwife" en "simrs-vx/internal/domain/main-entities/nurse" et "simrs-vx/internal/domain/main-entities/nutritionist" ep "simrs-vx/internal/domain/main-entities/pharmacist" @@ -19,7 +18,6 @@ import ( ud "simrs-vx/internal/use-case/main-use-case/doctor" ue "simrs-vx/internal/use-case/main-use-case/employee" ul "simrs-vx/internal/use-case/main-use-case/laborant" - um "simrs-vx/internal/use-case/main-use-case/midwife" un "simrs-vx/internal/use-case/main-use-case/nurse" ut "simrs-vx/internal/use-case/main-use-case/nutritionist" upe "simrs-vx/internal/use-case/main-use-case/person" @@ -85,7 +83,7 @@ func Create(input e.CreateDto) (*d.Data, error) { data = *resData } - if input.Position_Code == ero.UPCInt { + if input.ContractPosition_Code == ero.CSCInt { createInt := esi.CreateDto{ Person_Id: input.Person_Id, Specialist_Id: input.Specialist_Id, @@ -105,8 +103,8 @@ func Create(input e.CreateDto) (*d.Data, error) { return err } - switch input.Position_Code { - case ero.UPCDoc: + switch input.Employee.Position_Code { + case ero.EPCDoc: createDoc := ed.CreateDto{ Employee_Id: &employeeData.Id, IHS_Number: input.IHS_Number, @@ -118,7 +116,7 @@ func Create(input e.CreateDto) (*d.Data, error) { if _, err := ud.CreateData(createDoc, &event, tx); err != nil { return err } - case ero.UPCNur: + case ero.EPCNur: createNurse := en.CreateDto{ Employee_Id: &employeeData.Id, IHS_Number: input.IHS_Number, @@ -128,7 +126,7 @@ func Create(input e.CreateDto) (*d.Data, error) { if _, err := un.CreateData(createNurse, &event, tx); err != nil { return err } - case ero.UPCNut: + case ero.EPCNut: createNutritionist := et.CreateDto{ Employee_Id: &employeeData.Id, IHS_Number: input.IHS_Number, @@ -136,7 +134,7 @@ func Create(input e.CreateDto) (*d.Data, error) { if _, err := ut.CreateData(createNutritionist, &event, tx); err != nil { return err } - case ero.UPCPha: + case ero.EPCPha: createPharmacist := ep.CreateDto{ Employee_Id: &employeeData.Id, IHS_Number: input.IHS_Number, @@ -144,7 +142,7 @@ func Create(input e.CreateDto) (*d.Data, error) { if _, err := up.CreateData(createPharmacist, &event, tx); err != nil { return err } - case ero.UPCLab: + case ero.EPCLab: createLaborant := el.CreateDto{ Employee_Id: &employeeData.Id, IHS_Number: input.IHS_Number, @@ -152,16 +150,6 @@ func Create(input e.CreateDto) (*d.Data, error) { if _, err := ul.CreateData(createLaborant, &event, tx); err != nil { return err } - case ero.UPCMwi: - createMidwife := em.CreateDto{ - Employee_Id: &employeeData.Id, - IHS_Number: input.IHS_Number, - } - if _, err := um.CreateData(em.CreateDto(createMidwife), &event, tx); err != nil { - return err - } - case ero.UPCReg, ero.UPCHur, ero.UPCGea, ero.UPCMan: - // do nothing default: return errors.New("invalid employee position") } @@ -317,7 +305,7 @@ func Update(input e.UpdateDto) (*d.Data, error) { return err } - person_id, err := getPersonIdByUserId(data.Id, input.Position_Code, &event, tx) + person_id, err := getPersonIdByUserId(data.Id, input.ContractPosition_Code, &event, tx) if err != nil { return err } else { @@ -348,7 +336,7 @@ func Update(input e.UpdateDto) (*d.Data, error) { return err } - if input.Position_Code == ero.UPCInt { + if input.ContractPosition_Code == ero.CSCInt { readInt := esi.ReadDetailDto{User_Id: &data.Id} readIntData, err := usi.ReadDetailData(readInt, &event, tx) if err != nil { @@ -384,8 +372,8 @@ func Update(input e.UpdateDto) (*d.Data, error) { return err } - switch input.Position_Code { - case ero.UPCDoc: + switch input.Employee.Position_Code { + case ero.EPCDoc: readDoc := ed.ReadDetailDto{Employee_Id: &employeeData.Id} readDocData, err := ud.ReadDetailData(readDoc, &event, tx) if err != nil { @@ -407,7 +395,7 @@ func Update(input e.UpdateDto) (*d.Data, error) { if _, err := ud.CreateData(createDoc, &event, tx); err != nil { return err } - case ero.UPCNur: + case ero.EPCNur: readNur := en.ReadDetailDto{Employee_Id: &employeeData.Id} readNurData, err := un.ReadDetailData(readNur, &event, tx) if err != nil { @@ -427,7 +415,7 @@ func Update(input e.UpdateDto) (*d.Data, error) { if _, err := un.CreateData(createNur, &event, tx); err != nil { return err } - case ero.UPCNut: + case ero.EPCNut: readNut := et.ReadDetailDto{Employee_Id: &employeeData.Id} readNutData, err := ut.ReadDetailData(readNut, &event, tx) if err != nil { @@ -447,7 +435,7 @@ func Update(input e.UpdateDto) (*d.Data, error) { if _, err := ut.CreateData(createNut, &event, tx); err != nil { return err } - case ero.UPCPha: + case ero.EPCPha: readPha := ep.ReadDetailDto{Employee_Id: &employeeData.Id} readPhaData, err := up.ReadDetailData(readPha, &event, tx) if err != nil { @@ -467,7 +455,7 @@ func Update(input e.UpdateDto) (*d.Data, error) { if _, err := up.CreateData(createPha, &event, tx); err != nil { return err } - case ero.UPCLab: + case ero.EPCLab: readLab := el.ReadDetailDto{Employee_Id: &employeeData.Id} readLabData, err := ul.ReadDetailData(readLab, &event, tx) if err != nil { @@ -487,28 +475,6 @@ func Update(input e.UpdateDto) (*d.Data, error) { if _, err := ul.CreateData(createLab, &event, tx); err != nil { return err } - case ero.UPCMwi: - readMidwife := em.ReadDetailDto{Employee_Id: &employeeData.Id} - readMidwifeData, err := um.ReadDetailData(readMidwife, &event, tx) - if err != nil { - return err - } - createMidwife := em.CreateDto{ - Employee_Id: &employeeData.Id, - IHS_Number: input.IHS_Number, - } - if readMidwifeData != nil { - if err := um.UpdateData(em.UpdateDto{CreateDto: createMidwife}, readMidwifeData, &event, tx); err != nil { - return err - } - return nil - } - - if _, err := um.CreateData(createMidwife, &event, tx); err != nil { - return err - } - case ero.UPCReg, ero.UPCHur, ero.UPCGea, ero.UPCMan: - // do nothing default: return errors.New("invalid employee position") } diff --git a/internal/use-case/main-use-case/user/helper.go b/internal/use-case/main-use-case/user/helper.go index 111d333f..1663bb24 100644 --- a/internal/use-case/main-use-case/user/helper.go +++ b/internal/use-case/main-use-case/user/helper.go @@ -6,19 +6,19 @@ package user import ( "errors" - ee "simrs-vx/internal/domain/main-entities/employee" - esi "simrs-vx/internal/domain/main-entities/specialist-intern" - e "simrs-vx/internal/domain/main-entities/user" - ue "simrs-vx/internal/use-case/main-use-case/employee" - usi "simrs-vx/internal/use-case/main-use-case/specialist-intern" - - ero "simrs-vx/internal/domain/references/organization" + "gorm.io/gorm" pl "simrs-vx/pkg/logger" p "simrs-vx/pkg/password" - "gorm.io/gorm" + ue "simrs-vx/internal/use-case/main-use-case/employee" + usi "simrs-vx/internal/use-case/main-use-case/specialist-intern" + + ee "simrs-vx/internal/domain/main-entities/employee" + esi "simrs-vx/internal/domain/main-entities/specialist-intern" + e "simrs-vx/internal/domain/main-entities/user" + erg "simrs-vx/internal/domain/references/organization" ) func setCreate(src e.CreateDto, dst *e.User) error { @@ -30,15 +30,14 @@ func setCreate(src e.CreateDto, dst *e.User) error { dst.Name = src.Name dst.Password = pass dst.Status_Code = src.Status_Code - dst.Position_Code = src.Position_Code + dst.ContractPosition_Code = src.ContractPosition_Code return nil } func setUpdate(src e.UpdateDto, dst *e.User) { dst.Status_Code = src.Status_Code - dst.Position_Code = src.Position_Code - + dst.ContractPosition_Code = src.ContractPosition_Code } func setDataEmployeeUpdate(src e.EmployeUpdateDto) ee.UpdateDto { @@ -54,9 +53,10 @@ func setDataEmployeeUpdate(src e.EmployeUpdateDto) ee.UpdateDto { } } -func getPersonIdByUserId(userId uint, positionCode ero.UserPosisitionCode, event *pl.Event, tx *gorm.DB) (*uint, error) { +func getPersonIdByUserId(userId uint, positionCode erg.ContractPositionCode, event *pl.Event, tx *gorm.DB) (*uint, error) { pl.SetLogInfo(event, nil, "started", "DBGetPersonIdByUserId") - if positionCode == ero.UPCInt { + if positionCode == erg.CSCEmp { + } else if positionCode == erg.CSCInt { specInt, err := usi.ReadDetailData(esi.ReadDetailDto{User_Id: &userId}, event, tx) if err != nil { return nil, err diff --git a/pkg/auth-helper/tycovar.go b/pkg/auth-helper/tycovar.go index 288c9d21..06618350 100644 --- a/pkg/auth-helper/tycovar.go +++ b/pkg/auth-helper/tycovar.go @@ -7,11 +7,15 @@ import ( type AuthKey struct{} type AuthInfo struct { - Uuid string - User_Id uint - User_Name string - User_DivisionPositions []DivisionPosition - User_Position_Code string + Uuid string + User_Id uint + User_Name string + User_ContractPosition_code string + Employee_Position_Code *string + Intern_Position_Code *string + User_DivisionPositions []DivisionPosition + // User_DivisionPositions []DivisionPosition + // User_Position_Code string } type DivisionPosition struct { @@ -20,33 +24,64 @@ type DivisionPosition struct { } func (a AuthInfo) IsDoctor() bool { - return a.User_Position_Code == string(ero.UPCDoc) + if a.Employee_Position_Code == nil { + return false + } + return *a.Employee_Position_Code == string(ero.EPCDoc) } func (a AuthInfo) IsNurse() bool { - return a.User_Position_Code == string(ero.UPCNur) + if a.Employee_Position_Code == nil { + return false + } + return *a.Employee_Position_Code == string(ero.EPCNur) } func (a AuthInfo) IsNutritionist() bool { - return a.User_Position_Code == string(ero.UPCNut) + if a.Employee_Position_Code == nil { + return false + } + return *a.Employee_Position_Code == string(ero.EPCNut) } func (a AuthInfo) IsLaborant() bool { - return a.User_Position_Code == string(ero.UPCLab) + if a.Employee_Position_Code == nil { + return false + } + return *a.Employee_Position_Code == string(ero.EPCLab) } func (a AuthInfo) IsPharmacist() bool { - return a.User_Position_Code == string(ero.UPCPha) + if a.Employee_Position_Code == nil { + return false + } + return *a.Employee_Position_Code == string(ero.EPCPha) } func (a AuthInfo) IsPayment() bool { - return a.User_Position_Code == string(ero.UPCPay) + if a.Employee_Position_Code == nil { + return false + } + return *a.Employee_Position_Code == string(ero.EPCPay) } func (a AuthInfo) IsManagement() bool { - return a.User_Position_Code == string(ero.UPCMan) + if a.Employee_Position_Code == nil { + return false + } + return *a.Employee_Position_Code == string(ero.EPCMan) } func (a AuthInfo) IsSpecialistIntern() bool { - return a.User_Position_Code == string(ero.UPCInt) + if a.Intern_Position_Code == nil { + return false + } + return *a.Intern_Position_Code == string(ero.IPCSpecialist) +} + +func (a AuthInfo) IsNurseIntern() bool { + if a.Intern_Position_Code == nil { + return false + } + return *a.Intern_Position_Code == string(ero.IPCNurse) }