Skip to content

Commit 4e9a04b

Browse files
feat: 공연 정보 갱신 기능 리팩토링, 개별 공연 정보 갱신 기능 추가
1 parent 9fe97c0 commit 4e9a04b

8 files changed

Lines changed: 289 additions & 89 deletions

File tree

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

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.back.web7_9_codecrete_be.domain.concerts.dto.KopisApiDto.concert.ConcertListResponse;
44
import com.back.web7_9_codecrete_be.domain.concerts.dto.KopisApiDto.concertPlace.ConcertPlaceListResponse;
5+
import com.back.web7_9_codecrete_be.domain.concerts.dto.KopisApiDto.result.SetResultResponse;
56
import com.back.web7_9_codecrete_be.domain.concerts.dto.concert.ConcertDetailResponse;
67
import com.back.web7_9_codecrete_be.domain.concerts.dto.concert.ConcertItem;
78
import com.back.web7_9_codecrete_be.domain.concerts.dto.concert.ConcertTicketTimeSetRequest;
@@ -29,9 +30,9 @@ public class ConcertAdminController { // todo : 인증 권한 추가하기
2930

3031

3132
@Operation(summary = "초기 공연 정보 저장", description = "25년 12월부터 앞으로 6개월 이후까지의 전체 공연의 정보를 가져와서 저장합니다. 대략 10~12분 정도 시간이 소요됩니다.")
32-
@PostMapping("setConcertPlace")
33-
public ConcertPlaceListResponse setConcertPlace() throws InterruptedException {
34-
return kopisApiService.setConcertPlace();
33+
@PostMapping("setConcertData")
34+
public RsData<SetResultResponse> setConcert() throws InterruptedException {
35+
return RsData.success(kopisApiService.setConcertsList());
3536
}
3637

3738
@Operation(summary = "공연 정보 갱신",description = "공연 정보를 직접 갱신합니다.")
@@ -70,20 +71,19 @@ public RsData<ConcertDetailResponse> ticketTimeSet(
7071
return RsData.success(concertService.setConcertTime(concertTicketTimeSetRequest));
7172
}
7273

73-
// todo: 내용 구현 필요
74-
@Operation(summary = "개별 공연 API통한 갱신(구현 전)",description = "개별 공연에 대해서 공연 예술 통합망(Kopis)을 통해 데이터를 조회하고 해당 데이터를 갱신합니다.")
74+
@Operation(summary = "개별 공연 API통한 갱신",description = "개별 공연에 대해서 공연 예술 통합망(Kopis)을 통해 데이터를 조회하고 해당 데이터를 갱신합니다.")
7575
@PatchMapping("updateConcertByKopisAPI/{concertId}")
7676
public RsData<ConcertDetailResponse> updateConcertByKopisAPI(
7777
@Schema(description = "갱신 대상이 될 공연의 ID 값입니다.")
78-
@PathVariable Long ConcertId
78+
@PathVariable Long concertId
7979
){
80-
return null;
80+
kopisApiService.concertUpdateByKopisApi(concertId);
81+
return RsData.success(concertService.getConcertDetail(concertId));
8182
}
8283

83-
// todo: 내용 구현 필요, 결과 DTO 따로 만들기.
84-
@Operation(summary = "공연 목록 갱신(구현 전)", description = "전체 공연에 대해서 공연 예술 통합망(Kopis)을 통해 데이터를 조회하고, 바뀐 내용을 갱신하고 추가된 공연을 가져옵니다.")
85-
@PostMapping("updateConcert")
86-
public RsData<Void> updateConcert(){
87-
return null;
84+
@Operation(summary = "공연 목록 갱신", description = "전체 공연에 대해서 공연 예술 통합망(Kopis)을 통해 데이터를 조회하고, 바뀐 내용을 갱신하고 추가된 공연을 가져옵니다.")
85+
@PostMapping("updateConcertData")
86+
public RsData<SetResultResponse> updateConcert() throws InterruptedException {
87+
return RsData.success(kopisApiService.updateConcertData());
8888
}
8989
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package com.back.web7_9_codecrete_be.domain.concerts.dto.KopisApiDto.result;
2+
3+
import io.swagger.v3.oas.annotations.media.Schema;
4+
import lombok.Getter;
5+
6+
@Getter
7+
public class SetResultResponse {
8+
@Schema(description = "추가된 공연 수")
9+
private int addedConcerts;
10+
11+
@Schema(description = "갱신된 공연 수")
12+
private int updatedConcerts;
13+
14+
@Schema(description = "추가된 공연 장소 수")
15+
private int addedConcertPlaces;
16+
17+
@Schema(description = "갱신된 공연 장소 수")
18+
private int updatedConcertPlaces;
19+
20+
@Schema(description = "추가된 공연 이미지 수")
21+
private int addedConcertImages;
22+
23+
@Schema(description = "갱신된 공연 이미지 수")
24+
private int updatedConcertImages;
25+
26+
@Schema(description = "추가된 예매처 사이트 수")
27+
private int addedTicketOffice;
28+
29+
@Schema(description = "갱신된 예매처 사이트 수")
30+
private int updatedTicketOffice;
31+
32+
public SetResultResponse(int addedConcerts, int updatedConcerts, int addedConcertPlaces, int updatedConcertPlaces, int addedConcertImages, int updatedConcertImages, int addedTicketOffice, int updatedTicketOffice) {
33+
this.addedConcerts = addedConcerts;
34+
this.updatedConcerts = updatedConcerts;
35+
this.addedConcertPlaces = addedConcertPlaces;
36+
this.updatedConcertPlaces = updatedConcertPlaces;
37+
this.addedConcertImages = addedConcertImages;
38+
this.updatedConcertImages = updatedConcertImages;
39+
this.addedTicketOffice = addedTicketOffice;
40+
this.updatedTicketOffice = updatedTicketOffice;
41+
}
42+
}

src/main/java/com/back/web7_9_codecrete_be/domain/concerts/entity/Concert.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,13 +83,15 @@ public Concert(Long concertId) {
8383
this.concertId = concertId;
8484
}
8585

86-
public Concert update(ConcertPlace concertPlace, String content, LocalDateTime ticketTime, int maxPrice, int minPrice){
86+
public Concert updateByAPI(ConcertPlace concertPlace, String content,LocalDate startDate,LocalDate endDate, int maxPrice, int minPrice, String posterUrl) {
8787
this.concertPlace = concertPlace;
8888
this.content = content;
89-
this.ticketTime = ticketTime;
89+
this.startDate = startDate;
90+
this.endDate = endDate;
9091
this.modifiedDate = LocalDateTime.now();
9192
this.maxPrice = maxPrice;
9293
this.minPrice = minPrice;
94+
this.posterUrl = posterUrl;
9395
return this;
9496
}
9597

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package com.back.web7_9_codecrete_be.domain.concerts.entity;
2+
3+
import jakarta.persistence.Entity;
4+
import jakarta.persistence.GeneratedValue;
5+
import jakarta.persistence.GenerationType;
6+
import jakarta.persistence.Id;
7+
import lombok.Getter;
8+
import lombok.NoArgsConstructor;
9+
import lombok.RequiredArgsConstructor;
10+
11+
import java.time.LocalDateTime;
12+
13+
@Entity
14+
@Getter
15+
@RequiredArgsConstructor
16+
public class ConcertUpdateTime {
17+
@Id
18+
@GeneratedValue(strategy = GenerationType.IDENTITY)
19+
private Long id;
20+
21+
private LocalDateTime updateTime;
22+
23+
public ConcertUpdateTime(LocalDateTime updateTime) {
24+
this.updateTime = updateTime;
25+
}
26+
27+
public ConcertUpdateTime setUpdateTime(LocalDateTime updateTime) {
28+
this.updateTime = updateTime;
29+
return this;
30+
}
31+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,30 @@
11
package com.back.web7_9_codecrete_be.domain.concerts.repository;
22

3+
import com.back.web7_9_codecrete_be.domain.concerts.entity.Concert;
34
import com.back.web7_9_codecrete_be.domain.concerts.entity.ConcertImage;
45
import org.springframework.data.jpa.repository.JpaRepository;
6+
import org.springframework.data.jpa.repository.Modifying;
7+
import org.springframework.data.jpa.repository.Query;
8+
import org.springframework.data.repository.query.Param;
59
import org.springframework.stereotype.Repository;
610

711
import java.util.List;
812

913
@Repository
1014
public interface ConcertImageRepository extends JpaRepository<ConcertImage, Long> {
1115
List<ConcertImage> getConcertImagesByConcert_ConcertId(Long concertConcertId);
16+
17+
void deleteAllByConcert(Concert concert);
18+
19+
@Modifying
20+
@Query("""
21+
DELETE
22+
FROM
23+
ConcertImage ci
24+
WHERE
25+
ci.concert.concertId = :concertId
26+
""")
27+
void deleteByConcertId(
28+
@Param("concertId")
29+
Long concertId);
1230
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.back.web7_9_codecrete_be.domain.concerts.repository;
2+
3+
import com.back.web7_9_codecrete_be.domain.concerts.entity.ConcertUpdateTime;
4+
import org.springframework.data.jpa.repository.JpaRepository;
5+
import org.springframework.stereotype.Repository;
6+
7+
import java.time.LocalDate;
8+
9+
@Repository
10+
public interface ConcertUpdateTimeRepository extends JpaRepository<ConcertUpdateTime, Long> {
11+
}

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

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,28 @@
33
import com.back.web7_9_codecrete_be.domain.concerts.entity.Concert;
44
import com.back.web7_9_codecrete_be.domain.concerts.entity.TicketOffice;
55
import org.springframework.data.jpa.repository.JpaRepository;
6+
import org.springframework.data.jpa.repository.Modifying;
7+
import org.springframework.data.jpa.repository.Query;
8+
import org.springframework.data.repository.query.Param;
69
import org.springframework.stereotype.Repository;
710

811
import java.util.List;
912

1013
@Repository
1114
public interface TicketOfficeRepository extends JpaRepository<TicketOffice, Long> {
1215
List<TicketOffice> getTicketOfficesByConcert(Concert concert);
16+
17+
void deleteAllByConcert(Concert concert);
18+
19+
@Modifying
20+
@Query("""
21+
DELETE
22+
FROM
23+
TicketOffice t
24+
WHERE
25+
t.concert.concertId = :concertId
26+
""")
27+
void deleteByConcertId(
28+
@Param("concertId")
29+
Long concertId);
1330
}

0 commit comments

Comments
 (0)