diff options
| author | shizhendong <[email protected]> | 2024-09-19 15:14:37 +0800 |
|---|---|---|
| committer | shizhendong <[email protected]> | 2024-09-19 15:14:37 +0800 |
| commit | e17feb87b2dac31d9b7ebb7fd151f48330c71b4b (patch) | |
| tree | 4db9da0be3ab1917e5607506be71f5e26af57d2b /src/main/java | |
| parent | d281ee05d45b7c17c09bcf7b09509c65fbf98c58 (diff) | |
feat: ASW-82 新增 user profile 接口
Diffstat (limited to 'src/main/java')
3 files changed, 53 insertions, 3 deletions
diff --git a/src/main/java/net/geedge/asw/common/util/RCode.java b/src/main/java/net/geedge/asw/common/util/RCode.java index ead37d0..797b179 100644 --- a/src/main/java/net/geedge/asw/common/util/RCode.java +++ b/src/main/java/net/geedge/asw/common/util/RCode.java @@ -28,6 +28,7 @@ public enum RCode { SYS_USER_BUILT_IN(100016, "Built-in user are not allowed to delete or update"), SYS_ROLE_BUILT_IN(100017, "Built-in role are not allowed to delete or update"), SYS_ROLE_NOT_DELETE(100018, "Used role cannot be deleted"), + SYS_USER_OLDPWD_INCORRECT(100019, "Incorrect old password. Please try again."), // Application diff --git a/src/main/java/net/geedge/asw/module/sys/controller/SysUserController.java b/src/main/java/net/geedge/asw/module/sys/controller/SysUserController.java index 742ac5a..4ce4f8f 100644 --- a/src/main/java/net/geedge/asw/module/sys/controller/SysUserController.java +++ b/src/main/java/net/geedge/asw/module/sys/controller/SysUserController.java @@ -1,7 +1,9 @@ package net.geedge.asw.module.sys.controller; +import cn.dev33.satoken.stp.StpUtil; import cn.hutool.log.Log; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import net.geedge.asw.common.util.*; import net.geedge.asw.module.sys.entity.SysUserEntity; @@ -81,4 +83,49 @@ public class SysUserController { return R.ok(); } + @GetMapping("/profile") + public R profile() { + return this.detail(StpUtil.getLoginIdAsString()); + } + + @PutMapping("/profile") + public R profile(@RequestBody SysUserEntity entity) { + T.VerifyUtil.is(entity).notNull() + .and(entity.getName()).notEmpty(RCode.NAME_CANNOT_EMPTY) + .and(entity.getAccessLevel()).notEmpty(RCode.SYS_ACCESS_LEVEL_CANNOT_EMPTY); + + SysUserEntity loginUser = userService.getById(StpUtil.getLoginIdAsString()); + T.VerifyUtil.is(loginUser).notNull(RCode.USER_NO_LOGIN); + + // update fields + String name = entity.getName(); + String accessLevel = entity.getAccessLevel(); + String pwd = entity.getPwd(); + String oldPwd = entity.getOldPwd(); + String language = entity.getLanguage(); + + // pwd + if (T.StrUtil.isAllNotEmpty(pwd, oldPwd)) { + // validate + String encrypt = T.AesUtil.decrypt(loginUser.getPwd(), Constants.AES_KEY); + if (!T.StrUtil.equals(encrypt, oldPwd)) { + throw new ASWException(RCode.SYS_USER_OLDPWD_INCORRECT); + } + // encrypt pwd + pwd = T.AesUtil.encrypt(pwd, Constants.AES_KEY); + } + + userService.update( + new LambdaUpdateWrapper<SysUserEntity>() + .set(SysUserEntity::getName, name) + .set(SysUserEntity::getAccessLevel, accessLevel) + .set(T.StrUtil.isAllNotEmpty(pwd, oldPwd), SysUserEntity::getPwd, pwd) + .set(T.StrUtil.isNotEmpty(language), SysUserEntity::getLanguage, language) + .set(SysUserEntity::getUpdateTimestamp, System.currentTimeMillis()) + .set(SysUserEntity::getUpdateUserId, loginUser.getId()) + .eq(SysUserEntity::getId, loginUser.getId()) + ); + return R.ok().putData("id", loginUser.getId()); + } + } diff --git a/src/main/java/net/geedge/asw/module/sys/entity/SysUserEntity.java b/src/main/java/net/geedge/asw/module/sys/entity/SysUserEntity.java index 7e05713..413a0b5 100644 --- a/src/main/java/net/geedge/asw/module/sys/entity/SysUserEntity.java +++ b/src/main/java/net/geedge/asw/module/sys/entity/SysUserEntity.java @@ -1,15 +1,14 @@ package net.geedge.asw.module.sys.entity; -import java.util.List; - import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; - import lombok.Data; import net.geedge.asw.module.workspace.entity.WorkspaceMemberEntity; +import java.util.List; + @Data @TableName("sys_user") public class SysUserEntity { @@ -24,6 +23,9 @@ public class SysUserEntity { private String pwd; + @TableField(exist = false) + private String oldPwd; + private String accessLevel; private String language; |
