refactor all

This commit is contained in:
Timi
2026-07-31 01:03:53 +08:00
parent 4e7f340cc6
commit e45809a0db
512 changed files with 14620 additions and 13519 deletions
@@ -0,0 +1,73 @@
package com.imyeyu.api.modules.user.controller;
import com.imyeyu.api.annotation.RequireCorePermission;
import com.imyeyu.api.annotation.RequireCoreRole;
import com.imyeyu.api.bean.CorePermissionCode;
import com.imyeyu.api.bean.CoreRoleCode;
import com.imyeyu.api.modules.user.entity.Permission;
import com.imyeyu.api.modules.user.service.PermissionService;
import com.imyeyu.api.modules.user.vo.permission.BatchCreateReq;
import com.imyeyu.spring.annotation.AOPLog;
import com.imyeyu.spring.bean.Page;
import com.imyeyu.spring.bean.PageResult;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
/**
* 权限 SDK 控制器
*
* @author 夜雨
* @since 2025-11-02 09:54
*/
@Slf4j
@RestController
@RequiredArgsConstructor
@RequestMapping("/user/permission")
public class PermissionController {
private final PermissionService service;
@RequireCoreRole(CoreRoleCode.ADMIN)
@RequireCorePermission(CorePermissionCode.PERMISSION_READ)
@PostMapping("/list")
public PageResult<Permission> list(@RequestBody Page<Permission> page) {
return service.page(page);
}
@AOPLog
@RequireCoreRole(CoreRoleCode.ADMIN)
@RequireCorePermission(CorePermissionCode.PERMISSION_READ)
@PostMapping("/create")
public void create(@RequestBody Permission permission) {
service.create(permission);
}
@AOPLog
@RequireCoreRole(CoreRoleCode.ADMIN)
@RequireCorePermission(CorePermissionCode.PERMISSION_CREATE)
@PostMapping("/create/batch")
public void createBatch(@RequestBody BatchCreateReq req) {
service.create(req);
}
@AOPLog
@RequireCoreRole(CoreRoleCode.ADMIN)
@RequireCorePermission(CorePermissionCode.PERMISSION_UPDATE)
@PostMapping("/update")
public void update(@RequestBody Permission permission) {
service.update(permission);
}
@AOPLog
@RequireCoreRole(CoreRoleCode.ADMIN)
@RequireCorePermission(CorePermissionCode.PERMISSION_DELETE)
@PostMapping("/delete")
public void delete(@RequestParam("id") String id) {
service.delete(id);
}
}
@@ -0,0 +1,115 @@
package com.imyeyu.api.modules.user.controller;
import com.imyeyu.api.annotation.RequireCorePermission;
import com.imyeyu.api.annotation.RequireCoreRole;
import com.imyeyu.api.bean.CorePermissionCode;
import com.imyeyu.api.bean.CoreRoleCode;
import com.imyeyu.api.bean.ModuleCode;
import com.imyeyu.api.modules.user.entity.Permission;
import com.imyeyu.api.modules.user.entity.Role;
import com.imyeyu.api.modules.user.service.PermissionService;
import com.imyeyu.api.modules.user.service.RoleService;
import com.imyeyu.api.modules.user.vo.role.UserRoleAuthorizeReq;
import com.imyeyu.spring.annotation.AOPLog;
import com.imyeyu.spring.bean.Page;
import com.imyeyu.spring.bean.PageResult;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* 角色 SDK 控制器
*
* @author 夜雨
* @since 2025-11-02 10:00
*/
@Slf4j
@RestController
@RequiredArgsConstructor
@RequestMapping("/user/role")
public class RoleController {
private final RoleService service;
private final PermissionService permissionService;
@RequireCoreRole(CoreRoleCode.ADMIN)
@RequireCorePermission(CorePermissionCode.ROLE_READ)
@PostMapping("/list")
public PageResult<Role> list(@RequestBody Page<Role> page) {
PageResult<Role> result = service.page(page);
if (result.getList() != null) {
result.getList().forEach(this::fillRoleDetail);
}
return result;
}
@RequireCoreRole(CoreRoleCode.ADMIN)
@RequireCorePermission(CorePermissionCode.ROLE_READ)
@PostMapping("/detail")
public Role detail(@RequestParam String id) {
Role role = service.get(id);
fillRoleDetail(role);
return role;
}
@AOPLog
@RequireCoreRole(CoreRoleCode.ADMIN)
@RequireCorePermission(CorePermissionCode.ROLE_CREATE)
@PostMapping("/create")
public void create(@RequestBody Role role) {
service.create(role);
}
@AOPLog
@RequireCoreRole(CoreRoleCode.ADMIN)
@RequireCorePermission(CorePermissionCode.ROLE_UPDATE)
@PostMapping("/update")
public void update(@RequestBody Role role) {
service.update(role);
}
@AOPLog
@RequireCoreRole(CoreRoleCode.ADMIN)
@RequireCorePermission(CorePermissionCode.ROLE_DELETE)
@PostMapping("/delete")
public void delete(@RequestParam String id) {
service.delete(id);
}
@RequireCoreRole(CoreRoleCode.ADMIN)
@RequireCorePermission(CorePermissionCode.USER_ROLE_READ)
@PostMapping("/authorized/list")
public List<Role> listUserRole(@RequestParam String userId, @RequestParam(required = false) ModuleCode moduleCode) {
if (moduleCode != null) {
return service.listByUserId(userId, moduleCode);
}
return service.listByUserId(userId);
}
@AOPLog
@RequireCoreRole(CoreRoleCode.ADMIN)
@RequireCorePermission(value = {CorePermissionCode.USER_ROLE_CREATE, CorePermissionCode.USER_ROLE_DELETE})
@PostMapping("/authorized/create")
public void authorizeUserRole(@RequestBody UserRoleAuthorizeReq req) {
service.authorizeUserRole(req);
}
@RequireCoreRole(CoreRoleCode.ADMIN)
@RequireCorePermission(CorePermissionCode.USER_ROLE_READ)
@PostMapping("/authorized/permission")
public List<Permission> listAuthorizedPermission(@RequestParam String userId) {
return service.listAllPermissionByUserId(userId);
}
private void fillRoleDetail(Role role) {
role.setPermissionList(permissionService.listByRoleId(role.getId()));
role.setAllPermissionList(service.listPermissionByRoleId(role.getId()));
role.setChildRoleList(service.listChildByParentRoleId(role.getId()));
}
}
@@ -0,0 +1,270 @@
package com.imyeyu.api.modules.user.controller;
import com.fasterxml.jackson.annotation.JsonView;
import com.imyeyu.api.annotation.RequireCorePermission;
import com.imyeyu.api.annotation.RequireCoreRole;
import com.imyeyu.api.bean.CorePermissionCode;
import com.imyeyu.api.bean.CoreRoleCode;
import com.imyeyu.api.modules.common.entity.Attachment;
import com.imyeyu.api.modules.common.service.AttachmentService;
import com.imyeyu.api.modules.common.vo.attach.BizUpdateReq;
import com.imyeyu.api.modules.user.entity.User;
import com.imyeyu.api.modules.user.service.UserLoginService;
import com.imyeyu.api.modules.user.service.UserService;
import com.imyeyu.api.modules.user.vo.CancelRequest;
import com.imyeyu.api.modules.user.vo.LoginRequest;
import com.imyeyu.api.modules.user.vo.LoginResponse;
import com.imyeyu.api.modules.user.vo.PhoneVerifyCodeSendRequest;
import com.imyeyu.api.modules.user.vo.PhoneVerifyRequest;
import com.imyeyu.api.modules.user.vo.UpdatePasswordRequest;
import com.imyeyu.spring.TimiSpring;
import com.imyeyu.spring.annotation.AOPLog;
import com.imyeyu.spring.annotation.CaptchaValid;
import com.imyeyu.spring.annotation.RequestRateLimit;
import com.imyeyu.spring.annotation.RequiredToken;
import com.imyeyu.spring.bean.CaptchaData;
import com.imyeyu.spring.bean.Page;
import com.imyeyu.spring.bean.PageResult;
import com.imyeyu.spring.util.ResponseView;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
/**
* 用户接口
*
* @author 夜雨
* @since 2021-02-23 21:38
*/
@Slf4j
@Validated
@RestController
@RequiredArgsConstructor
@RequestMapping("/user")
public class UserController {
private final UserService userService;
private final UserLoginService userLoginService;
private final AttachmentService attachmentService;
@RequireCoreRole(CoreRoleCode.ADMIN)
@RequestRateLimit
@RequireCorePermission(CorePermissionCode.USER_READ)
@PostMapping("/list")
public PageResult<User> list(@RequestBody Page<User> page) {
return userService.page(page);
}
@AOPLog
@RequireCoreRole(CoreRoleCode.ADMIN)
@RequestRateLimit
@RequireCorePermission(CorePermissionCode.USER_READ)
@RequestMapping("/detail")
public User detail(@RequestParam String id) {
return userService.get(id);
}
@AOPLog
@RequireCoreRole(CoreRoleCode.ADMIN)
@RequestRateLimit
@RequireCorePermission(CorePermissionCode.USER_CREATE)
@PostMapping("/create")
public void create(@RequestBody User user) {
userService.create(user);
}
@AOPLog
@RequireCoreRole(CoreRoleCode.ADMIN)
@RequestRateLimit
@RequireCorePermission(CorePermissionCode.USER_UPDATE)
@PostMapping("/update")
public void update(@RequestBody User user) {
userService.update(user);
}
@AOPLog
@RequireCoreRole(CoreRoleCode.ADMIN)
@RequestRateLimit
@RequestMapping("/delete")
public void delete(@RequestParam String id) {
userService.delete(id);
}
/**
* 用户注册
*/
@AOPLog
@JsonView(ResponseView.Public.class)
@RequestRateLimit
@CaptchaValid
@PostMapping("/register")
public LoginResponse register(@RequestBody @Valid CaptchaData<User> user) {
userService.create(user.getData());
// 登录
LoginRequest loginRequest = new LoginRequest();
loginRequest.setUser(user.getData().getName());
loginRequest.setPassword(user.getData().getPassword());
return userLoginService.login(loginRequest);
}
/**
* 用户登录
*
* @param req 登录请求
* @return 登录结果
*/
@AOPLog
@JsonView(ResponseView.Public.class)
@RequestRateLimit
@PostMapping("/login")
public LoginResponse login(@RequestBody @Valid CaptchaData<LoginRequest> req) {
return userLoginService.login(req.getData());
}
@AOPLog
@RequiredToken
@RequestRateLimit
@RequestMapping("/login/token")
public LoginResponse token() {
return userLoginService.login(TimiSpring.getToken(), userLoginService.getRequireLoginUserId());
}
/**
* 更新当前用户资料
*
* @param req 用户资料
* @return 最新登录用户
*/
@AOPLog
@RequiredToken
@RequestRateLimit
@RequireCorePermission(CorePermissionCode.USER_UPDATE)
@PostMapping("/current/update")
public LoginResponse updateCurrent(@RequestBody User req) {
User loginUser = userLoginService.getRequireLoginUser();
User user = userService.get(loginUser.getId());
if (req.getName() != null) {
user.setName(req.getName());
}
if (req.getNick() != null) {
user.setNick(req.getNick());
}
if (req.getGender() != null) {
user.setGender(req.getGender());
}
if (req.getDescription() != null) {
user.setDescription(req.getDescription());
}
if (req.getAvatarType() != null) {
user.setAvatarType(req.getAvatarType());
}
if (req.getWrapperType() != null) {
user.setWrapperType(req.getWrapperType());
}
userService.update(user);
updateCurrentAvatar(loginUser.getId(), req.getTempFileIdList());
return userLoginService.login(TimiSpring.getToken(), loginUser.getId());
}
/**
* 用户登出
*/
@AOPLog
@PostMapping("/logout")
public void logout() {
userLoginService.logout();
}
/**
* 修改当前用户密码
*
* @param req 修改密码请求
*/
@AOPLog
@RequireCorePermission(CorePermissionCode.USER_UPDATE)
@PostMapping("/update/password")
public void updatePassword(@RequestBody @Valid UpdatePasswordRequest req) {
userLoginService.updatePassword(req.getOldValue(), req.getNewValue());
}
@AOPLog
@RequireCorePermission(CorePermissionCode.USER_UPDATE)
@PostMapping("/update/email")
public void updateEmail() {
}
/**
* 发送手机号验证码
*
* @param req 手机号验证码请求
*/
@AOPLog
@RequiredToken
@RequireCorePermission(CorePermissionCode.USER_UPDATE)
@PostMapping("/phone/verify/send")
public void sendPhoneCode(@RequestBody @Valid PhoneVerifyCodeSendRequest req) {
userLoginService.sendPhoneVerifyCode(req.getPhoneNo());
}
/**
* 验证手机号
*
* @param req 手机号验证请求
*/
@AOPLog
@RequiredToken
@RequireCorePermission(CorePermissionCode.USER_UPDATE)
@PostMapping("/phone/verify")
public void verifyPhone(@RequestBody @Valid PhoneVerifyRequest req) {
userLoginService.verifyPhoneNo(req.getPhoneNo(), req.getVerifyCode());
}
/**
* 注销当前用户
*
* @param req 注销请求
*/
@AOPLog
@RequireCorePermission(CorePermissionCode.USER_DELETE)
@PostMapping("/cancel")
public void cancel(@RequestBody @Valid CancelRequest req) {
userLoginService.deactivate(req.getPassword());
}
private void updateCurrentAvatar(String userId, List<String> tempFileIdList) {
if (tempFileIdList == null || tempFileIdList.isEmpty()) {
return;
}
BizUpdateReq req = new BizUpdateReq();
req.setBizType(Attachment.BizType.USER);
req.setBizId(userId);
List<Attachment> items = attachmentService.listByBizId(Attachment.BizType.USER, userId).stream()
.filter(item -> !User.AttachType.AVATAR.name().equals(item.getAttachType()))
.map(item -> {
Attachment attachment = new Attachment();
attachment.setId(item.getId());
return attachment;
})
.toList();
List<Attachment> avatarItems = tempFileIdList.stream().map(tempFileId -> {
Attachment attachment = new Attachment();
attachment.setTempFileId(tempFileId);
attachment.setAttachTypeValue(User.AttachType.AVATAR);
return attachment;
}).toList();
items = new ArrayList<>(items);
items.addAll(avatarItems);
req.setItems(items);
attachmentService.updateByBiz(req);
}
}