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"`
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"`
UserLevelId *uint `json:"userLevelId"`
UserRoleId *uint `json:"userRoleId"`
PhoneNumber *string `json:"phoneNumber"`
Address *string `json:"address"`
WorkType *string `json:"workType"`
@ -88,8 +88,27 @@ type UsersUpdateRequest struct {
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 {
return &users.Users{
entity := &users.Users{
Username: req.Username,
Email: req.Email,
Fullname: req.Fullname,
@ -103,13 +122,44 @@ func (req UsersUpdateRequest) ToEntity() *users.Users {
IdentityNumber: req.IdentityNumber,
DateOfBirth: req.DateOfBirth,
LastEducation: req.LastEducation,
UserRoleId: req.UserRoleId,
StatusId: req.StatusId,
UserLevelId: req.UserLevelId,
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 {
Username *string `json:"username"`
Password *string `json:"password"`

View File

@ -375,25 +375,80 @@ func (_i *usersService) Update(authToken string, id uint, req request.UsersUpdat
}
}
_i.Log.Info().Interface("data", req).Msg("")
newReq := req.ToEntity()
findUser, err := _i.Repo.FindOne(clientId, id)
// 1⃣ Ambil data user lama
existingUser, err := _i.Repo.FindOne(clientId, id)
if err != nil {
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 {
return err
}
// Set ClientId on entity
newReq.ClientId = clientId
// 3⃣ Update field yang BOLEH diubah
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 {
// Extract clientId from authToken
var clientId *uuid.UUID

View File

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

View File

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

View File

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