Skip to content

Commit 180cc1c

Browse files
feat: 좋아요 한 공연의 목록 조회
1 parent fc724cf commit 180cc1c

4 files changed

Lines changed: 59 additions & 5 deletions

File tree

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

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,16 @@ public RsData<List<ConcertItem>> getUpComingList (
5757
return RsData.success(concertService.getUpcomingConcertsList(pageable));
5858
}
5959

60+
@Operation(summary = "좋아요 한 공연 조회", description = "좋아요를 누른 공연에 대한 목록을 조회합니다. 저장 날짜를 기준으로 내림차순 정렬로 표시합니다.(최신으로 추가된 목록순입니다.)")
61+
@GetMapping("likedConcertList")
62+
public RsData<List<ConcertItem>> getLikedConcertList (
63+
@RequestParam
64+
Pageable pageable
65+
){
66+
User user = rq.getUser();
67+
return RsData.success(concertService.getLikedConcertsList(pageable,user));
68+
}
69+
6070
@Operation(summary = "공연 상세 조회", description = "공연에 대한 상세 목록을 조회합니다.")
6171
@GetMapping("concertDetail")
6272
public ConcertDetailResponse getConcertDetail(
@@ -67,6 +77,8 @@ public ConcertDetailResponse getConcertDetail(
6777
return concertService.getConcertDetail(concertId);
6878
}
6979

80+
81+
7082
@Operation(summary = "공연 예매처 조회", description = "공연에 대한 예매처들을 조회합니다.")
7183
@GetMapping("ticketOffices")
7284
public RsData<List<TicketOfficeElement>> getTicketOffices (
@@ -77,7 +89,7 @@ public RsData<List<TicketOfficeElement>> getTicketOffices (
7789
return RsData.success(concertService.getTicketOfficesList(concertId));
7890
}
7991

80-
@Operation(summary = "공연 좋아요 기능")
92+
@Operation(summary = "공연 좋아요 기능", description = "사용자가 마음에 드는 공연에 대해 좋아요를 통해 저장할 수 있습니다.")
8193
@PostMapping("like/{concertId}")
8294
public RsData<Void> likeConcert(
8395
@PathVariable long concertId
@@ -87,7 +99,7 @@ public RsData<Void> likeConcert(
8799
return RsData.success(null);
88100
}
89101

90-
@Operation(summary = "공연 좋아요 해제 기능")
102+
@Operation(summary = "공연 좋아요 해제 기능", description = "좋아요를 해제할 수 있습니다.")
91103
@DeleteMapping("dislike/{concertId}")
92104
public RsData<Void> dislikeConcert(
93105
@PathVariable long concertId
@@ -97,7 +109,7 @@ public RsData<Void> dislikeConcert(
97109
return RsData.success(null);
98110
}
99111

100-
@Operation(summary = "공연 좋아요 여부 확인")
112+
@Operation(summary = "공연 좋아요 여부 확인", description = "좋아요 여부를 확인합니다.")
101113
@GetMapping("isLike/{concertId}")
102114
public RsData<ConcertLikeResponse> isLikeConcert(
103115
@PathVariable long concertId

src/main/java/com/back/web7_9_codecrete_be/domain/concerts/entity/ConcertLike.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44
import jakarta.persistence.*;
55
import lombok.Getter;
66
import lombok.RequiredArgsConstructor;
7+
import org.hibernate.annotations.CreationTimestamp;
8+
9+
import java.time.LocalDateTime;
710

811
@Entity
912
@Getter
@@ -15,12 +18,15 @@ public class ConcertLike {
1518
@Column(name = "concert_like_id")
1619
private Long concertLikeId;
1720

18-
@ManyToOne
21+
@ManyToOne(fetch = FetchType.LAZY)
1922
private Concert concert;
2023

21-
@ManyToOne
24+
@ManyToOne(fetch = FetchType.LAZY)
2225
private User user;
2326

27+
@CreationTimestamp
28+
private LocalDateTime createdAt;
29+
2430
public ConcertLike(Concert concert, User user) {
2531
this.concert = concert;
2632
this.user = user;

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

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import com.back.web7_9_codecrete_be.domain.concerts.entity.Concert;
66
import com.back.web7_9_codecrete_be.domain.concerts.entity.ConcertPlace;
77
import com.back.web7_9_codecrete_be.domain.concerts.entity.ConcertTime;
8+
import com.back.web7_9_codecrete_be.domain.users.entity.User;
89
import org.springframework.data.domain.Page;
910
import org.springframework.data.domain.Pageable;
1011
import org.springframework.data.jpa.repository.JpaRepository;
@@ -65,6 +66,35 @@ List<ConcertItem> getUpComingConcertItems(
6566
@Param("fromDate") LocalDate fromDate
6667
);
6768

69+
@Query("""
70+
SELECT
71+
new com.back.web7_9_codecrete_be.domain.concerts.dto.concert.ConcertItem(
72+
c.concertId as id,
73+
c.name as name,
74+
c.concertPlace.placeName as placeName,
75+
c.startDate as startDate,
76+
c.endDate as endDate,
77+
c.posterUrl as posterUrl,
78+
c.maxPrice as maxPrice,
79+
c.minPrice as minPrice,
80+
c.viewCount as viewCount,
81+
c.likeCount as likeCount
82+
)
83+
FROM
84+
Concert c,
85+
ConcertLike cl
86+
WHERE
87+
c.concertId = cl.concert.concertId
88+
AND
89+
cl.user.id = :userId
90+
ORDER BY
91+
cl.createdAt
92+
DESC
93+
"""
94+
)
95+
List<ConcertItem> getLikedConcertsList(Pageable pageable,
96+
@Param("userId") Long userId);
97+
6898
@Query("""
6999
SELECT
70100
new com.back.web7_9_codecrete_be.domain.concerts.dto.concert.ConcertDetailResponse(
@@ -87,5 +117,7 @@ List<ConcertItem> getUpComingConcertItems(
87117
""")
88118
ConcertDetailResponse getConcertDetailById(@Param("concertId")long concertId);
89119

120+
121+
90122
Concert getConcertByConcertId(Long concertId);
91123
}

src/main/java/com/back/web7_9_codecrete_be/domain/concerts/service/ConcertService.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,10 @@ public List<ConcertItem> getUpcomingConcertsList(Pageable pageable) {
4949
return concertRepository.getUpComingConcertItems(pageable, LocalDate.now());
5050
}
5151

52+
public List<ConcertItem> getLikedConcertsList(Pageable pageable,User user) {
53+
return concertRepository.getLikedConcertsList(pageable, user.getId());
54+
}
55+
5256
public ConcertDetailResponse getConcertDetail(long concertId) {
5357
return concertRepository.getConcertDetailById(concertId);
5458
}

0 commit comments

Comments
 (0)