package com.gcsc.guide.controller; import com.gcsc.guide.dto.StatsResponse; import com.gcsc.guide.service.UserService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.security.SecurityRequirement; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/api/admin/stats") @RequiredArgsConstructor @Tag(name = "04. 관리자 - 통계", description = "사용자 통계 및 시스템 현황 대시보드") @SecurityRequirement(name = "Bearer JWT") public class AdminStatsController { private final UserService userService; @Operation(summary = "전체 통계 조회", description = "사용자 상태별 수, 오늘 로그인 수, 전체 롤 수 등 시스템 현황 통계를 반환합니다.") @ApiResponses({ @ApiResponse(responseCode = "200", description = "통계 조회 성공", content = @Content(schema = @Schema(implementation = StatsResponse.class))), @ApiResponse(responseCode = "401", description = "인증 실패", content = @Content), @ApiResponse(responseCode = "403", description = "관리자 권한 필요", content = @Content) }) @GetMapping public ResponseEntity getStats() { return ResponseEntity.ok(userService.getStats()); } }