Skip to content

Commit e559a05

Browse files
Merge pull request #114 from prgrms-web-devcourse-final-project/feat/#55
[Concert] 공연 조회 관련 예외 처리 및 오류 코드 추가
2 parents b8b72c4 + 2cedc1d commit e559a05

7 files changed

Lines changed: 40 additions & 13 deletions

File tree

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.back.web7_9_codecrete_be.domain.concerts.dto.concert;
22

33
import com.back.web7_9_codecrete_be.domain.concerts.entity.Concert;
4-
import com.back.web7_9_codecrete_be.domain.concerts.entity.ConcertLike;
54
import io.swagger.v3.oas.annotations.media.Schema;
65
import lombok.Getter;
76

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,18 @@
11
package com.back.web7_9_codecrete_be.domain.concerts.dto.concert;
22

33
import io.swagger.v3.oas.annotations.media.Schema;
4+
import jakarta.validation.constraints.NotEmpty;
45
import lombok.Getter;
56

67
import java.time.LocalDateTime;
78

89
@Getter
910
public class ConcertTicketTimeSetRequest {
1011
@Schema(description = "공연 ID 입니다.")
12+
@NotEmpty
1113
private Long concertId;
1214

1315
@Schema(description = "티켓팅 시간입니다.")
16+
@NotEmpty
1417
private LocalDateTime ticketTime;
1518
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,46 @@
11
package com.back.web7_9_codecrete_be.domain.concerts.dto.concert;
22

33
import io.swagger.v3.oas.annotations.media.Schema;
4+
import jakarta.validation.constraints.NotEmpty;
45
import lombok.Getter;
56

67
import java.time.LocalDate;
78

89
@Getter
910
public class ConcertUpdateRequest {
1011
@Schema(description = "수정할 대상이 될 공연 ID 입니다.")
12+
@NotEmpty
1113
private Long concertId;
1214

1315
@Schema(description = "공연 이름입니다.")
16+
@NotEmpty
1417
private String name;
1518

1619
@Schema(description = "공연 설명입니다.")
20+
@NotEmpty
1721
private String description;
1822

1923
@Schema(description = "공연장 ID 입니다.")
24+
@NotEmpty
2025
private Long placeId;
2126

2227
@Schema(description = "공연 시작 날짜입니다.")
28+
@NotEmpty
2329
private LocalDate StartDate;
2430

2531
@Schema(description = "공연 종료 날짜입니다.")
32+
@NotEmpty
2633
private LocalDate EndDate;
2734

2835
@Schema(description = "공연 포스터 URL 입니다.")
36+
@NotEmpty
2937
private String posterUrl;
3038

3139
@Schema(description = "공연 티켓 최고가입니다.")
40+
@NotEmpty
3241
private int maxPrice;
3342

3443
@Schema(description = "공연 티켓 최저가입니다.")
44+
@NotEmpty
3545
private int minPrice;
3646
}

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,6 @@ public interface TicketOfficeRepository extends JpaRepository<TicketOffice, Lon
2727
void deleteByConcertId(
2828
@Param("concertId")
2929
Long concertId);
30+
31+
List<TicketOffice> getTicketOfficesByConcert_ConcertId(Long concertConcertId);
3032
}

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

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,8 @@ public List<ConcertItem> getNoTicketTimeConcertsList(Pageable pageable) {
4848

4949
public List<ConcertItem> getConcertListByKeyword(String keyword, Pageable pageable) {
5050
if(keyword == null || keyword.isEmpty()){
51-
51+
throw new BusinessException(ConcertErrorCode.KEYWORD_IS_NULL);
5252
}
53-
5453
return concertRepository.getConcertItemsByKeyword(keyword, pageable);
5554
}
5655

@@ -81,8 +80,7 @@ public List<ConcertItem> getConcertsList2(Pageable pageable) {
8180
*/
8281

8382
public List<TicketOfficeElement> getTicketOfficesList(long concertId) {
84-
Concert concert = new Concert(concertId);
85-
List<TicketOffice> ticketOffices = ticketOfficeRepository.getTicketOfficesByConcert(concert);
83+
List<TicketOffice> ticketOffices = ticketOfficeRepository.getTicketOfficesByConcert_ConcertId(concertId);
8684
List<TicketOfficeElement> ticketOfficeList = new ArrayList<>();
8785
for (TicketOffice ticketOffice : ticketOffices) {
8886
ticketOfficeList.add(new TicketOfficeElement(ticketOffice));
@@ -92,7 +90,7 @@ public List<TicketOfficeElement> getTicketOfficesList(long concertId) {
9290
}
9391

9492
public ConcertLikeResponse isLikeConcert(Long concertId, User user) {
95-
Concert concert = concertRepository.getConcertByConcertId(concertId);
93+
Concert concert = findConcertByConcertId(concertId);
9694
ConcertLikeResponse concertLikeResponse;
9795
if(concertLikeRepository.existsConcertLikeByConcertAndUser(concert,user)){
9896
concertLikeResponse = new ConcertLikeResponse(concert,true);
@@ -105,7 +103,8 @@ public ConcertLikeResponse isLikeConcert(Long concertId, User user) {
105103

106104
@Transactional
107105
public void likeConcert(long concertId, User user) {
108-
Concert concert = concertRepository.findById(concertId).orElseThrow();
106+
Concert concert = findConcertByConcertId(concertId);
107+
109108
if(concertLikeRepository.existsConcertLikeByConcertAndUser(concert,user)){
110109
throw new BusinessException(ConcertErrorCode.LIKE_CONFLICT);
111110
}
@@ -116,7 +115,8 @@ public void likeConcert(long concertId, User user) {
116115

117116
@Transactional
118117
public void dislikeConcert(long concertId, User user) {
119-
Concert concert = concertRepository.findById(concertId).orElseThrow();
118+
Concert concert = findConcertByConcertId(concertId);
119+
120120
ConcertLike concertLike = concertLikeRepository.findConcertLikeByConcertAndUser(concert, user);
121121
if(concertLike == null){
122122
throw new BusinessException(ConcertErrorCode.NOT_FOUND_CONCERTLIKE);
@@ -126,23 +126,28 @@ public void dislikeConcert(long concertId, User user) {
126126
}
127127

128128
public ConcertItem updateConcert(long concertId, ConcertUpdateRequest concertUpdateRequest) {
129-
Concert concert = concertRepository.findById(concertId).orElseThrow();
129+
Concert concert = findConcertByConcertId(concertId);
130130
ConcertPlace concertPlace = concertPlaceRepository.findById(concertUpdateRequest.getPlaceId()).orElseThrow();
131131
concert.update(concertUpdateRequest, concertPlace);
132132
Concert updatedConcert = concertRepository.save(concert);
133133
return new ConcertItem(updatedConcert);
134134
}
135135

136136
public ConcertDetailResponse setConcertTime(ConcertTicketTimeSetRequest concertTicketTimeSetRequest) {
137-
Concert concert = concertRepository.findById(concertTicketTimeSetRequest.getConcertId()).orElseThrow();
137+
Concert concert = findConcertByConcertId(concertTicketTimeSetRequest.getConcertId());
138138
concert.ticketTimeSet(concertTicketTimeSetRequest.getTicketTime());
139139
Concert savedConcert = concertRepository.save(concert);
140140
return concertRepository.getConcertDetailById(savedConcert.getConcertId());
141141
}
142142

143143
public void deleteConcert(long concertId) {
144-
Concert concert = concertRepository.findById(concertId).orElseThrow();
145144
concertRepository.deleteById(concertId);
146145
}
147146

147+
private Concert findConcertByConcertId(long concertId) {
148+
return concertRepository.findById(concertId).orElseThrow(
149+
() -> new BusinessException(ConcertErrorCode.CONCERT_NOT_FOUND)
150+
);
151+
}
152+
148153
}

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
import java.time.LocalDate;
2222
import java.time.LocalDateTime;
23+
import java.time.LocalTime;
2324
import java.time.format.DateTimeFormatter;
2425
import java.util.ArrayList;
2526
import java.util.HashMap;
@@ -64,6 +65,7 @@ public KopisApiService(ConcertRepository concertRepository, ConcertPlaceReposito
6465
public SetResultResponse setConcertsList() throws InterruptedException {
6566
// 최초 시작 시간 저장
6667
LocalDateTime now = LocalDateTime.now();
68+
Long startNs = System.currentTimeMillis();
6769

6870
// 콘서트 목록 받아올 Response 객체 선언
6971
ConcertListResponse plr;
@@ -145,6 +147,9 @@ public SetResultResponse setConcertsList() throws InterruptedException {
145147
ConcertUpdateTime concertUpdateTime = new ConcertUpdateTime(now);
146148
concertUpdateTimeRepository.save(concertUpdateTime);
147149
log.info(now + "시 기준 " + totalConcertsList.size() + "개의 공연 데이터 저장 완료!");
150+
long endNs = System.currentTimeMillis();
151+
long durationSec = ((endNs - startNs) / 1000);
152+
log.info(durationSec/60 + "분, " + durationSec % 60 + "초 소요되었습니다." );
148153
return new SetResultResponse(addedConcerts,0,addedConcertPlaces,0,addedConcertImages,0,addedTicketOffices,0);
149154
}
150155

src/main/java/com/back/web7_9_codecrete_be/global/error/code/ConcertErrorCode.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,11 @@
88
@RequiredArgsConstructor
99
public enum ConcertErrorCode implements ErrorCode {
1010

11-
LIKE_CONFLICT(HttpStatus.CONFLICT,"C131","이미 좋아요를 누른 공연입니다."),
12-
NOT_FOUND_CONCERTLIKE(HttpStatus.NOT_FOUND,"C130","좋아요를 누르지 않은 공연입니다.")
11+
// C-10* 공연 탐색 관련
12+
CONCERT_NOT_FOUND(HttpStatus.NOT_FOUND,"C-101","공연을 찾을 수 없습니다."),
13+
KEYWORD_IS_NULL(HttpStatus.BAD_REQUEST,"C-102","검색 키워드를 입력해주세요."),
14+
LIKE_CONFLICT(HttpStatus.CONFLICT,"C-131","이미 좋아요를 누른 공연입니다."),
15+
NOT_FOUND_CONCERTLIKE(HttpStatus.NOT_FOUND,"C-130","좋아요를 누르지 않은 공연입니다.")
1316
;
1417

1518
private final HttpStatus status;

0 commit comments

Comments
 (0)