package com.dms.api.v1; import com.dms.common.ApiResponse; import com.dms.common.Payloads; import com.dms.security.AuthRequired; import com.dms.service.IpEntryService; import com.dms.service.OrganizationService; import jakarta.servlet.http.HttpServletRequest; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PutMapping; 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; /** 组织接口,对齐 backend/dms/api/v1/organizations.py。 */ @RestController @RequestMapping("/api/v1/organizations") public class OrganizationsController { private final OrganizationService organizationService; private final IpEntryService ipEntryService; public OrganizationsController(OrganizationService organizationService, IpEntryService ipEntryService) { this.organizationService = organizationService; this.ipEntryService = ipEntryService; } @AuthRequired(requireAdmin = true) @GetMapping("/tree") public ApiResponse tree(@RequestParam(required = false) String keyword, @RequestParam(required = false) String status) { return ApiResponse.ok(organizationService.organizationTree(keyword, status)); } @AuthRequired(requireAdmin = true) @PostMapping public ResponseEntity> create(@RequestBody Object body, HttpServletRequest request) { return ResponseEntity.status(HttpStatus.CREATED) .body(ApiResponse.ok(organizationService.create(body, request))); } /** 对齐 reorder_organizations_route(契约1.27):机构树同级拖动重排。 */ @AuthRequired(requireAdmin = true) @PutMapping("/reorder") public ApiResponse reorder(@RequestBody Object body, HttpServletRequest request) { return ApiResponse.ok(organizationService.reorder(body, request)); } @AuthRequired(requireAdmin = true) @PutMapping("/{id}") public ApiResponse update(@PathVariable String id, @RequestBody Object body, HttpServletRequest request) { return ApiResponse.ok(organizationService.update( Payloads.pathId(id), body, request)); } @AuthRequired(requireAdmin = true) @DeleteMapping("/{id}") public ApiResponse delete(@PathVariable String id, @RequestParam(required = false) String rowVersion, HttpServletRequest request) { return ApiResponse.ok(organizationService.delete( Payloads.pathId(id), Payloads.deleteRowVersion(rowVersion), request)); } @AuthRequired(requireAdmin = true) @GetMapping("/{id}/ip-assignments") public ApiResponse ipAssignments(@PathVariable String id) { return ApiResponse.ok(ipEntryService.listOrgIpAssignments(Payloads.pathId(id))); } @AuthRequired(requireAdmin = true) @PutMapping("/{id}/ip-assignments") public ApiResponse updateIpAssignments(@PathVariable String id, @RequestBody Object body, HttpServletRequest request) { return ApiResponse.ok(ipEntryService.updateOrgIpAssignments( Payloads.pathId(id), body, request)); } }