fix: update users

This commit is contained in:
Sabda Yagra 2026-02-09 14:15:34 +07:00
parent 3a8ebc6715
commit 4b814cbdc5
5 changed files with 118 additions and 19 deletions

View File

@ -73,8 +73,8 @@ type UsersUpdateRequest struct {
Username string `json:"username" validate:"required,lowercase"` Username string `json:"username" validate:"required,lowercase"`
Email string `json:"email" validate:"required,email"` Email string `json:"email" validate:"required,email"`
Fullname string `json:"fullname" validate:"required"` Fullname string `json:"fullname" validate:"required"`
UserLevelId uint `json:"userLevelId" validate:"required"` UserLevelId *uint `json:"userLevelId"`
UserRoleId uint `json:"userRoleId" validate:"required"` UserRoleId *uint `json:"userRoleId"`
PhoneNumber *string `json:"phoneNumber"` PhoneNumber *string `json:"phoneNumber"`
Address *string `json:"address"` Address *string `json:"address"`
WorkType *string `json:"workType"` WorkType *string `json:"workType"`
@ -88,8 +88,27 @@ type UsersUpdateRequest struct {
StatusId *int `json:"statusId"` StatusId *int `json:"statusId"`
} }
// type UsersUpdateRequest struct {
// Username string `json:"username" validate:"required,lowercase"`
// Email string `json:"email" validate:"required,email"`
// Fullname string `json:"fullname" validate:"required"`
// UserLevelId uint `json:"userLevelId" validate:"required"`
// UserRoleId uint `json:"userRoleId" validate:"required"`
// PhoneNumber *string `json:"phoneNumber"`
// Address *string `json:"address"`
// WorkType *string `json:"workType"`
// GenderType *string `json:"genderType"`
// IdentityType *string `json:"identityType"`
// IdentityGroup *string `json:"identityGroup"`
// IdentityGroupNumber *string `json:"identityGroupNumber"`
// IdentityNumber *string `json:"identityNumber"`
// DateOfBirth *string `json:"dateOfBirth"`
// LastEducation *string `json:"lastEducation"`
// StatusId *int `json:"statusId"`
// }
func (req UsersUpdateRequest) ToEntity() *users.Users { func (req UsersUpdateRequest) ToEntity() *users.Users {
return &users.Users{ entity := &users.Users{
Username: req.Username, Username: req.Username,
Email: req.Email, Email: req.Email,
Fullname: req.Fullname, Fullname: req.Fullname,
@ -103,13 +122,44 @@ func (req UsersUpdateRequest) ToEntity() *users.Users {
IdentityNumber: req.IdentityNumber, IdentityNumber: req.IdentityNumber,
DateOfBirth: req.DateOfBirth, DateOfBirth: req.DateOfBirth,
LastEducation: req.LastEducation, LastEducation: req.LastEducation,
UserRoleId: req.UserRoleId,
StatusId: req.StatusId, StatusId: req.StatusId,
UserLevelId: req.UserLevelId,
UpdatedAt: time.Now(), UpdatedAt: time.Now(),
} }
// ⬇️ HANYA SET JIKA DIKIRIM
if req.UserLevelId != nil {
entity.UserLevelId = *req.UserLevelId
} }
if req.UserRoleId != nil {
entity.UserRoleId = *req.UserRoleId
}
return entity
}
// func (req UsersUpdateRequest) ToEntity() *users.Users {
// return &users.Users{
// Username: req.Username,
// Email: req.Email,
// Fullname: req.Fullname,
// Address: req.Address,
// PhoneNumber: req.PhoneNumber,
// WorkType: req.WorkType,
// GenderType: req.GenderType,
// IdentityType: req.IdentityType,
// IdentityGroup: req.IdentityGroup,
// IdentityGroupNumber: req.IdentityGroupNumber,
// IdentityNumber: req.IdentityNumber,
// DateOfBirth: req.DateOfBirth,
// LastEducation: req.LastEducation,
// UserRoleId: req.UserRoleId,
// StatusId: req.StatusId,
// UserLevelId: req.UserLevelId,
// UpdatedAt: time.Now(),
// }
// }
type UserLogin struct { type UserLogin struct {
Username *string `json:"username"` Username *string `json:"username"`
Password *string `json:"password"` Password *string `json:"password"`

View File

@ -375,24 +375,79 @@ func (_i *usersService) Update(authToken string, id uint, req request.UsersUpdat
} }
} }
_i.Log.Info().Interface("data", req).Msg("") // 1⃣ Ambil data user lama
newReq := req.ToEntity() existingUser, err := _i.Repo.FindOne(clientId, id)
findUser, err := _i.Repo.FindOne(clientId, id)
if err != nil { if err != nil {
return err return err
} }
err = _i.Keycloak.UpdateUser(findUser.KeycloakId, req.Fullname, req.Email) // 2⃣ Update Keycloak (nama & email)
err = _i.Keycloak.UpdateUser(existingUser.KeycloakId, req.Fullname, req.Email)
if err != nil { if err != nil {
return err return err
} }
// Set ClientId on entity // 3⃣ Update field yang BOLEH diubah
newReq.ClientId = clientId existingUser.Username = req.Username
existingUser.Email = req.Email
existingUser.Fullname = req.Fullname
existingUser.Address = req.Address
existingUser.PhoneNumber = req.PhoneNumber
existingUser.WorkType = req.WorkType
existingUser.GenderType = req.GenderType
existingUser.IdentityType = req.IdentityType
existingUser.IdentityGroup = req.IdentityGroup
existingUser.IdentityGroupNumber = req.IdentityGroupNumber
existingUser.IdentityNumber = req.IdentityNumber
existingUser.DateOfBirth = req.DateOfBirth
existingUser.LastEducation = req.LastEducation
existingUser.StatusId = req.StatusId
existingUser.UpdatedAt = time.Now()
return _i.Repo.Update(clientId, id, newReq) // 4⃣ Role & Level HANYA jika dikirim
if req.UserLevelId != nil {
existingUser.UserLevelId = *req.UserLevelId
} }
if req.UserRoleId != nil {
existingUser.UserRoleId = *req.UserRoleId
}
// 5⃣ Pastikan clientId tidak hilang
existingUser.ClientId = clientId
// 6⃣ Simpan
return _i.Repo.Update(clientId, id, existingUser)
}
// func (_i *usersService) Update(authToken string, id uint, req request.UsersUpdateRequest) (err error) {
// // Extract clientId from authToken
// var clientId *uuid.UUID
// if authToken != "" {
// user := utilSvc.GetUserInfo(_i.Log, _i.Repo, authToken)
// if user != nil && user.ClientId != nil {
// clientId = user.ClientId
// _i.Log.Info().Interface("clientId", clientId).Msg("Extracted clientId from auth token")
// }
// }
// _i.Log.Info().Interface("data", req).Msg("")
// newReq := req.ToEntity()
// findUser, err := _i.Repo.FindOne(clientId, id)
// if err != nil {
// return err
// }
// err = _i.Keycloak.UpdateUser(findUser.KeycloakId, req.Fullname, req.Email)
// if err != nil {
// return err
// }
// // Set ClientId on entity
// newReq.ClientId = clientId
// return _i.Repo.Update(clientId, id, newReq)
// }
func (_i *usersService) Delete(authToken string, id uint) error { func (_i *usersService) Delete(authToken string, id uint) error {
// Extract clientId from authToken // Extract clientId from authToken

View File

@ -22127,8 +22127,6 @@ const docTemplate = `{
"required": [ "required": [
"email", "email",
"fullname", "fullname",
"userLevelId",
"userRoleId",
"username" "username"
], ],
"properties": { "properties": {

View File

@ -22116,8 +22116,6 @@
"required": [ "required": [
"email", "email",
"fullname", "fullname",
"userLevelId",
"userRoleId",
"username" "username"
], ],
"properties": { "properties": {

View File

@ -1915,8 +1915,6 @@ definitions:
required: required:
- email - email
- fullname - fullname
- userLevelId
- userRoleId
- username - username
type: object type: object
response.BadRequestError: response.BadRequestError: