package com.gcsc.guide.controller; import com.gcsc.guide.dto.AddPermissionRequest; import com.gcsc.guide.dto.CreateRoleRequest; import com.gcsc.guide.dto.RoleResponse; import com.gcsc.guide.service.RoleService; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import java.net.URI; import java.util.List; /** * 관리자 롤/권한 관리 API */ @RestController @RequestMapping("/api/admin/roles") @RequiredArgsConstructor public class AdminRoleController { private final RoleService roleService; /** 전체 롤 목록 */ @GetMapping public ResponseEntity> getRoles() { return ResponseEntity.ok(roleService.getRoles()); } /** 롤 생성 */ @PostMapping public ResponseEntity createRole(@Valid @RequestBody CreateRoleRequest request) { RoleResponse role = roleService.createRole(request.name(), request.description()); return ResponseEntity.created(URI.create("/api/admin/roles/" + role.id())).body(role); } /** 롤 수정 */ @PutMapping("/{id}") public ResponseEntity updateRole( @PathVariable Long id, @Valid @RequestBody CreateRoleRequest request) { return ResponseEntity.ok(roleService.updateRole(id, request.name(), request.description())); } /** 롤 삭제 */ @DeleteMapping("/{id}") public ResponseEntity deleteRole(@PathVariable Long id) { roleService.deleteRole(id); return ResponseEntity.noContent().build(); } /** 롤의 URL 패턴 목록 */ @GetMapping("/{id}/permissions") public ResponseEntity> getPermissions(@PathVariable Long id) { return ResponseEntity.ok(roleService.getPermissions(id)); } /** URL 패턴 추가 */ @PostMapping("/{id}/permissions") public ResponseEntity addPermission( @PathVariable Long id, @Valid @RequestBody AddPermissionRequest request) { return ResponseEntity.ok(roleService.addPermission(id, request.urlPattern())); } /** URL 패턴 삭제 */ @DeleteMapping("/permissions/{permissionId}") public ResponseEntity deletePermission(@PathVariable Long permissionId) { roleService.deletePermission(permissionId); return ResponseEntity.noContent().build(); } }