Skip to content

Commit 0caa01d

Browse files
Merge pull request #116 from prgrms-web-devcourse-final-project/feat/#113
[Concert] 공연 목록 조회 보강, Swagger 문서화 보강
2 parents e409405 + 89c0df0 commit 0caa01d

5 files changed

Lines changed: 255 additions & 66 deletions

File tree

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

Lines changed: 49 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -35,16 +35,27 @@ public RsData<SetResultResponse> setConcert() throws InterruptedException {
3535
return RsData.success(kopisApiService.setConcertsList());
3636
}
3737

38-
@Operation(summary = "공연 정보 갱신",description = "공연 정보를 직접 갱신합니다.")
38+
@Operation(summary = "공연 정보 갱신", description = "공연 정보를 직접 갱신합니다.")
3939
@PatchMapping("updateConcert/{concertId}")
4040
public RsData<ConcertItem> updateConcert(
41-
@Schema(description = "갱신 대상이 될 공연의 ID 값입니다.")
42-
@PathVariable Long concertId,
43-
@Schema(description = "갱신 내용입니다.")
44-
@RequestBody ConcertUpdateRequest concertUpdateRequest
45-
){
41+
@PathVariable
42+
@Schema(description = """
43+
<h3>갱신 대상이 될 공연의 concertId입니다.</h3>
44+
<hr/>
45+
DB에 저장되어 있는 공연의 ID 값입니다. <br/>
46+
<strong>/updateConcert/{concertId}</strong> 형태로 요청하면 됩니다.
47+
""")
48+
Long concertId,
49+
@RequestBody
50+
@Schema(description = """
51+
<h3>공연 갱신 요청 정보입니다.</h3>
52+
<hr/>
53+
공연의 제목, 설명 등 수정이 필요한 정보들을 전달합니다.
54+
""")
55+
ConcertUpdateRequest concertUpdateRequest
56+
) {
4657
ConcertItem concertItem = concertService.updateConcert(concertId, concertUpdateRequest);
47-
return RsData.success("공연 정보 수정이 완료되었습니다.",concertItem);
58+
return RsData.success("공연 정보 수정이 완료되었습니다.", concertItem);
4859
}
4960

5061
@Operation(summary = "예매 시간이 없는 공연 목록 조회", description = "예매 시간이 없는 공연들을 공연시간 내림차순으로 출력합니다.")
@@ -58,25 +69,46 @@ public List<ConcertItem> getNoTicketTimeConcertsList(
5869

5970
@Operation(summary = "공연을 삭제합니다.", description = "해당 공연을 삭제합니다.")
6071
@DeleteMapping("deleteConcert/{concertId}")
61-
public RsData<Void> deleteConcert(@PathVariable Long concertId){
72+
public RsData<Void> deleteConcert(
73+
@PathVariable
74+
@Schema(description = """
75+
<h3>삭제 대상이 될 공연의 concertId입니다.</h3>
76+
<hr/>
77+
DB에 저장되어 있는 공연의 ID 값입니다. <br/>
78+
<strong>/deleteConcert/{concertId}</strong> 형태로 요청하면 됩니다.
79+
""")
80+
Long concertId
81+
) {
6282
concertService.deleteConcert(concertId);
63-
return RsData.success("공연 정보 삭제에 성공하였습니다.",null);
83+
return RsData.success("공연 정보 삭제에 성공하였습니다.", null);
6484
}
6585

66-
@Operation(summary = "예매 시간 등록",description = "개별 공연에 대한 예매 시간을 설정합니다.")
86+
@Operation(summary = "예매 시간 등록", description = "개별 공연에 대한 예매 시간을 설정합니다.")
6787
@PatchMapping("ticketTimeSet")
68-
public RsData<ConcertDetailResponse> ticketTimeSet(
69-
@RequestBody ConcertTicketTimeSetRequest concertTicketTimeSetRequest
70-
){
88+
public RsData<ConcertDetailResponse> ticketTimeSet(
89+
@RequestBody
90+
@Schema(description = """
91+
<h3>공연 예매 시간 설정 정보입니다.</h3>
92+
<hr/>
93+
공연 ID와 예매 시작 시간 정보를 전달합니다.
94+
""")
95+
ConcertTicketTimeSetRequest concertTicketTimeSetRequest
96+
) {
7197
return RsData.success(concertService.setConcertTime(concertTicketTimeSetRequest));
7298
}
7399

74-
@Operation(summary = "개별 공연 API통한 갱신",description = "개별 공연에 대해서 공연 예술 통합망(Kopis)을 통해 데이터를 조회하고 해당 데이터를 갱신합니다.")
100+
@Operation(summary = "개별 공연 API통한 갱신", description = "개별 공연에 대해서 공연 예술 통합망(Kopis)을 통해 데이터를 조회하고 해당 데이터를 갱신합니다.")
75101
@PatchMapping("updateConcertByKopisAPI/{concertId}")
76102
public RsData<ConcertDetailResponse> updateConcertByKopisAPI(
77-
@Schema(description = "갱신 대상이 될 공연의 ID 값입니다.")
78-
@PathVariable Long concertId
79-
){
103+
@PathVariable
104+
@Schema(description = """
105+
<h3>갱신 대상이 될 공연의 concertId입니다.</h3>
106+
<hr/>
107+
DB에 저장되어 있는 공연의 ID 값입니다. <br/>
108+
<strong>/updateConcertByKopisAPI/{concertId}</strong> 형태로 요청하면 됩니다.
109+
""")
110+
Long concertId
111+
) {
80112
kopisApiService.concertUpdateByKopisApi(concertId);
81113
return RsData.success(concertService.getConcertDetail(concertId));
82114
}

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

Lines changed: 75 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import com.back.web7_9_codecrete_be.domain.concerts.dto.concert.ConcertDetailResponse;
66
import com.back.web7_9_codecrete_be.domain.concerts.dto.concert.ConcertItem;
77
import com.back.web7_9_codecrete_be.domain.concerts.dto.concert.ConcertLikeResponse;
8+
import com.back.web7_9_codecrete_be.domain.concerts.dto.concert.ListSort;
89
import com.back.web7_9_codecrete_be.domain.concerts.dto.ticketOffice.TicketOfficeElement;
910
import com.back.web7_9_codecrete_be.domain.concerts.entity.TicketOffice;
1011
import 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
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.back.web7_9_codecrete_be.domain.concerts.dto.concert;
2+
3+
public enum ListSort {
4+
LIKE,
5+
VIEW,
6+
TICKETING,
7+
UPCOMING,
8+
REGISTERED;
9+
}

0 commit comments

Comments
 (0)