Skip to content

Commit 1d1a67d

Browse files
Merge pull request #83 from prgrms-web-devcourse-final-project/feat/#81
[Concert] 공연관련 Swagger 문서화
2 parents 697d54e + 9ad4847 commit 1d1a67d

6 files changed

Lines changed: 78 additions & 9 deletions

File tree

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

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
import com.back.web7_9_codecrete_be.domain.concerts.service.ConcertService;
1010
import com.back.web7_9_codecrete_be.domain.concerts.service.KopisApiService;
1111
import com.back.web7_9_codecrete_be.global.rsData.RsData;
12+
import io.swagger.v3.oas.annotations.Operation;
13+
import io.swagger.v3.oas.annotations.media.Schema;
1214
import io.swagger.v3.oas.annotations.tags.Tag;
1315
import lombok.RequiredArgsConstructor;
1416
import org.springframework.data.domain.Pageable;
@@ -25,43 +27,63 @@ public class ConcertAdminController { // todo : 인증 권한 추가하기
2527
private final ConcertService concertService;
2628
private final KopisApiService kopisApiService;
2729

28-
@GetMapping("totalGetTest")
29-
public ConcertListResponse totalGetTest() throws InterruptedException {
30-
return kopisApiService.setConcertsList();
31-
}
32-
3330

34-
@GetMapping("setConcertPlace")
31+
@Operation(summary = "초기 공연 정보 저장", description = "25년 12월부터 앞으로 6개월 이후까지의 전체 공연의 정보를 가져와서 저장합니다. 대략 10~12분 정도 시간이 소요됩니다.")
32+
@PostMapping("setConcertPlace")
3533
public ConcertPlaceListResponse setConcertPlace() throws InterruptedException {
3634
return kopisApiService.setConcertPlace();
3735
}
3836

37+
@Operation(summary = "공연 정보 갱신",description = "공연 정보를 직접 갱신합니다.")
3938
@PatchMapping("updateConcert/{concertId}")
4039
public RsData<ConcertItem> updateConcert(
40+
@Schema(description = "갱신 대상이 될 공연의 ID 값입니다.")
4141
@PathVariable Long concertId,
42+
@Schema(description = "갱신 내용입니다.")
4243
@RequestBody ConcertUpdateRequest concertUpdateRequest
4344
){
4445
ConcertItem concertItem = concertService.updateConcert(concertId, concertUpdateRequest);
4546
return RsData.success("공연 정보 수정이 완료되었습니다.",concertItem);
4647
}
4748

49+
@Operation(summary = "예매 시간이 없는 공연 목록 조회", description = "예매 시간이 없는 공연들을 공연시간 내림차순으로 출력합니다.")
4850
@GetMapping("noTicketTimeList")
4951
public List<ConcertItem> getNoTicketTimeConcertsList(
52+
@Schema(description = "무한스크롤 및 페이징 처리에 사용할 Pageable입니다.")
5053
Pageable pageable
5154
) {
5255
return concertService.getNoTicketTimeConcertsList(pageable);
5356
}
5457

58+
@Operation(summary = "공연을 삭제합니다.", description = "해당 공연을 삭제합니다.")
5559
@DeleteMapping("deleteConcert/{concertId}")
5660
public RsData<Void> deleteConcert(@PathVariable Long concertId){
5761
concertService.deleteConcert(concertId);
5862
return RsData.success("공연 정보 삭제에 성공하였습니다.",null);
5963
}
6064

65+
@Operation(summary = "예매 시간 등록",description = "개별 공연에 대한 예매 시간을 설정합니다.")
6166
@PatchMapping("ticketTimeSet")
6267
public RsData<ConcertDetailResponse> ticketTimeSet(
6368
@RequestBody ConcertTicketTimeSetRequest concertTicketTimeSetRequest
6469
){
6570
return RsData.success(concertService.setConcertTime(concertTicketTimeSetRequest));
6671
}
72+
73+
// todo: 내용 구현 필요
74+
@Operation(summary = "개별 공연 API통한 갱신(구현 전)",description = "개별 공연에 대해서 공연 예술 통합망(Kopis)을 통해 데이터를 조회하고 해당 데이터를 갱신합니다.")
75+
@PatchMapping("updateConcertByKopisAPI/{concertId}")
76+
public RsData<ConcertDetailResponse> updateConcertByKopisAPI(
77+
@Schema(description = "갱신 대상이 될 공연의 ID 값입니다.")
78+
@PathVariable Long ConcertId
79+
){
80+
return null;
81+
}
82+
83+
// todo: 내용 구현 필요, 결과 DTO 따로 만들기.
84+
@Operation(summary = "공연 목록 갱신(구현 전)", description = "전체 공연에 대해서 공연 예술 통합망(Kopis)을 통해 데이터를 조회하고, 바뀐 내용을 갱신하고 추가된 공연을 가져옵니다.")
85+
@PostMapping("updateConcert")
86+
public RsData<Void> updateConcert(){
87+
return null;
88+
}
6789
}

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

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import org.springframework.stereotype.Controller;
2525
import org.springframework.web.bind.annotation.*;
2626

27+
import javax.swing.*;
2728
import java.util.List;
2829

2930
@RestController
@@ -52,6 +53,16 @@ public RsData<List<ConcertItem>> getUpComingList (
5253
return RsData.success(concertService.getUpcomingConcertsList(pageable));
5354
}
5455

56+
// todo: 내용 구현 필요
57+
@Operation(summary = "공연 예매일 기준 조회(구현 전)", description = "현 시간을 기준으로 예매시간을 내림차순으로 출력하는 공연 목록을 조회합니다.")
58+
@GetMapping("upComingTicketingList")
59+
public RsData<List<ConcertItem>> getUpComingTicketingList (
60+
@Schema(description = "페이징 처리 또는 무한 스크롤 구현에 사용할 Pageable 객체입니다.")
61+
Pageable pageable
62+
){
63+
return null;
64+
}
65+
5566
@Operation(summary = "좋아요 한 공연 조회", description = "좋아요를 누른 공연에 대한 목록을 조회합니다. 저장 날짜를 기준으로 내림차순 정렬로 표시합니다.(최신으로 추가된 목록순입니다.)")
5667
@GetMapping("likedConcertList")
5768
public RsData<List<ConcertItem>> getLikedConcertList (
@@ -72,8 +83,6 @@ public ConcertDetailResponse getConcertDetail(
7283
return concertService.getConcertDetail(concertId);
7384
}
7485

75-
76-
7786
@Operation(summary = "공연 예매처 조회", description = "공연에 대한 예매처들을 조회합니다.")
7887
@GetMapping("ticketOffices")
7988
public RsData<List<TicketOfficeElement>> getTicketOffices (
@@ -113,5 +122,17 @@ public RsData<ConcertLikeResponse> isLikeConcert(
113122
return RsData.success(concertService.isLikeConcert(concertId, user));
114123
}
115124

125+
// todo : 내용 구현 필요
126+
@Operation(summary = "공연 검색(구현 전)", description = "공연 정보를 검색합니다.")
127+
@GetMapping("search")
128+
public RsData<List<ConcertItem>> searchConcert(
129+
@Schema(description = "공연 정보 검색 키워드입니다.")
130+
@RequestParam String keyword
131+
){
132+
return null;
133+
}
134+
135+
136+
116137

117138
}

src/main/java/com/back/web7_9_codecrete_be/domain/concerts/dto/concert/ConcertItem.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public class ConcertItem {
2121
@Schema(description = "콘서트 장소 이름입니다.")
2222
private String placeName;
2323

24-
@Schema(description = "콘서트 예매 시작 날짜입니다.")
24+
@Schema(description = "콘서트 예매 시작 날짜입니다.",format = "yyyy-MM-ddThh:mm:ss")
2525
private LocalDateTime ticketTime;
2626

2727
@Schema(description = "콘서트 시작 날짜입니다.",format = "yyyy-MM-dd")

src/main/java/com/back/web7_9_codecrete_be/domain/concerts/dto/concert/ConcertLikeResponse.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,15 @@
22

33
import com.back.web7_9_codecrete_be.domain.concerts.entity.Concert;
44
import com.back.web7_9_codecrete_be.domain.concerts.entity.ConcertLike;
5+
import io.swagger.v3.oas.annotations.media.Schema;
56
import lombok.Getter;
67

78
@Getter
89
public class ConcertLikeResponse {
10+
@Schema(description = "공연 ID 입니다.")
911
private Long concertId;
12+
13+
@Schema(description = "공연 좋아요 여부입니다.")
1014
private Boolean isLike;
1115

1216
public ConcertLikeResponse(Concert concert, Boolean isLike) {
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
11
package com.back.web7_9_codecrete_be.domain.concerts.dto.concert;
22

3+
import io.swagger.v3.oas.annotations.media.Schema;
34
import lombok.Getter;
45

56
import java.time.LocalDateTime;
67

78
@Getter
89
public class ConcertTicketTimeSetRequest {
10+
@Schema(description = "공연 ID 입니다.")
911
private Long concertId;
12+
13+
@Schema(description = "티켓팅 시간입니다.")
1014
private LocalDateTime ticketTime;
1115
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,36 @@
11
package com.back.web7_9_codecrete_be.domain.concerts.dto.concert;
22

3+
import io.swagger.v3.oas.annotations.media.Schema;
34
import lombok.Getter;
45

56
import java.time.LocalDate;
67

78
@Getter
89
public class ConcertUpdateRequest {
10+
@Schema(description = "수정할 대상이 될 공연 ID 입니다.")
911
private Long concertId;
12+
13+
@Schema(description = "공연 이름입니다.")
1014
private String name;
15+
16+
@Schema(description = "공연 설명입니다.")
1117
private String description;
18+
19+
@Schema(description = "공연장 ID 입니다.")
1220
private Long placeId;
21+
22+
@Schema(description = "공연 시작 날짜입니다.")
1323
private LocalDate StartDate;
24+
25+
@Schema(description = "공연 종료 날짜입니다.")
1426
private LocalDate EndDate;
27+
28+
@Schema(description = "공연 포스터 URL 입니다.")
1529
private String posterUrl;
30+
31+
@Schema(description = "공연 티켓 최고가입니다.")
1632
private int maxPrice;
33+
34+
@Schema(description = "공연 티켓 최저가입니다.")
1735
private int minPrice;
1836
}

0 commit comments

Comments
 (0)