in internal/service/content/user_service.go [310:364]
func (us *UserService) UpdateInfo(ctx context.Context, req *schema.UpdateInfoRequest) (
errFields []*validator.FormErrorField, err error) {
siteUsers, err := us.siteInfoService.GetSiteUsers(ctx)
if err != nil {
return nil, err
}
if siteUsers.AllowUpdateUsername && len(req.Username) > 0 {
if checker.IsInvalidUsername(req.Username) {
return append(errFields, &validator.FormErrorField{
ErrorField: "username",
ErrorMsg: reason.UsernameInvalid,
}), errors.BadRequest(reason.UsernameInvalid)
}
// admin can use reserved username
if !req.IsAdmin && checker.IsReservedUsername(req.Username) {
return append(errFields, &validator.FormErrorField{
ErrorField: "username",
ErrorMsg: reason.UsernameInvalid,
}), errors.BadRequest(reason.UsernameInvalid)
} else if req.IsAdmin && checker.IsUsersIgnorePath(req.Username) {
return append(errFields, &validator.FormErrorField{
ErrorField: "username",
ErrorMsg: reason.UsernameInvalid,
}), errors.BadRequest(reason.UsernameInvalid)
}
userInfo, exist, err := us.userRepo.GetByUsername(ctx, req.Username)
if err != nil {
return nil, err
}
if exist && userInfo.ID != req.UserID {
return append(errFields, &validator.FormErrorField{
ErrorField: "username",
ErrorMsg: reason.UsernameDuplicate,
}), errors.BadRequest(reason.UsernameDuplicate)
}
}
oldUserInfo, exist, err := us.userRepo.GetByUserID(ctx, req.UserID)
if err != nil {
return nil, err
}
if !exist {
return nil, errors.BadRequest(reason.UserNotFound)
}
cond := us.formatUserInfoForUpdateInfo(oldUserInfo, req, siteUsers)
err = us.userRepo.UpdateInfo(ctx, cond)
if err != nil {
return nil, err
}
us.eventQueueService.Send(ctx, schema.NewEvent(constant.EventUserUpdate, req.UserID))
return nil, err
}