Skip to content

Commit 692d1b2

Browse files
feat: 공연 티켓팅 날짜 조회, 티켓팅 날짜 추가 기능, 티켓팅 날짜가 없는 공연만 조회하기 추가
1 parent 4672880 commit 692d1b2

9 files changed

Lines changed: 101 additions & 19 deletions

File tree

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

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,21 @@
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.concert.ConcertDetailResponse;
56
import com.back.web7_9_codecrete_be.domain.concerts.dto.concert.ConcertItem;
7+
import com.back.web7_9_codecrete_be.domain.concerts.dto.concert.ConcertTicketTimeSetRequest;
68
import com.back.web7_9_codecrete_be.domain.concerts.dto.concert.ConcertUpdateRequest;
79
import com.back.web7_9_codecrete_be.domain.concerts.service.ConcertService;
810
import com.back.web7_9_codecrete_be.domain.concerts.service.KopisApiService;
911
import com.back.web7_9_codecrete_be.global.rsData.RsData;
1012
import io.swagger.v3.oas.annotations.tags.Tag;
1113
import lombok.RequiredArgsConstructor;
14+
import org.springframework.data.domain.Pageable;
1215
import org.springframework.stereotype.Controller;
1316
import org.springframework.web.bind.annotation.*;
1417

18+
import java.util.List;
19+
1520
@RestController
1621
@RequiredArgsConstructor
1722
@RequestMapping("/api/v1/admin/concerts/")
@@ -20,16 +25,12 @@ public class ConcertAdminController { // todo : 인증 권한 추가하기
2025
private final ConcertService concertService;
2126
private final KopisApiService kopisApiService;
2227

23-
@GetMapping("tests")
24-
public ConcertListResponse tests() {
25-
return kopisApiService.getConcertsList();
26-
}
27-
2828
@GetMapping("totalGetTest")
2929
public ConcertListResponse totalGetTest() throws InterruptedException {
3030
return kopisApiService.setConcertsList();
3131
}
3232

33+
3334
@GetMapping("setConcertPlace")
3435
public ConcertPlaceListResponse setConcertPlace() throws InterruptedException {
3536
return kopisApiService.setConcertPlace();
@@ -44,9 +45,23 @@ public RsData<ConcertItem> updateConcert(
4445
return RsData.success("공연 정보 수정이 완료되었습니다.",concertItem);
4546
}
4647

48+
@GetMapping("noTicketTimeList")
49+
public List<ConcertItem> getNoTicketTimeConcertsList(
50+
Pageable pageable
51+
) {
52+
return concertService.getNoTicketTimeConcertsList(pageable);
53+
}
54+
4755
@DeleteMapping("deleteConcert/{concertId}")
4856
public RsData<Void> deleteConcert(@PathVariable Long concertId){
4957
concertService.deleteConcert(concertId);
5058
return RsData.success("공연 정보 삭제에 성공하였습니다.",null);
5159
}
60+
61+
@PatchMapping("ticketTimeSet")
62+
public RsData<ConcertDetailResponse> ticketTimeSet(
63+
@RequestBody ConcertTicketTimeSetRequest concertTicketTimeSetRequest
64+
){
65+
return RsData.success(concertService.setConcertTime(concertTicketTimeSetRequest));
66+
}
5267
}

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import lombok.Setter;
88

99
import java.time.LocalDate;
10+
import java.time.LocalDateTime;
1011
import java.util.List;
1112

1213
@Getter
@@ -25,6 +26,9 @@ public class ConcertDetailResponse {
2526
@Schema(description = "콘서트 장소 이름입니다.")
2627
private String placeName;
2728

29+
@Schema(description = "콘서트 예매 시작 날짜입니다.")
30+
private LocalDateTime ticketTime;
31+
2832
@Schema(description = "콘서트 시작 날짜입니다.",format = "yyyy-MM-dd")
2933
private LocalDate startDate;
3034

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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import lombok.Setter;
77

88
import java.time.LocalDate;
9+
import java.time.LocalDateTime;
910

1011
@Getter
1112
@Setter
@@ -20,6 +21,9 @@ public class ConcertItem {
2021
@Schema(description = "콘서트 장소 이름입니다.")
2122
private String placeName;
2223

24+
@Schema(description = "콘서트 예매 시작 날짜입니다.")
25+
private LocalDateTime ticketTime;
26+
2327
@Schema(description = "콘서트 시작 날짜입니다.",format = "yyyy-MM-dd")
2428
private LocalDate startDate ;
2529

@@ -45,6 +49,7 @@ public ConcertItem(Concert concert) {
4549
this.id = concert.getConcertId();
4650
this.name = concert.getName();
4751
this.placeName = concert.getConcertPlace().getPlaceName();
52+
this.ticketTime = concert.getTicketTime();
4853
this.startDate = concert.getStartDate();
4954
this.endDate =concert.getEndDate();
5055
this.posterUrl = concert.getPosterUrl();
@@ -54,10 +59,11 @@ public ConcertItem(Concert concert) {
5459
this.likeCount = concert.getLikeCount();
5560
}
5661

57-
public ConcertItem(long id, String name, String placeName, LocalDate startDate, LocalDate endDate, String posterUrl, int maxPrice, int minPrice, int viewCount, int likeCount) {
62+
public ConcertItem(long id, String name, String placeName,LocalDateTime ticketTime, LocalDate startDate, LocalDate endDate, String posterUrl, int maxPrice, int minPrice, int viewCount, int likeCount) {
5863
this.id = id;
5964
this.name = name;
6065
this.placeName = placeName;
66+
this.ticketTime = ticketTime;
6167
this.startDate = startDate;
6268
this.endDate = endDate;
6369
this.posterUrl = posterUrl;
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.dto.concert;
2+
3+
import lombok.Getter;
4+
5+
import java.time.LocalDateTime;
6+
7+
@Getter
8+
public class ConcertTicketTimeSetRequest {
9+
private Long concertId;
10+
private LocalDateTime ticketTime;
11+
}

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

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import jakarta.persistence.*;
55
import lombok.Getter;
66
import lombok.RequiredArgsConstructor;
7+
import org.hibernate.annotations.CreationTimestamp;
8+
import org.springframework.data.annotation.LastModifiedDate;
79

810
import java.time.LocalDate;
911
import java.time.LocalDateTime;
@@ -33,8 +35,8 @@ public class Concert {
3335
@Column(name = "end_date",nullable = false)
3436
private LocalDate endDate;
3537

36-
@Column(name = "ticket_time", nullable = false)
37-
private String ticketTime;
38+
@Column(name = "ticket_time", nullable = true)
39+
private LocalDateTime ticketTime;
3840

3941
@Column(name = "created_date", nullable = false)
4042
private LocalDateTime createdDate;
@@ -60,7 +62,7 @@ public class Concert {
6062

6163

6264

63-
public Concert(ConcertPlace concertPlace, String name, String content, LocalDate startDate, LocalDate endDate, String ticketTime, int maxPrice, int minPrice, String posterUrl,String apiConcertId) {
65+
public Concert(ConcertPlace concertPlace, String name, String content, LocalDate startDate, LocalDate endDate, LocalDateTime ticketTime, int maxPrice, int minPrice, String posterUrl,String apiConcertId) {
6466
this.concertPlace = concertPlace;
6567
this.name = name;
6668
this.content = content;
@@ -81,7 +83,7 @@ public Concert(Long concertId) {
8183
this.concertId = concertId;
8284
}
8385

84-
public Concert update(ConcertPlace concertPlace, String content, String ticketTime, int maxPrice, int minPrice){
86+
public Concert update(ConcertPlace concertPlace, String content, LocalDateTime ticketTime, int maxPrice, int minPrice){
8587
this.concertPlace = concertPlace;
8688
this.content = content;
8789
this.ticketTime = ticketTime;
@@ -105,4 +107,9 @@ public Concert update(ConcertUpdateRequest concertUpdateRequest,ConcertPlace con
105107
return this;
106108
}
107109

110+
public Concert ticketTimeSet(LocalDateTime ticketTime){
111+
this.ticketTime = ticketTime;
112+
return this;
113+
}
114+
108115
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public class ConcertLike {
2525
private User user;
2626

2727
@CreationTimestamp
28-
private LocalDateTime createdAt;
28+
private LocalDateTime createDate;
2929

3030
public ConcertLike(Concert concert, User user) {
3131
this.concert = concert;

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

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ public interface ConcertRepository extends JpaRepository<Concert, Long> {
2626
c.concertId as id,
2727
c.name as name,
2828
c.concertPlace.placeName as placeName,
29+
c.ticketTime as ticketTime,
2930
c.startDate as startDate,
3031
c.endDate as endDate,
3132
c.posterUrl as posterUrl,
@@ -45,6 +46,7 @@ public interface ConcertRepository extends JpaRepository<Concert, Long> {
4546
c.concertId as id,
4647
c.name as name,
4748
c.concertPlace.placeName as placeName,
49+
c.ticketTime as ticketTime,
4850
c.startDate as startDate,
4951
c.endDate as endDate,
5052
c.posterUrl as posterUrl,
@@ -66,12 +68,40 @@ List<ConcertItem> getUpComingConcertItems(
6668
@Param("fromDate") LocalDate fromDate
6769
);
6870

71+
@Query("""
72+
SELECT
73+
new com.back.web7_9_codecrete_be.domain.concerts.dto.concert.ConcertItem(
74+
c.concertId as id,
75+
c.name as name,
76+
c.concertPlace.placeName as placeName,
77+
c.ticketTime as ticketTime,
78+
c.startDate as startDate,
79+
c.endDate as endDate,
80+
c.posterUrl as posterUrl,
81+
c.maxPrice as maxPrice,
82+
c.minPrice as minPrice,
83+
c.viewCount as viewCount,
84+
c.likeCount as likeCount
85+
)
86+
FROM
87+
Concert c
88+
WHERE
89+
c.ticketTime IS NULL
90+
ORDER BY
91+
c.startDate
92+
DESC
93+
""")
94+
List<ConcertItem> getNoTicketTimeConcertList(
95+
Pageable pageable
96+
);
97+
6998
@Query("""
7099
SELECT
71100
new com.back.web7_9_codecrete_be.domain.concerts.dto.concert.ConcertItem(
72101
c.concertId as id,
73102
c.name as name,
74103
c.concertPlace.placeName as placeName,
104+
c.ticketTime as ticketTime,
75105
c.startDate as startDate,
76106
c.endDate as endDate,
77107
c.posterUrl as posterUrl,
@@ -88,7 +118,7 @@ List<ConcertItem> getUpComingConcertItems(
88118
AND
89119
cl.user.id = :userId
90120
ORDER BY
91-
cl.createdAt
121+
cl.createDate
92122
DESC
93123
"""
94124
)
@@ -102,6 +132,7 @@ List<ConcertItem> getLikedConcertsList(Pageable pageable,
102132
c.name as name,
103133
c.content as description,
104134
c.concertPlace.placeName as placeName,
135+
c.ticketTime as ticketTime,
105136
c.startDate as startDate,
106137
c.endDate as endDate,
107138
c.posterUrl as posterUrl,

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

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
package com.back.web7_9_codecrete_be.domain.concerts.service;
22

3-
import com.back.web7_9_codecrete_be.domain.concerts.dto.concert.ConcertDetailResponse;
4-
import com.back.web7_9_codecrete_be.domain.concerts.dto.concert.ConcertItem;
5-
import com.back.web7_9_codecrete_be.domain.concerts.dto.concert.ConcertLikeResponse;
6-
import com.back.web7_9_codecrete_be.domain.concerts.dto.concert.ConcertUpdateRequest;
3+
import com.back.web7_9_codecrete_be.domain.concerts.dto.concert.*;
74
import com.back.web7_9_codecrete_be.domain.concerts.dto.ticketOffice.TicketOfficeElement;
85
import com.back.web7_9_codecrete_be.domain.concerts.entity.*;
96
import com.back.web7_9_codecrete_be.domain.concerts.repository.*;
@@ -48,6 +45,10 @@ public List<ConcertItem> getLikedConcertsList(Pageable pageable,User user) {
4845
return concertRepository.getLikedConcertsList(pageable, user.getId());
4946
}
5047

48+
public List<ConcertItem> getNoTicketTimeConcertsList(Pageable pageable) {
49+
return concertRepository.getNoTicketTimeConcertList(pageable);
50+
}
51+
5152
public ConcertDetailResponse getConcertDetail(long concertId) {
5253
ConcertDetailResponse concertDetailResponse = concertRepository.getConcertDetailById(concertId);
5354
List<ConcertImage> concertImages = concertImageRepository.getConcertImagesByConcert_ConcertId(concertId);
@@ -120,6 +121,13 @@ public ConcertItem updateConcert(long concertId, ConcertUpdateRequest concertUpd
120121
return new ConcertItem(updatedConcert);
121122
}
122123

124+
public ConcertDetailResponse setConcertTime(ConcertTicketTimeSetRequest concertTicketTimeSetRequest) {
125+
Concert concert = concertRepository.findById(concertTicketTimeSetRequest.getConcertId()).orElseThrow();
126+
concert.ticketTimeSet(concertTicketTimeSetRequest.getTicketTime());
127+
Concert savedConcert = concertRepository.save(concert);
128+
return concertRepository.getConcertDetailById(savedConcert.getConcertId());
129+
}
130+
123131
public void deleteConcert(long concertId) {
124132
Concert concert = concertRepository.findById(concertId).orElseThrow();
125133
concertRepository.deleteById(concertId);

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ public ConcertListResponse setConcertsList() throws InterruptedException {
118118
concertDetail.getConcertDescription(),
119119
dateStringToDateTime(concertDetail.getStartDate()),
120120
dateStringToDateTime(concertDetail.getEndDate()),
121-
"",
121+
null,
122122
ticketPrice.maxPrice,
123123
ticketPrice.minPrice,
124124
concertDetail.getPosterUrl(),
@@ -207,7 +207,7 @@ public void updateConcertData() throws InterruptedException { // 1주일 단위
207207
concertDetail.getConcertDescription(),
208208
dateStringToDateTime(concertDetail.getStartDate()),
209209
dateStringToDateTime(concertDetail.getEndDate()),
210-
"",
210+
null,
211211
ticketPrice.maxPrice,
212212
ticketPrice.minPrice,
213213
concertDetail.getPosterUrl(),
@@ -217,7 +217,7 @@ public void updateConcertData() throws InterruptedException { // 1주일 단위
217217
concert = concert.update(
218218
concertPlace,
219219
concertDetail.getConcertDescription(),
220-
"",
220+
null,
221221
ticketPrice.maxPrice,
222222
ticketPrice.minPrice
223223
);

0 commit comments

Comments
 (0)