UsersController.java 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. package com.dms.api.v1;
  2. import com.dms.common.ApiResponse;
  3. import com.dms.common.Errors;
  4. import com.dms.common.Page;
  5. import com.dms.common.Payloads;
  6. import com.dms.mapper.UserMapper;
  7. import com.dms.model.UserEntity;
  8. import com.dms.security.AuthContext;
  9. import com.dms.security.AuthRequired;
  10. import com.dms.service.UserSummaryService;
  11. import com.dms.service.UserService;
  12. import jakarta.servlet.http.HttpServletRequest;
  13. import org.springframework.http.HttpStatus;
  14. import org.springframework.http.ResponseEntity;
  15. import org.springframework.web.bind.annotation.DeleteMapping;
  16. import org.springframework.web.bind.annotation.GetMapping;
  17. import org.springframework.web.bind.annotation.PathVariable;
  18. import org.springframework.web.bind.annotation.PostMapping;
  19. import org.springframework.web.bind.annotation.PutMapping;
  20. import org.springframework.web.bind.annotation.RequestBody;
  21. import org.springframework.web.bind.annotation.RequestMapping;
  22. import org.springframework.web.bind.annotation.RequestParam;
  23. import org.springframework.web.bind.annotation.RestController;
  24. /** 用户接口,对齐 backend/dms/api/v1/users.py。 */
  25. @RestController
  26. @RequestMapping("/api/v1/users")
  27. public class UsersController {
  28. private final UserMapper userMapper;
  29. private final UserSummaryService userSummaryService;
  30. private final UserService userService;
  31. public UsersController(UserMapper userMapper, UserSummaryService userSummaryService,
  32. UserService userService) {
  33. this.userMapper = userMapper;
  34. this.userSummaryService = userSummaryService;
  35. this.userService = userService;
  36. }
  37. /** 对齐 current_user(仅认证,不要求管理员)。 */
  38. @AuthRequired
  39. @GetMapping("/me")
  40. public ApiResponse<Object> me() {
  41. UserEntity user = userMapper.findActiveById(AuthContext.get().userId());
  42. if (user == null) {
  43. throw Errors.tokenInvalid();
  44. }
  45. return ApiResponse.ok(userSummaryService.userSummary(user,
  46. userSummaryService.allowedModulesForUser(user)));
  47. }
  48. /** 对齐 update_ui_theme_route(契约1.20):本人主题偏好,无需管理权限。 */
  49. @AuthRequired
  50. @PutMapping("/me/ui-theme")
  51. public ApiResponse<Object> updateUiTheme(@RequestBody Object body) {
  52. return ApiResponse.ok(userService.updateUiTheme(body));
  53. }
  54. @AuthRequired(requireAdmin = true)
  55. @GetMapping
  56. public ApiResponse<Object> list(@RequestParam(required = false) String organizationId,
  57. @RequestParam(required = false) String includeDescendants,
  58. @RequestParam(required = false) String keyword,
  59. @RequestParam(required = false) String status,
  60. @RequestParam(required = false) String page,
  61. @RequestParam(required = false) String pageSize) {
  62. return ApiResponse.ok(userService.listUsers(
  63. Payloads.queryOptionalId(organizationId, "organizationId"),
  64. Payloads.booleanQuery(includeDescendants, "includeDescendants", false),
  65. keyword, status,
  66. Page.of(Payloads.integerQuery(page, "page", 1),
  67. Payloads.integerQuery(pageSize, "pageSize", 20))));
  68. }
  69. @AuthRequired(requireAdmin = true)
  70. @PostMapping
  71. public ResponseEntity<ApiResponse<Object>> create(@RequestBody Object body,
  72. HttpServletRequest request) {
  73. return ResponseEntity.status(HttpStatus.CREATED)
  74. .body(ApiResponse.ok(userService.create(body, request)));
  75. }
  76. /** 对齐 reorder_users_route(契约1.27):用户列表拖动重排。 */
  77. @AuthRequired(requireAdmin = true)
  78. @PutMapping("/reorder")
  79. public ApiResponse<Object> reorder(@RequestBody Object body, HttpServletRequest request) {
  80. return ApiResponse.ok(userService.reorder(body, request));
  81. }
  82. @AuthRequired(requireAdmin = true)
  83. @PutMapping("/{id}")
  84. public ApiResponse<Object> update(@PathVariable String id, @RequestBody Object body,
  85. HttpServletRequest request) {
  86. return ApiResponse.ok(userService.update(Payloads.pathId(id), body, request));
  87. }
  88. @AuthRequired(requireAdmin = true)
  89. @DeleteMapping("/{id}")
  90. public ApiResponse<Object> delete(@PathVariable String id,
  91. @RequestParam(required = false) String rowVersion,
  92. HttpServletRequest request) {
  93. return ApiResponse.ok(userService.delete(
  94. Payloads.pathId(id), Payloads.deleteRowVersion(rowVersion), request));
  95. }
  96. @AuthRequired(requireAdmin = true)
  97. @PostMapping("/{id}/reset-password")
  98. public ApiResponse<Object> resetPassword(@PathVariable String id,
  99. @RequestBody Object body,
  100. HttpServletRequest request) {
  101. return ApiResponse.ok(userService.resetPassword(
  102. Payloads.pathId(id), body, request));
  103. }
  104. }