OrganizationsController.java 3.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. package com.dms.api.v1;
  2. import com.dms.common.ApiResponse;
  3. import com.dms.common.Payloads;
  4. import com.dms.security.AuthRequired;
  5. import com.dms.service.IpEntryService;
  6. import com.dms.service.OrganizationService;
  7. import jakarta.servlet.http.HttpServletRequest;
  8. import org.springframework.http.HttpStatus;
  9. import org.springframework.http.ResponseEntity;
  10. import org.springframework.web.bind.annotation.DeleteMapping;
  11. import org.springframework.web.bind.annotation.GetMapping;
  12. import org.springframework.web.bind.annotation.PathVariable;
  13. import org.springframework.web.bind.annotation.PostMapping;
  14. import org.springframework.web.bind.annotation.PutMapping;
  15. import org.springframework.web.bind.annotation.RequestBody;
  16. import org.springframework.web.bind.annotation.RequestMapping;
  17. import org.springframework.web.bind.annotation.RequestParam;
  18. import org.springframework.web.bind.annotation.RestController;
  19. /** 组织接口,对齐 backend/dms/api/v1/organizations.py。 */
  20. @RestController
  21. @RequestMapping("/api/v1/organizations")
  22. public class OrganizationsController {
  23. private final OrganizationService organizationService;
  24. private final IpEntryService ipEntryService;
  25. public OrganizationsController(OrganizationService organizationService,
  26. IpEntryService ipEntryService) {
  27. this.organizationService = organizationService;
  28. this.ipEntryService = ipEntryService;
  29. }
  30. @AuthRequired(requireAdmin = true)
  31. @GetMapping("/tree")
  32. public ApiResponse<Object> tree(@RequestParam(required = false) String keyword,
  33. @RequestParam(required = false) String status) {
  34. return ApiResponse.ok(organizationService.organizationTree(keyword, status));
  35. }
  36. @AuthRequired(requireAdmin = true)
  37. @PostMapping
  38. public ResponseEntity<ApiResponse<Object>> create(@RequestBody Object body,
  39. HttpServletRequest request) {
  40. return ResponseEntity.status(HttpStatus.CREATED)
  41. .body(ApiResponse.ok(organizationService.create(body, request)));
  42. }
  43. /** 对齐 reorder_organizations_route(契约1.27):机构树同级拖动重排。 */
  44. @AuthRequired(requireAdmin = true)
  45. @PutMapping("/reorder")
  46. public ApiResponse<Object> reorder(@RequestBody Object body, HttpServletRequest request) {
  47. return ApiResponse.ok(organizationService.reorder(body, request));
  48. }
  49. @AuthRequired(requireAdmin = true)
  50. @PutMapping("/{id}")
  51. public ApiResponse<Object> update(@PathVariable String id, @RequestBody Object body,
  52. HttpServletRequest request) {
  53. return ApiResponse.ok(organizationService.update(
  54. Payloads.pathId(id), body, request));
  55. }
  56. @AuthRequired(requireAdmin = true)
  57. @DeleteMapping("/{id}")
  58. public ApiResponse<Object> delete(@PathVariable String id,
  59. @RequestParam(required = false) String rowVersion,
  60. HttpServletRequest request) {
  61. return ApiResponse.ok(organizationService.delete(
  62. Payloads.pathId(id), Payloads.deleteRowVersion(rowVersion), request));
  63. }
  64. @AuthRequired(requireAdmin = true)
  65. @GetMapping("/{id}/ip-assignments")
  66. public ApiResponse<Object> ipAssignments(@PathVariable String id) {
  67. return ApiResponse.ok(ipEntryService.listOrgIpAssignments(Payloads.pathId(id)));
  68. }
  69. @AuthRequired(requireAdmin = true)
  70. @PutMapping("/{id}/ip-assignments")
  71. public ApiResponse<Object> updateIpAssignments(@PathVariable String id,
  72. @RequestBody Object body,
  73. HttpServletRequest request) {
  74. return ApiResponse.ok(ipEntryService.updateOrgIpAssignments(
  75. Payloads.pathId(id), body, request));
  76. }
  77. }