Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@

@RestController
@RequestMapping("api/v1/concerts/")
@Controller
@RequiredArgsConstructor
@Tag(name = "Concerts", description = "공연에 대한 정보를 제공하는 API 입니다.")
public class ConcertController {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,13 @@
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.Setter;

import java.time.LocalDate;
import java.util.List;

@Getter
@Setter
public class ConcertDetailResponse {

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

@Schema(description = "콘서트 이미지 목록입니다.")
private List<String> concertImageUrls;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.back.web7_9_codecrete_be.domain.concerts.entity;

import jakarta.persistence.*;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@Entity
@NoArgsConstructor
public class ConcertImage {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;

@ManyToOne(fetch = FetchType.LAZY)
private Concert concert;

@Column(name = "image_url")
private String imageUrl;

public ConcertImage(Concert concert, String imageUrl) {
this.concert = concert;
this.imageUrl = imageUrl;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.back.web7_9_codecrete_be.domain.concerts.repository;

import com.back.web7_9_codecrete_be.domain.concerts.entity.ConcertImage;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface ConcertImageRepository extends JpaRepository<ConcertImage, Long> {
List<ConcertImage> getConcertImagesByConcert_ConcertId(Long concertConcertId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,8 @@
import com.back.web7_9_codecrete_be.domain.concerts.dto.concert.ConcertLikeResponse;
import com.back.web7_9_codecrete_be.domain.concerts.dto.concert.ConcertUpdateRequest;
import com.back.web7_9_codecrete_be.domain.concerts.dto.ticketOffice.TicketOfficeElement;
import com.back.web7_9_codecrete_be.domain.concerts.entity.Concert;
import com.back.web7_9_codecrete_be.domain.concerts.entity.ConcertLike;
import com.back.web7_9_codecrete_be.domain.concerts.entity.ConcertPlace;
import com.back.web7_9_codecrete_be.domain.concerts.entity.TicketOffice;
import com.back.web7_9_codecrete_be.domain.concerts.repository.ConcertLikeRepository;
import com.back.web7_9_codecrete_be.domain.concerts.repository.ConcertPlaceRepository;
import com.back.web7_9_codecrete_be.domain.concerts.repository.ConcertRepository;
import com.back.web7_9_codecrete_be.domain.concerts.repository.TicketOfficeRepository;
import com.back.web7_9_codecrete_be.domain.concerts.entity.*;
import com.back.web7_9_codecrete_be.domain.concerts.repository.*;
import com.back.web7_9_codecrete_be.domain.users.entity.User;
import com.back.web7_9_codecrete_be.domain.users.repository.UserRepository;
import com.back.web7_9_codecrete_be.global.error.code.AuthErrorCode;
Expand All @@ -39,7 +33,8 @@ public class ConcertService {

private final TicketOfficeRepository ticketOfficeRepository;

private final JsoupApiService jsoupApiService;
private final ConcertImageRepository concertImageRepository;


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

public ConcertDetailResponse getConcertDetail(long concertId) {
return concertRepository.getConcertDetailById(concertId);
ConcertDetailResponse concertDetailResponse = concertRepository.getConcertDetailById(concertId);
List<ConcertImage> concertImages = concertImageRepository.getConcertImagesByConcert_ConcertId(concertId);
List<String> concertImageUrls = new ArrayList<>();
for(ConcertImage concertImage : concertImages){
concertImageUrls.add(concertImage.getImageUrl());
}
concertDetailResponse.setConcertImageUrls(concertImageUrls);
return concertDetailResponse;
}

// N+1 문제 발생해서 버림
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@
import com.back.web7_9_codecrete_be.domain.concerts.dto.KopisApiDto.concertPlace.ConcertPlaceListElement;
import com.back.web7_9_codecrete_be.domain.concerts.dto.KopisApiDto.concertPlace.ConcertPlaceListResponse;
import com.back.web7_9_codecrete_be.domain.concerts.entity.Concert;
import com.back.web7_9_codecrete_be.domain.concerts.entity.ConcertImage;
import com.back.web7_9_codecrete_be.domain.concerts.entity.ConcertPlace;
import com.back.web7_9_codecrete_be.domain.concerts.entity.TicketOffice;
import com.back.web7_9_codecrete_be.domain.concerts.repository.ConcertImageRepository;
import com.back.web7_9_codecrete_be.domain.concerts.repository.ConcertPlaceRepository;
import com.back.web7_9_codecrete_be.domain.concerts.repository.ConcertRepository;
import com.back.web7_9_codecrete_be.domain.concerts.repository.TicketOfficeRepository;
Expand Down Expand Up @@ -38,17 +40,20 @@ public class KopisApiService {

private final TicketOfficeRepository ticketOfficeRepository;

private final ConcertImageRepository imageRepository;

@Value("${kopis.api-key}")
private String serviceKey;
private LocalDate sdate = LocalDate.of(2025, 12, 1);
private LocalDate edate = LocalDate.now().plusMonths(6);

private final RestClient restClient;

public KopisApiService(ConcertRepository concertRepository, ConcertPlaceRepository placeRepository, TicketOfficeRepository ticketOfficeRepository) {
public KopisApiService(ConcertRepository concertRepository, ConcertPlaceRepository placeRepository, TicketOfficeRepository ticketOfficeRepository,ConcertImageRepository imageRepository) {
this.concertRepository = concertRepository;
this.placeRepository = placeRepository;
this.ticketOfficeRepository = ticketOfficeRepository;
this.imageRepository = imageRepository;
this.restClient = RestClient.builder()
.baseUrl("https://kopis.or.kr/openApi/restful")
.defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_XML_VALUE)
Expand Down Expand Up @@ -132,6 +137,15 @@ public ConcertListResponse setConcertsList() throws InterruptedException {
);
ticketOfficeRepository.save(to);
}

List<ConcertImage> concertImages = new ArrayList<>();
for(String imageUrl : concertDetail.getConcertImageUrls()){
ConcertImage concertImage = new ConcertImage(savedConcert, imageUrl);
concertImages.add(concertImage);
}

imageRepository.saveAll(concertImages);

log.info("Concert saved: " + savedConcert);
Thread.sleep(300);
}
Expand Down Expand Up @@ -221,6 +235,14 @@ public void updateConcertData() throws InterruptedException { // 1주일 단위
);
ticketOfficeRepository.save(to);
}

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

중복되는 코드는 하나의 함수로 선언해서 사용해도 괜찮지 않을까용...??

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

아 귀찮아서 복붙했는데 이렇게 들키네요 ㅋㅋㅋ 리팩토링때 수정할 생각입니다! 감사합니다.

List<ConcertImage> concertImages = new ArrayList<>();
for(String imageUrl : concertDetail.getConcertImageUrls()){
ConcertImage concertImage = new ConcertImage(savedConcert, imageUrl);
concertImages.add(concertImage);
}
imageRepository.saveAll(concertImages);

log.info("Concert saved: " + savedConcert);

Thread.sleep(300);
Expand Down