feat (auth): add user division position

This commit is contained in:
dpurbosakti
2025-10-06 11:54:56 +07:00
parent e7611c9078
commit 8e1fb56570
4 changed files with 81 additions and 32 deletions
+1
View File
@@ -14,6 +14,7 @@
"auth-login-unverified": "login failed, account is not verified",
"auth-logout-success": "logout success",
"auth-reject-suspend": "restricted for suspended account",
"auth-getData-failed": "failed to get user data",
"balance-exceeded": "must not exceeds balance",
@@ -72,6 +72,11 @@ 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 {
@@ -89,11 +94,10 @@ func GenToken(input eu.LoginDto) (*d.Data, error) {
atClaims := jwt.MapClaims{}
atClaims["user_id"] = user.Id
atClaims["user_name"] = user.Name
// atClaims["user_email"] = user.Email
atClaims["user_position_code"] = user.Position_Code
// atClaims["user_ref_id"] = user.Ref_Id
atClaims["exp"] = atExpires
atClaims["uuid"] = aUuid
atClaims["user_division_positions"] = userDivisionPositions
at := jwt.NewWithClaims(jwt.SigningMethodHS256, atClaims)
ats, err := at.SignedString([]byte(atSecretKey))
if err != nil {
@@ -122,10 +126,11 @@ func GenToken(input eu.LoginDto) (*d.Data, error) {
"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_id": strconv.Itoa(int(user.Id)),
"user_name": user.Name,
"user_position_code": user.Position_Code,
"accessToken": ats,
"user_division_positions": userDivisionPositions,
},
}, nil
}
@@ -181,24 +186,31 @@ 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)
// }
var userDivisionPositions []pa.DivisionPosition
if raw, ok := claims["user_division_position"]; ok && raw != nil {
if list, ok := raw.([]interface{}); ok {
for _, item := range list {
if m, ok := item.(map[string]interface{}); ok {
dp := pa.DivisionPosition{
Division_Code: fmt.Sprintf("%v", m["Division_Code"]),
DivisionPosition_Code: fmt.Sprintf("%v", m["DivisionPosition_Code"]),
}
userDivisionPositions = append(userDivisionPositions, dp)
}
}
}
}
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,
Uuid: accessUuid,
User_Id: uint(user_id),
User_Name: user_name,
User_Position_Code: position_code,
User_DivisionPositions: userDivisionPositions,
}
return
}
@@ -1,11 +1,14 @@
package authentication
import (
"errors"
edp "simrs-vx/internal/domain/main-entities/division-position"
ee "simrs-vx/internal/domain/main-entities/employee"
// edp "simrs-vx/internal/domain/main-entities/division-position"
pa "simrs-vx/pkg/auth-helper"
dg "github.com/karincake/apem/db-gorm-pg"
// pa "simrs-vx/pkg/auth-helper"
"gorm.io/gorm"
)
// just return the error code
@@ -24,7 +27,40 @@ func getDocName(id uint) string {
return "authentication"
}
// func getDivisionPosition(user_id uint) []pa.DivisionPosition {
// var divisionPosition []pa.DivisionPosition
// var divisionPositionList []edp.DivisionPosition
// }
func getDivisionPosition(user_id uint) ([]pa.DivisionPosition, error) {
var result []pa.DivisionPosition
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 divisionPositions []edp.DivisionPosition
err := dg.I.
Preload("Division").
Where("\"Employee_Id\" = ?", employee.Id).
Find(&divisionPositions).Error
if err != nil {
if err == gorm.ErrRecordNotFound {
return result, nil
}
return result, err
}
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,
})
}
return result, nil
}
+7 -7
View File
@@ -7,16 +7,16 @@ import (
type AuthKey struct{}
type AuthInfo struct {
Uuid string
User_Id uint
User_Name string
User_DivisionPosition []DivisionPosition
User_Position_Code string
Uuid string
User_Id uint
User_Name string
User_DivisionPositions []DivisionPosition
User_Position_Code string
}
type DivisionPosition struct {
Division_Code string
DivisionPosition_Code string
Division_Code string `json:"division_code"`
DivisionPosition_Code string `json:"divisionPosition_code"`
}
func (a AuthInfo) IsDoctor() bool {