gc-guide-api/src/main/java/com/gcsc/guide/controller/AdminRoleController.java

74 lines
2.4 KiB
Java
Raw Normal View 히스토리

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<List<RoleResponse>> getRoles() {
return ResponseEntity.ok(roleService.getRoles());
}
/** 롤 생성 */
@PostMapping
public ResponseEntity<RoleResponse> 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<RoleResponse> updateRole(
@PathVariable Long id,
@Valid @RequestBody CreateRoleRequest request) {
return ResponseEntity.ok(roleService.updateRole(id, request.name(), request.description()));
}
/** 롤 삭제 */
@DeleteMapping("/{id}")
public ResponseEntity<Void> deleteRole(@PathVariable Long id) {
roleService.deleteRole(id);
return ResponseEntity.noContent().build();
}
/** 롤의 URL 패턴 목록 */
@GetMapping("/{id}/permissions")
public ResponseEntity<List<String>> getPermissions(@PathVariable Long id) {
return ResponseEntity.ok(roleService.getPermissions(id));
}
/** URL 패턴 추가 */
@PostMapping("/{id}/permissions")
public ResponseEntity<RoleResponse> addPermission(
@PathVariable Long id,
@Valid @RequestBody AddPermissionRequest request) {
return ResponseEntity.ok(roleService.addPermission(id, request.urlPattern()));
}
/** URL 패턴 삭제 */
@DeleteMapping("/permissions/{permissionId}")
public ResponseEntity<Void> deletePermission(@PathVariable Long permissionId) {
roleService.deletePermission(permissionId);
return ResponseEntity.noContent().build();
}
}