Skip to content

Commit 72666ca

Browse files
feat: 공연 목록 개수 조회 추가
1 parent ff02e20 commit 72666ca

6 files changed

Lines changed: 264 additions & 151 deletions

File tree

src/main/java/com/back/web7_9_codecrete_be/domain/concerts/controller/ConcertController.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import io.swagger.v3.oas.annotations.tags.Tag;
1818
import lombok.RequiredArgsConstructor;
1919
import lombok.extern.slf4j.Slf4j;
20+
import org.hibernate.sql.ast.tree.expression.Summarization;
2021
import org.springdoc.core.converters.models.PageableAsQueryParam;
2122
import org.springframework.data.domain.Page;
2223
import org.springframework.data.domain.PageRequest;
@@ -75,6 +76,27 @@ public RsData<List<ConcertItem>> getLikedConcertList(
7576
return RsData.success(concertService.getLikedConcertsList(pageable, user));
7677
}
7778

79+
@Operation(summary = "공연 총 개수 조회", description = "저장된 공연의 총 개수를 조회합니다.")
80+
@GetMapping("totalConcertCount")
81+
public RsData<Long> getTotalConcertCount(){
82+
return RsData.success(concertService.getTotalConcertsCount());
83+
}
84+
85+
@Operation(summary = "티켓팅 일정이 다가오는 공연의 개수 조회" ,
86+
description = "티켓팅 일정 정보가 있고, 티켓팅 일정이 다가오는 공연의 개수를 조회합니다. <br/>list/TICKETING에 대응하는 공연의 개수입니다.")
87+
@GetMapping("totalTicketingConcertCount")
88+
public RsData<Long> getTotalTicketingConcertCount(){
89+
return RsData.success(concertService.getTotalTicketingConcertsCount());
90+
}
91+
92+
@Operation(summary = "좋아요 누른 공연의 개수 조회", description = "현재 로그인한 사용자가 좋아요를 누른 공연의 개수를 조회합니다.")
93+
@GetMapping("likedConcertCount")
94+
public RsData<Long> getLikedConcertCount(){
95+
User user = rq.getUser();
96+
return RsData.success(concertService.getTotalLikedConcertsCount(user));
97+
}
98+
99+
78100
@Operation(summary = "공연 상세 조회", description = "공연에 대한 상세 목록을 조회합니다.")
79101
@GetMapping("concertDetail")
80102
public RsData<ConcertDetailResponse> getConcertDetail(

src/main/java/com/back/web7_9_codecrete_be/domain/concerts/repository/ConcertLikeRepository.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,5 +39,7 @@ public interface ConcertLikeRepository extends JpaRepository<ConcertLike, Long>
3939
List<ConcertLike> getTodayConcertTicketingLikes(
4040
@Param("startDate") LocalDateTime startDate,
4141
@Param("endDate") LocalDateTime endDate);
42+
43+
Long countByUser(User user);
4244
}
4345

src/main/java/com/back/web7_9_codecrete_be/domain/concerts/repository/ConcertRedisRepository.java

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@
33
import com.back.web7_9_codecrete_be.domain.concerts.dto.concert.ConcertDetailResponse;
44
import com.back.web7_9_codecrete_be.domain.concerts.dto.concert.ConcertItem;
55
import com.back.web7_9_codecrete_be.domain.concerts.dto.concert.ListSort;
6+
import com.back.web7_9_codecrete_be.domain.users.entity.User;
67
import lombok.RequiredArgsConstructor;
78
import lombok.extern.slf4j.Slf4j;
89
import org.springframework.data.domain.Pageable;
910
import org.springframework.data.redis.core.*;
10-
import org.springframework.security.core.parameters.P;
1111
import org.springframework.stereotype.Repository;
1212

1313
import java.util.*;
@@ -28,6 +28,8 @@ public class ConcertRedisRepository {
2828

2929
private static final String VIEW_COUNT_MAP = "viewCountMap";
3030

31+
private static final String CONCERTS_COUNT_PREFIX = "totalConcertsCount: ";
32+
3133
private static final int HOUR = 3600;
3234

3335
// 최초 공연 로드 락
@@ -160,5 +162,47 @@ private void deleteAllItemsByPREFIX(String prefix) {
160162
}
161163
}
162164

165+
// 총 공연의 개수 저장
166+
public Long saveTotalConcertsCount(Long totalConcertsCount, ListSort sort) {
167+
redisTemplate.opsForValue().set(CONCERTS_COUNT_PREFIX + sort.name(),totalConcertsCount.toString());
168+
return totalConcertsCount;
169+
}
170+
171+
// 총 공연의 개수 조회
172+
public Long getTotalConcertsCount(ListSort sort) {
173+
String raw = redisTemplate.opsForValue().get(CONCERTS_COUNT_PREFIX + sort.name());
174+
if (raw == null) return -1L;
175+
else return Long.parseLong(redisTemplate.opsForValue().get(CONCERTS_COUNT_PREFIX + sort.name()));
176+
}
177+
178+
// 총 공연의 개수 삭제
179+
public void deleteTotalConcertsCount(ListSort sort) {
180+
redisTemplate.delete(CONCERTS_COUNT_PREFIX+sort.name());
181+
}
182+
183+
// 사용자가 좋아요를 누른 공연의 개수 조회(임시 캐시 느낌으로 짧게 저장, 조회시 시간 갱신 ~1일
184+
public Long getUserLikedCount(User user) {
185+
String raw = redisTemplate.opsForValue().get(CONCERTS_COUNT_PREFIX + user.getId());
186+
if (raw == null) return -1L;
187+
redisTemplate.expire(CONCERTS_COUNT_PREFIX + user.getId(), 1, TimeUnit.DAYS);
188+
return Long.parseLong(redisTemplate.opsForValue().get(CONCERTS_COUNT_PREFIX + user.getId()));
189+
}
190+
191+
// 사용자가 좋아요를 누른 공연의 개수 저장
192+
public Long saveUserLikedCount(User user,Long count) {
193+
redisTemplate.opsForValue().set(
194+
CONCERTS_COUNT_PREFIX + user.getId(),
195+
count.toString(),
196+
1,
197+
TimeUnit.DAYS
198+
);
199+
return count;
200+
}
201+
202+
// 좋아요 누른 공연의 개수 캐시 삭제
203+
public void deleteUserLikedCount(User user) {
204+
redisTemplate.delete(CONCERTS_COUNT_PREFIX + user.getId());
205+
}
206+
163207

164208
}

0 commit comments

Comments
 (0)