Skip to content

Commit b6e0d5d

Browse files
committed
feat: 레벨별 티켓팅 내역 조회 API 구현
1 parent 71b2f6e commit b6e0d5d

4 files changed

Lines changed: 54 additions & 1 deletion

File tree

src/main/java/TiCatch/backend/domain/history/controller/HistoryController.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import TiCatch.backend.domain.history.dto.response.LevelHistoryResponse;
44
import TiCatch.backend.domain.history.dto.response.TicketingHistoryPagingResponse;
55
import TiCatch.backend.domain.history.service.HistoryService;
6+
import TiCatch.backend.domain.ticketing.entity.TicketingLevel;
67
import TiCatch.backend.domain.user.entity.User;
78
import TiCatch.backend.domain.user.service.UserService;
89
import TiCatch.backend.global.response.PageResponseResult;
@@ -13,6 +14,7 @@
1314
import org.springframework.http.ResponseEntity;
1415
import org.springframework.web.bind.annotation.GetMapping;
1516
import org.springframework.web.bind.annotation.RequestMapping;
17+
import org.springframework.web.bind.annotation.RequestParam;
1618
import org.springframework.web.bind.annotation.RestController;
1719

1820
@RestController
@@ -34,4 +36,10 @@ public ResponseEntity<SingleResponseResult<LevelHistoryResponse>> getLevelHistor
3436
User user = userService.getUserFromRequest(request);
3537
return ResponseEntity.ok(new SingleResponseResult<>(historyService.getLevelHistory(user.getUserId())));
3638
}
39+
40+
@GetMapping("/ticketingsByLevels")
41+
public ResponseEntity<PageResponseResult<TicketingHistoryPagingResponse>> getTicketingHistoryByLevel(HttpServletRequest request, Pageable pageable, @RequestParam("ticketingLevel") TicketingLevel ticketingLevel) {
42+
User user = userService.getUserFromRequest(request);
43+
return ResponseEntity.ok(new PageResponseResult<>(historyService.getTicketingHistoryByLevelWithPaged(user.getUserId(), pageable, ticketingLevel)));
44+
}
3745
}

src/main/java/TiCatch/backend/domain/history/repository/HistoryCustomRepository.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import TiCatch.backend.domain.history.dto.response.LevelHistoryResponse;
44
import TiCatch.backend.domain.history.dto.response.TicketingHistoryPagingResponse;
5+
import TiCatch.backend.domain.ticketing.entity.TicketingLevel;
56
import org.springframework.data.domain.Page;
67
import org.springframework.data.domain.Pageable;
78
import org.springframework.stereotype.Repository;
@@ -10,4 +11,5 @@
1011
public interface HistoryCustomRepository {
1112
Page<TicketingHistoryPagingResponse> findHistoryByUserIdWithPaged(Long userId, Pageable pageable);
1213
LevelHistoryResponse findHistoryByUserIdWithLevelCounts(Long userId);
14+
Page<TicketingHistoryPagingResponse> findHistoryByUserIdAndLevelWithPaged(Long userId, Pageable pageable, TicketingLevel ticketingLevel);
1315
}

src/main/java/TiCatch/backend/domain/history/repository/HistoryCustomRepositoryImpl.java

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,40 @@ public Page<TicketingHistoryPagingResponse> findHistoryByUserIdWithPaged(Long us
5555
return PageableExecutionUtils.getPage(fetchResult, pageable, () -> total);
5656
}
5757

58+
@Override
59+
public Page<TicketingHistoryPagingResponse> findHistoryByUserIdAndLevelWithPaged(Long userId, Pageable pageable, TicketingLevel ticketingLevel) {
60+
List<TicketingHistoryPagingResponse> fetchResult = jpaQueryFactory.select(Projections.fields(TicketingHistoryPagingResponse.class,
61+
history.historyId.as("historyId"),
62+
history.user.userId.as("userId"),
63+
history.ticketingId.as("ticketingId"),
64+
history.seatInfo.as("seatInfo"),
65+
history.ticketingScore.as("ticketingScore"),
66+
history.ticketingLevel.as("ticketingLevel"),
67+
history.ticketingTime.as("ticketingTime")))
68+
.from(history)
69+
.where(
70+
userIdEq(userId),
71+
levelEq(ticketingLevel)
72+
)
73+
.orderBy(history.ticketingTime.desc())
74+
.limit(pageable.getPageSize())
75+
.offset(pageable.getOffset())
76+
.fetch();
77+
78+
Long total = Optional.ofNullable(
79+
jpaQueryFactory
80+
.select(history.count())
81+
.from(history)
82+
.where(
83+
userIdEq(userId),
84+
levelEq(ticketingLevel)
85+
)
86+
.fetchOne())
87+
.orElse(0L);
88+
89+
return PageableExecutionUtils.getPage(fetchResult, pageable, () -> total);
90+
}
91+
5892
@Override
5993
public LevelHistoryResponse findHistoryByUserIdWithLevelCounts(Long userId) {
6094
List<Tuple> result = jpaQueryFactory.select(history.ticketingLevel, history.count())
@@ -86,6 +120,10 @@ private BooleanExpression userIdEq(Long userId) {
86120
return isNullOrEmpty(String.valueOf(userId)) ? null : history.user.userId.eq(userId);
87121
}
88122

123+
private BooleanExpression levelEq(TicketingLevel ticketingLevel) {
124+
return ticketingLevel != null ? history.ticketingLevel.eq(ticketingLevel) : null;
125+
}
126+
89127
private OrderSpecifier<?> getOrderSpecifier(Pageable pageable) {
90128
for (Sort.Order order : pageable.getSort()) {
91129
if (order.getProperty().equals("ticketingTime")) {

src/main/java/TiCatch/backend/domain/history/service/HistoryService.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import TiCatch.backend.domain.history.dto.response.LevelHistoryResponse;
44
import TiCatch.backend.domain.history.dto.response.TicketingHistoryPagingResponse;
55
import TiCatch.backend.domain.history.repository.HistoryRepository;
6+
import TiCatch.backend.domain.ticketing.entity.TicketingLevel;
67
import lombok.RequiredArgsConstructor;
78
import org.springframework.data.domain.Page;
89
import org.springframework.data.domain.Pageable;
@@ -23,4 +24,8 @@ public Page<TicketingHistoryPagingResponse> getTicketingHistoryWithPaged(Long us
2324
public LevelHistoryResponse getLevelHistory(Long userId) {
2425
return historyRepository.findHistoryByUserIdWithLevelCounts(userId);
2526
}
26-
}
27+
28+
public Page<TicketingHistoryPagingResponse> getTicketingHistoryByLevelWithPaged(Long userId, Pageable pageable, TicketingLevel ticketingLevel) {
29+
return historyRepository.findHistoryByUserIdAndLevelWithPaged(userId, pageable, ticketingLevel);
30+
}
31+
}

0 commit comments

Comments
 (0)