55import com .back .web7_9_codecrete_be .domain .concerts .dto .concert .ConcertDetailResponse ;
66import com .back .web7_9_codecrete_be .domain .concerts .dto .concert .ConcertItem ;
77import com .back .web7_9_codecrete_be .domain .concerts .dto .concert .ConcertLikeResponse ;
8+ import com .back .web7_9_codecrete_be .domain .concerts .dto .concert .ListSort ;
89import com .back .web7_9_codecrete_be .domain .concerts .dto .ticketOffice .TicketOfficeElement ;
910import com .back .web7_9_codecrete_be .domain .concerts .entity .TicketOffice ;
1011import com .back .web7_9_codecrete_be .domain .concerts .service .ConcertService ;
@@ -37,68 +38,85 @@ public class ConcertController {
3738 private final ConcertService concertService ;
3839 private final Rq rq ;
3940
40- @ Operation (summary = "공연목록" , description = "공연 전체 목록을 조회합니다. 시작일자를 기준으로 오름차순 조회합니다." )
41- @ GetMapping ("list" )
42- public RsData <List <ConcertItem >> getList (
43- @ Schema (description = "페이징 처리 또는 무한 스크롤 구현에 쓸 Pageable 객체입니다." )
44- Pageable pageable
45- ) {
46- return RsData .success (concertService .getConcertsList (pageable ));
47- }
48-
49- @ Operation (summary = "다가오는 공연 목록" , description = "오늘을 기준으로 다가오는 공연 목록을 조회합니다." )
50- @ GetMapping ("upComingList" )
51- public RsData <List <ConcertItem >> getUpComingList (
52- @ Schema (description = "페이징 처리 또는 무한 스크롤 구현에 쓸 Pageable 객체입니다." )
41+ @ Operation (summary = "공연목록" ,
42+ description = """
43+ <h3>공연 전체 목록을 조회하는 통합 API입니다.</h3>
44+ <hr/>
45+ 다양한 조회 기준에 따라 공연 목록을 조회합니다.<br/>
46+ """ )
47+ @ GetMapping ("list/{sort}" )
48+ public RsData <List <ConcertItem >> getList (
49+ @ Schema (description = """
50+ <h3>리스트를 받아올 기준이 될 경로 변수입니다. <b>대문자</b>로 예시에 있는 것만 사용해 주세요.</h3>
51+ <hr/>
52+ <b>LIKE :</b> 좋아요 순<br/>
53+ <b>VIEW :</b> 조회수 순<br/>
54+ <b>TICKETING :</b> 오늘을 기준으로 다가오는 티켓팅 날짜 순<br/>
55+ <b>UPCOMING :</b> 오늘을 기준으로 다가오는 공연 시작 날짜 순<br/>
56+ <b>REGISTERED :</b> 가장 최근에 API에 등록된 공연 순<br/>
57+ <hr/>
58+ """ , examples = {"LIKE" , "VIEW" , "TICKETING" , "UPCOMING" , "REGISTERED" })
59+ @ PathVariable ListSort sort ,
60+ @ Schema (description = """
61+ 페이징 처리 또는 무한 스크롤 구현에 쓸 Pageable 객체입니다.<br/>
62+ sort 부분은 사용하지 않으니 지워주시고 <strong>"page", "size"</strong> 만 넘겨주시면 됩니다. <font color="red">*sort 부분이 남아있으면 오류가 발생합니다.</font>
63+ """ )
5364 Pageable pageable
5465 ) {
55- return RsData .success (concertService .getUpcomingConcertsList (pageable ));
56- }
57-
58- // todo: 내용 구현 필요
59- @ Operation (summary = "공연 예매일 기준 조회(구현 전)" , description = "현 시간을 기준으로 예매시간을 내림차순으로 출력하는 공연 목록을 조회합니다." )
60- @ GetMapping ("upComingTicketingList" )
61- public RsData <List <ConcertItem >> getUpComingTicketingList (
62- @ Schema (description = "페이징 처리 또는 무한 스크롤 구현에 사용할 Pageable 객체입니다." )
63- Pageable pageable
64- ){
65- return null ;
66+ return RsData .success (concertService .getConcertsList (pageable , sort ));
6667 }
6768
6869 @ Operation (summary = "좋아요 한 공연 조회" , description = "좋아요를 누른 공연에 대한 목록을 조회합니다. 저장 날짜를 기준으로 내림차순 정렬로 표시합니다.(최신으로 추가된 목록순입니다.)" )
6970 @ GetMapping ("likedConcertList" )
70- public RsData <List <ConcertItem >> getLikedConcertList (
71+ public RsData <List <ConcertItem >> getLikedConcertList (
7172 @ Schema (description = "페이징 처리 또는 무한 스크롤 구현에 쓸 Pageable 객체입니다." )
7273 Pageable pageable
73- ){
74+ ) {
7475 User user = rq .getUser ();
75- return RsData .success (concertService .getLikedConcertsList (pageable ,user ));
76+ return RsData .success (concertService .getLikedConcertsList (pageable , user ));
7677 }
7778
7879 @ Operation (summary = "공연 상세 조회" , description = "공연에 대한 상세 목록을 조회합니다." )
7980 @ GetMapping ("concertDetail" )
8081 public ConcertDetailResponse getConcertDetail (
8182 @ RequestParam
82- @ Schema (description = "조회 기준이 되는 concertId입니다. ?concertId={concertId} 로 값을 넘기시면 됩니다." )
83+ @ Schema (description = """
84+ <h3>조회 기준이 되는 concertId입니다.</h3>
85+ <hr/>
86+ DB에 저장되어 있는 공연의 ID 값을 기준으로 조회합니다. <br/>
87+ <strong>?concertId={concertId}</strong> 로 값을 넘기시면 됩니다.
88+ """ )
8389 long concertId
8490 ) {
8591 return concertService .getConcertDetail (concertId );
8692 }
8793
8894 @ Operation (summary = "공연 예매처 조회" , description = "공연에 대한 예매처들을 조회합니다." )
8995 @ GetMapping ("ticketOffices" )
90- public RsData <List <TicketOfficeElement >> getTicketOffices (
96+ public RsData <List <TicketOfficeElement >> getTicketOffices (
9197 @ RequestParam
92- @ Schema (description = "조회 기준이 되는 concertId입니다. ?concertId={concertId} 로 값을 넘기시면 됩니다." )
98+ @ Schema (description = """
99+ <h3>조회 기준이 되는 concertId입니다.</h3>
100+ <hr/>
101+ DB에 저장되어 있는 공연의 ID 값을 기준으로 조회합니다. <br/>
102+ <strong>?concertId={concertId}</strong> 로 값을 넘기시면 됩니다.
103+ """ )
93104 long concertId
94- ){
105+ ) {
95106 return RsData .success (concertService .getTicketOfficesList (concertId ));
96107 }
97108
98109 @ Operation (summary = "공연 좋아요 기능" , description = "사용자가 마음에 드는 공연에 대해 좋아요를 통해 저장할 수 있습니다." )
99110 @ PostMapping ("like/{concertId}" )
100111 public RsData <Void > likeConcert (
101- @ PathVariable long concertId
112+ @ PathVariable
113+ @ Schema (description = """
114+ <h3>좋아요를 누를 공연의 concertId입니다.</h3>
115+ <hr/>
116+ DB에 저장되어 있는 공연의 ID 값입니다. <br/>
117+ <strong>/like/{concertId}</strong> 형태로 요청하면 해당 공연에 좋아요가 등록됩니다.
118+ """ )
119+ long concertId
102120 ) {
103121 User user = rq .getUser ();
104122 concertService .likeConcert (concertId , user );
@@ -108,7 +126,14 @@ public RsData<Void> likeConcert(
108126 @ Operation (summary = "공연 좋아요 해제 기능" , description = "좋아요를 해제할 수 있습니다." )
109127 @ DeleteMapping ("dislike/{concertId}" )
110128 public RsData <Void > dislikeConcert (
111- @ PathVariable long concertId
129+ @ PathVariable
130+ @ Schema (description = """
131+ <h3>좋아요를 해제할 공연의 concertId입니다.</h3>
132+ <hr/>
133+ DB에 저장되어 있는 공연의 ID 값입니다. <br/>
134+ <strong>/dislike/{concertId}</strong> 형태로 요청하면 좋아요가 해제됩니다.
135+ """ )
136+ long concertId
112137 ) {
113138 User user = rq .getUser ();
114139 concertService .dislikeConcert (concertId , user );
@@ -118,8 +143,15 @@ public RsData<Void> dislikeConcert(
118143 @ Operation (summary = "공연 좋아요 여부 확인" , description = "좋아요 여부를 확인합니다." )
119144 @ GetMapping ("isLike/{concertId}" )
120145 public RsData <ConcertLikeResponse > isLikeConcert (
121- @ PathVariable long concertId
122- ){
146+ @ PathVariable
147+ @ Schema (description = """
148+ <h3>좋아요 여부를 확인할 공연의 concertId입니다.</h3>
149+ <hr/>
150+ DB에 저장되어 있는 공연의 ID 값입니다. <br/>
151+ <strong>/isLike/{concertId}</strong> 형태로 요청하면 좋아요 여부를 확인할 수 있습니다.
152+ """ )
153+ long concertId
154+ ) {
123155 User user = rq .getUser ();
124156 return RsData .success (concertService .isLikeConcert (concertId , user ));
125157 }
@@ -128,13 +160,18 @@ public RsData<ConcertLikeResponse> isLikeConcert(
128160 @ Operation (summary = "공연 검색" , description = "제목에 키워드를 포함하고 있는 공연 정보를 검색합니다." )
129161 @ GetMapping ("search" )
130162 public RsData <List <ConcertItem >> searchConcert (
131- @ Schema (description = "공연 정보 검색 키워드입니다." )
163+ @ Schema (description = """
164+ <h3>검색어가 되는 Keyword입니다.</h3>
165+ <hr/>
166+ <b>?keyword={keyword}</b> 로 값을 넘기시면 됩니다.<br/>
167+ DB에서 해당 문자열을 가지고 있는 모든 결과값을 반환합니다.
168+ """ )
132169 @ RequestParam String keyword ,
133170 @ Schema (description = "페이징 처리 또는 무한 스크롤 구현에 쓸 Pageable 객체입니다." )
134171 Pageable pageable
135172
136- ){
137- return RsData .success (concertService .getConcertListByKeyword (keyword ,pageable ));
173+ ) {
174+ return RsData .success (concertService .getConcertListByKeyword (keyword , pageable ));
138175 }
139176
140177}
0 commit comments