Skip to content

Commit 85ab2ea

Browse files
authored
Merge pull request #117 from knu-80/feat/#116
feat: 전날 순위 top3 제공 기능 구현
2 parents 534d9d4 + 6151718 commit 85ab2ea

3 files changed

Lines changed: 49 additions & 10 deletions

File tree

src/main/java/kr/co/knuserver/application/booth/BoothQueryService.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import kr.co.knuserver.domain.booth.entity.Booth;
1010
import kr.co.knuserver.domain.booth.entity.BoothImage;
1111
import kr.co.knuserver.domain.booth.repository.BoothImageRepository;
12+
import kr.co.knuserver.domain.booth.repository.BoothLikeDailyRepository;
1213
import kr.co.knuserver.domain.booth.repository.BoothRepository;
1314
import kr.co.knuserver.global.dto.CursorPaginationResponse;
1415
import kr.co.knuserver.global.exception.BusinessErrorCode;
@@ -33,6 +34,7 @@ public class BoothQueryService {
3334

3435
private final BoothRepository boothRepository;
3536
private final BoothImageRepository boothImageRepository;
37+
private final BoothLikeDailyRepository boothLikeDailyRepository;
3638
private final BoothLikeService boothLikeService;
3739

3840
public BoothCountResponseDto getBoothCount() {
@@ -122,6 +124,10 @@ public List<BoothTop3ResponseDto> getTop3BoothRanking() {
122124
.toList();
123125
}
124126

127+
public List<BoothRankingResponseDto> getDailyRanking(String date) {
128+
return boothLikeDailyRepository.findTopByDate(date, 3);
129+
}
130+
125131
public CursorPaginationResponse<BoothListResponseDto> searchBoothsByKeyword2(String keyword, Long lastId, int size) {
126132
Pageable pageable = PageRequest.of(0, size + 1);
127133
List<Booth> booths;
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package kr.co.knuserver.domain.booth.repository;
2+
3+
import java.util.List;
4+
import kr.co.knuserver.presentation.booth.dto.BoothRankingResponseDto;
5+
import lombok.RequiredArgsConstructor;
6+
import org.springframework.jdbc.core.JdbcTemplate;
7+
import org.springframework.stereotype.Repository;
8+
9+
@Repository
10+
@RequiredArgsConstructor
11+
public class BoothLikeDailyRepository {
12+
13+
private final JdbcTemplate jdbcTemplate;
14+
15+
public List<BoothRankingResponseDto> findTopByDate(String date, int limit) {
16+
return jdbcTemplate.query(
17+
"SELECT booth_id, name, like_count FROM booth_like_daily WHERE event_date = ? ORDER BY like_count DESC LIMIT ?",
18+
(rs, rowNum) -> new BoothRankingResponseDto(
19+
rs.getLong("booth_id"),
20+
rs.getString("name"),
21+
rs.getLong("like_count")
22+
),
23+
date, limit
24+
);
25+
}
26+
}

src/main/java/kr/co/knuserver/presentation/booth/BoothApiController.java

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package kr.co.knuserver.presentation.booth;
22

3-
import jakarta.validation.Valid;
43
import java.util.List;
5-
import kr.co.knuserver.application.booth.BoothCommandService;
64
import kr.co.knuserver.application.booth.BoothQueryService;
75
import kr.co.knuserver.global.dto.CursorPaginationResponse;
86
import kr.co.knuserver.global.exception.ApiResponse;
@@ -12,29 +10,23 @@
1210
import kr.co.knuserver.presentation.booth.dto.BoothListResponseDto;
1311
import kr.co.knuserver.presentation.booth.dto.BoothRankingResponseDto;
1412
import kr.co.knuserver.presentation.booth.dto.BoothTop3ResponseDto;
15-
import kr.co.knuserver.presentation.booth.dto.BoothUpdateRequestDto;
1613
import lombok.RequiredArgsConstructor;
1714
import org.springframework.http.HttpStatus;
18-
import org.springframework.http.MediaType;
1915
import org.springframework.http.ResponseEntity;
2016
import org.springframework.web.bind.annotation.GetMapping;
21-
import org.springframework.web.bind.annotation.PatchMapping;
2217
import org.springframework.web.bind.annotation.PathVariable;
23-
import org.springframework.web.bind.annotation.PostMapping;
24-
import org.springframework.web.bind.annotation.RequestBody;
18+
import java.time.LocalDate;
19+
import java.time.ZoneId;
2520
import org.springframework.web.bind.annotation.RequestMapping;
2621
import org.springframework.web.bind.annotation.RequestParam;
27-
import org.springframework.web.bind.annotation.RequestPart;
2822
import org.springframework.web.bind.annotation.RestController;
29-
import org.springframework.web.multipart.MultipartFile;
3023

3124
@RestController
3225
@RequestMapping("/api/v1/booths")
3326
@RequiredArgsConstructor
3427
public class BoothApiController implements BoothApiControllerDocs {
3528

3629
private final BoothQueryService boothQueryService;
37-
private final BoothCommandService boothCommandService;
3830

3931
// 가두모집 부스 개수 조회
4032
@Override
@@ -94,4 +86,19 @@ public ResponseEntity<ApiResponse<List<BoothTop3ResponseDto>>> getTop3BoothRanki
9486
List<BoothTop3ResponseDto> result = boothQueryService.getTop3BoothRanking();
9587
return ResponseEntity.ok(ApiResponse.success(result));
9688
}
89+
90+
@GetMapping("/ranking/daily")
91+
public ResponseEntity<ApiResponse<List<BoothRankingResponseDto>>> getTodayDailyRanking() {
92+
String today = LocalDate.now(ZoneId.of("Asia/Seoul")).toString();
93+
List<BoothRankingResponseDto> result = boothQueryService.getDailyRanking(today);
94+
return ResponseEntity.ok(ApiResponse.success(result));
95+
}
96+
97+
@GetMapping("/ranking/daily/{date}")
98+
public ResponseEntity<ApiResponse<List<BoothRankingResponseDto>>> getDailyRanking(
99+
@PathVariable(name = "date") String date
100+
) {
101+
List<BoothRankingResponseDto> result = boothQueryService.getDailyRanking(date);
102+
return ResponseEntity.ok(ApiResponse.success(result));
103+
}
97104
}

0 commit comments

Comments
 (0)