Skip to content

Commit 31b3faf

Browse files
Merge pull request #77 from prgrms-web-devcourse-final-project/feat/#73
[Concert] 공연 이미지 저장 추가
2 parents beb3cab + 4672880 commit 31b3faf

6 files changed

Lines changed: 77 additions & 12 deletions

File tree

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828

2929
@RestController
3030
@RequestMapping("api/v1/concerts/")
31-
@Controller
3231
@RequiredArgsConstructor
3332
@Tag(name = "Concerts", description = "공연에 대한 정보를 제공하는 API 입니다.")
3433
public class ConcertController {

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,13 @@
44
import lombok.AllArgsConstructor;
55
import lombok.Getter;
66
import lombok.RequiredArgsConstructor;
7+
import lombok.Setter;
78

89
import java.time.LocalDate;
10+
import java.util.List;
911

1012
@Getter
13+
@Setter
1114
public class ConcertDetailResponse {
1215

1316
@Schema(description = "콘서트 Id입니다.")
@@ -43,4 +46,6 @@ public class ConcertDetailResponse {
4346
@Schema(description = "콘서트 좋아요수입니다.")
4447
private int likeCount;
4548

49+
@Schema(description = "콘서트 이미지 목록입니다.")
50+
private List<String> concertImageUrls;
4651
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package com.back.web7_9_codecrete_be.domain.concerts.entity;
2+
3+
import jakarta.persistence.*;
4+
import lombok.Getter;
5+
import lombok.NoArgsConstructor;
6+
7+
@Getter
8+
@Entity
9+
@NoArgsConstructor
10+
public class ConcertImage {
11+
@Id
12+
@GeneratedValue(strategy = GenerationType.IDENTITY)
13+
private long id;
14+
15+
@ManyToOne(fetch = FetchType.LAZY)
16+
private Concert concert;
17+
18+
@Column(name = "image_url")
19+
private String imageUrl;
20+
21+
public ConcertImage(Concert concert, String imageUrl) {
22+
this.concert = concert;
23+
this.imageUrl = imageUrl;
24+
}
25+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.back.web7_9_codecrete_be.domain.concerts.repository;
2+
3+
import com.back.web7_9_codecrete_be.domain.concerts.entity.ConcertImage;
4+
import org.springframework.data.jpa.repository.JpaRepository;
5+
import org.springframework.stereotype.Repository;
6+
7+
import java.util.List;
8+
9+
@Repository
10+
public interface ConcertImageRepository extends JpaRepository<ConcertImage, Long> {
11+
List<ConcertImage> getConcertImagesByConcert_ConcertId(Long concertConcertId);
12+
}

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

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,8 @@
55
import com.back.web7_9_codecrete_be.domain.concerts.dto.concert.ConcertLikeResponse;
66
import com.back.web7_9_codecrete_be.domain.concerts.dto.concert.ConcertUpdateRequest;
77
import com.back.web7_9_codecrete_be.domain.concerts.dto.ticketOffice.TicketOfficeElement;
8-
import com.back.web7_9_codecrete_be.domain.concerts.entity.Concert;
9-
import com.back.web7_9_codecrete_be.domain.concerts.entity.ConcertLike;
10-
import com.back.web7_9_codecrete_be.domain.concerts.entity.ConcertPlace;
11-
import com.back.web7_9_codecrete_be.domain.concerts.entity.TicketOffice;
12-
import com.back.web7_9_codecrete_be.domain.concerts.repository.ConcertLikeRepository;
13-
import com.back.web7_9_codecrete_be.domain.concerts.repository.ConcertPlaceRepository;
14-
import com.back.web7_9_codecrete_be.domain.concerts.repository.ConcertRepository;
15-
import com.back.web7_9_codecrete_be.domain.concerts.repository.TicketOfficeRepository;
8+
import com.back.web7_9_codecrete_be.domain.concerts.entity.*;
9+
import com.back.web7_9_codecrete_be.domain.concerts.repository.*;
1610
import com.back.web7_9_codecrete_be.domain.users.entity.User;
1711
import com.back.web7_9_codecrete_be.domain.users.repository.UserRepository;
1812
import com.back.web7_9_codecrete_be.global.error.code.AuthErrorCode;
@@ -39,7 +33,8 @@ public class ConcertService {
3933

4034
private final TicketOfficeRepository ticketOfficeRepository;
4135

42-
private final JsoupApiService jsoupApiService;
36+
private final ConcertImageRepository concertImageRepository;
37+
4338

4439
public List<ConcertItem> getConcertsList(Pageable pageable) {
4540
return concertRepository.getConcertItems(pageable);
@@ -54,7 +49,14 @@ public List<ConcertItem> getLikedConcertsList(Pageable pageable,User user) {
5449
}
5550

5651
public ConcertDetailResponse getConcertDetail(long concertId) {
57-
return concertRepository.getConcertDetailById(concertId);
52+
ConcertDetailResponse concertDetailResponse = concertRepository.getConcertDetailById(concertId);
53+
List<ConcertImage> concertImages = concertImageRepository.getConcertImagesByConcert_ConcertId(concertId);
54+
List<String> concertImageUrls = new ArrayList<>();
55+
for(ConcertImage concertImage : concertImages){
56+
concertImageUrls.add(concertImage.getImageUrl());
57+
}
58+
concertDetailResponse.setConcertImageUrls(concertImageUrls);
59+
return concertDetailResponse;
5860
}
5961

6062
// N+1 문제 발생해서 버림

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

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,10 @@
66
import com.back.web7_9_codecrete_be.domain.concerts.dto.KopisApiDto.concertPlace.ConcertPlaceListElement;
77
import com.back.web7_9_codecrete_be.domain.concerts.dto.KopisApiDto.concertPlace.ConcertPlaceListResponse;
88
import com.back.web7_9_codecrete_be.domain.concerts.entity.Concert;
9+
import com.back.web7_9_codecrete_be.domain.concerts.entity.ConcertImage;
910
import com.back.web7_9_codecrete_be.domain.concerts.entity.ConcertPlace;
1011
import com.back.web7_9_codecrete_be.domain.concerts.entity.TicketOffice;
12+
import com.back.web7_9_codecrete_be.domain.concerts.repository.ConcertImageRepository;
1113
import com.back.web7_9_codecrete_be.domain.concerts.repository.ConcertPlaceRepository;
1214
import com.back.web7_9_codecrete_be.domain.concerts.repository.ConcertRepository;
1315
import com.back.web7_9_codecrete_be.domain.concerts.repository.TicketOfficeRepository;
@@ -38,17 +40,20 @@ public class KopisApiService {
3840

3941
private final TicketOfficeRepository ticketOfficeRepository;
4042

43+
private final ConcertImageRepository imageRepository;
44+
4145
@Value("${kopis.api-key}")
4246
private String serviceKey;
4347
private LocalDate sdate = LocalDate.of(2025, 12, 1);
4448
private LocalDate edate = LocalDate.now().plusMonths(6);
4549

4650
private final RestClient restClient;
4751

48-
public KopisApiService(ConcertRepository concertRepository, ConcertPlaceRepository placeRepository, TicketOfficeRepository ticketOfficeRepository) {
52+
public KopisApiService(ConcertRepository concertRepository, ConcertPlaceRepository placeRepository, TicketOfficeRepository ticketOfficeRepository,ConcertImageRepository imageRepository) {
4953
this.concertRepository = concertRepository;
5054
this.placeRepository = placeRepository;
5155
this.ticketOfficeRepository = ticketOfficeRepository;
56+
this.imageRepository = imageRepository;
5257
this.restClient = RestClient.builder()
5358
.baseUrl("https://kopis.or.kr/openApi/restful")
5459
.defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_XML_VALUE)
@@ -132,6 +137,15 @@ public ConcertListResponse setConcertsList() throws InterruptedException {
132137
);
133138
ticketOfficeRepository.save(to);
134139
}
140+
141+
List<ConcertImage> concertImages = new ArrayList<>();
142+
for(String imageUrl : concertDetail.getConcertImageUrls()){
143+
ConcertImage concertImage = new ConcertImage(savedConcert, imageUrl);
144+
concertImages.add(concertImage);
145+
}
146+
147+
imageRepository.saveAll(concertImages);
148+
135149
log.info("Concert saved: " + savedConcert);
136150
Thread.sleep(300);
137151
}
@@ -221,6 +235,14 @@ public void updateConcertData() throws InterruptedException { // 1주일 단위
221235
);
222236
ticketOfficeRepository.save(to);
223237
}
238+
239+
List<ConcertImage> concertImages = new ArrayList<>();
240+
for(String imageUrl : concertDetail.getConcertImageUrls()){
241+
ConcertImage concertImage = new ConcertImage(savedConcert, imageUrl);
242+
concertImages.add(concertImage);
243+
}
244+
imageRepository.saveAll(concertImages);
245+
224246
log.info("Concert saved: " + savedConcert);
225247

226248
Thread.sleep(300);

0 commit comments

Comments
 (0)