package com.gcsc.guide.controller; import com.gcsc.guide.dto.UpdateRolesRequest; import com.gcsc.guide.dto.UserResponse; import com.gcsc.guide.service.UserService; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import java.util.List; /** * 관리자 사용자 관리 API */ @RestController @RequestMapping("/api/admin/users") @RequiredArgsConstructor public class AdminUserController { private final UserService userService; /** 전체 사용자 목록 조회 (status 필터 선택) */ @GetMapping public ResponseEntity> getUsers( @RequestParam(required = false) String status) { return ResponseEntity.ok(userService.getUsers(status)); } /** 사용자 승인 (PENDING → ACTIVE) */ @PutMapping("/{id}/approve") public ResponseEntity approveUser(@PathVariable Long id) { return ResponseEntity.ok(userService.approveUser(id)); } /** 사용자 거절 (PENDING → REJECTED) */ @PutMapping("/{id}/reject") public ResponseEntity rejectUser(@PathVariable Long id) { return ResponseEntity.ok(userService.rejectUser(id)); } /** 사용자 비활성화 (ACTIVE → DISABLED) */ @PutMapping("/{id}/disable") public ResponseEntity disableUser(@PathVariable Long id) { return ResponseEntity.ok(userService.disableUser(id)); } /** 사용자 롤 업데이트 */ @PutMapping("/{id}/roles") public ResponseEntity updateUserRoles( @PathVariable Long id, @Valid @RequestBody UpdateRolesRequest request) { return ResponseEntity.ok(userService.updateUserRoles(id, request.roleIds())); } /** 관리자 권한 부여 */ @PostMapping("/{id}/admin") public ResponseEntity grantAdmin(@PathVariable Long id) { return ResponseEntity.ok(userService.grantAdmin(id)); } /** 관리자 권한 해제 */ @DeleteMapping("/{id}/admin") public ResponseEntity revokeAdmin(@PathVariable Long id) { return ResponseEntity.ok(userService.revokeAdmin(id)); } }