Skip to content

Commit ff2d95c

Browse files
committed
feat: 대시보드 API 수정
1 parent b65910b commit ff2d95c

17 files changed

Lines changed: 471 additions & 349 deletions

src/main/java/com/waitit/capstone/domain/dashboard/controller/DashboardController.java

Lines changed: 0 additions & 80 deletions
This file was deleted.
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
package com.waitit.capstone.domain.dashboard.controller;
2+
3+
import com.waitit.capstone.domain.dashboard.dto.*;
4+
import com.waitit.capstone.domain.dashboard.service.DashboardServiceV2;
5+
import io.swagger.v3.oas.annotations.Operation;
6+
import io.swagger.v3.oas.annotations.tags.Tag;
7+
import lombok.RequiredArgsConstructor;
8+
import org.springframework.http.ResponseEntity;
9+
import org.springframework.web.bind.annotation.GetMapping;
10+
import org.springframework.web.bind.annotation.RequestMapping;
11+
import org.springframework.web.bind.annotation.RequestParam;
12+
import org.springframework.web.bind.annotation.RestController;
13+
14+
import java.util.List;
15+
16+
@RestController
17+
@RequestMapping("/api/v2/dashboard")
18+
@RequiredArgsConstructor
19+
@Tag(name = "대시보드 API V2", description = "새로운 대시보드 통계 API")
20+
public class DashboardControllerV2 {
21+
22+
private final DashboardServiceV2 dashboardServiceV2;
23+
24+
@GetMapping("/store-metrics")
25+
@Operation(summary = "(V2) 전체 스토어 지표 조회", description = "기간별 전체 및 시간대별 대기, 이용, 이탈 통계를 조회합니다.")
26+
public ResponseEntity<StoreMetricsResponse> getStoreMetrics(
27+
@RequestParam Long storeId,
28+
@RequestParam String dateRange) {
29+
StoreMetricsResponse metrics = dashboardServiceV2.getStoreMetrics(storeId, dateRange);
30+
return ResponseEntity.ok(metrics);
31+
}
32+
33+
@GetMapping("/waitlist-trend")
34+
@Operation(summary = "(V2) 예상 대기인원 추이 조회", description = "시간대별 대기열 등록 수와 실제 이용률을 조회합니다.")
35+
public ResponseEntity<List<WaitlistTrendHourlyData>> getWaitlistTrend(
36+
@RequestParam Long storeId,
37+
@RequestParam String dateRange) {
38+
List<WaitlistTrendHourlyData> trend = dashboardServiceV2.getWaitlistTrend(storeId, dateRange);
39+
return ResponseEntity.ok(trend);
40+
}
41+
42+
@GetMapping("/return-rate")
43+
@Operation(summary = "(V2) 재방문율 조회", description = "기간별 신규 및 재방문 고객 비율을 조회합니다.")
44+
public ResponseEntity<ReturnRateResponse> getReturnRate(
45+
@RequestParam Long storeId,
46+
@RequestParam String dateRange) {
47+
ReturnRateResponse rate = dashboardServiceV2.getReturnRate(storeId, dateRange);
48+
return ResponseEntity.ok(rate);
49+
}
50+
51+
@GetMapping("/review-and-cancel-stats")
52+
@Operation(summary = "(V2) 리뷰 및 대기 취소 사유 조회", description = "기간별 대기 취소 사유 통계(%)와 리뷰 목록을 조회합니다.")
53+
public ResponseEntity<ReviewAndCancelStatsResponse> getReviewAndCancelStats(
54+
@RequestParam Long storeId,
55+
@RequestParam String dateRange,
56+
@RequestParam(required = false) Integer ratingMin) {
57+
ReviewAndCancelStatsResponse stats = dashboardServiceV2.getReviewAndCancelStats(storeId, dateRange, ratingMin);
58+
return ResponseEntity.ok(stats);
59+
}
60+
61+
// 피크 분석 API는 추가 구현이 필요합니다.
62+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.waitit.capstone.domain.dashboard.dto;
2+
3+
import com.waitit.capstone.domain.dashboard.entity.QueueLog;
4+
import lombok.AllArgsConstructor;
5+
import lombok.Getter;
6+
7+
@Getter
8+
@AllArgsConstructor
9+
public class CancelReasonCountDto {
10+
private QueueLog.Reason reason;
11+
private long count;
12+
}
Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
package com.waitit.capstone.domain.dashboard.dto;
22

3-
import lombok.AllArgsConstructor;
3+
import com.waitit.capstone.domain.dashboard.entity.QueueLog;
4+
import lombok.Builder;
45
import lombok.Getter;
56

67
@Getter
7-
@AllArgsConstructor
8+
@Builder
89
public class CancelReasonStatsDto {
9-
private String reason;
10-
private Long count;
10+
private QueueLog.Reason reason;
11+
private double percentage;
1112
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.waitit.capstone.domain.dashboard.dto;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Getter;
5+
6+
@Getter
7+
@AllArgsConstructor
8+
public class HourlyMetricsQueryResult {
9+
private int hour;
10+
private long totalCount;
11+
private long enteredCount;
12+
private long cancelledCount;
13+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.waitit.capstone.domain.dashboard.dto;
2+
3+
import lombok.Builder;
4+
import lombok.Getter;
5+
6+
@Getter
7+
@Builder
8+
public class HourlyStoreMetricsDto {
9+
private String timeSlot; // 예: "10:00 - 11:00"
10+
private long waitlistCount;
11+
private long actualUsers;
12+
private long dropouts;
13+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.waitit.capstone.domain.dashboard.dto;
2+
3+
import lombok.Builder;
4+
import lombok.Getter;
5+
6+
@Getter
7+
@Builder
8+
public class ReturnRateResponse {
9+
private long totalVisitors; // 총 방문자 수 (중복제거)
10+
private long newVisitors; // 신규 방문자 수
11+
private long returningVisitors; // 재방문자 수
12+
private double returnRate; // 재방문율
13+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.waitit.capstone.domain.dashboard.dto;
2+
3+
import lombok.Builder;
4+
import lombok.Getter;
5+
6+
import java.util.List;
7+
8+
@Getter
9+
@Builder
10+
public class StoreMetricsResponse {
11+
private StoreMetricsSummaryDto summary;
12+
private List<HourlyStoreMetricsDto> hourlyData;
13+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.waitit.capstone.domain.dashboard.dto;
2+
3+
import lombok.Builder;
4+
import lombok.Getter;
5+
6+
@Getter
7+
@Builder
8+
public class StoreMetricsSummaryDto {
9+
private long totalWaitlistCount; // 총 대기열 수
10+
private long totalActualUsers; // 총 실제 이용자 수
11+
private long totalDropouts; // 총 이탈 수
12+
private double dropoutRate; // 이탈률
13+
private double averageWaitTimeSeconds; // 첫 이용까지 걸린 시간 (평균)
14+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.waitit.capstone.domain.dashboard.dto;
2+
3+
import lombok.Builder;
4+
import lombok.Getter;
5+
6+
@Getter
7+
@Builder
8+
public class WaitlistTrendHourlyData {
9+
private String timeSlot; // 시간대 (예: "10:00 - 11:00")
10+
private long waitlistCount; // 해당 시간대 대기열 등록 수
11+
private double utilizationRate; // 실제 이용률 (입장 수 / 등록 수)
12+
}

0 commit comments

Comments
 (0)