diff --git a/app/api/common-api/src/main/java/org/example/config/SecurityConfig.java b/app/api/common-api/src/main/java/org/example/config/SecurityConfig.java index f3e98e93..8d56d0de 100644 --- a/app/api/common-api/src/main/java/org/example/config/SecurityConfig.java +++ b/app/api/common-api/src/main/java/org/example/config/SecurityConfig.java @@ -92,9 +92,11 @@ private RequestMatcher getMatcherForUserAndAdmin() { antMatcher(HttpMethod.POST, "/api/v1/genres/subscribe"), antMatcher(HttpMethod.POST, "/api/v1/genres/unsubscribe"), antMatcher(HttpMethod.GET, "/api/v1/genres/subscriptions"), + antMatcher(HttpMethod.GET, "/api/v1/genres/unsubscriptions"), antMatcher(HttpMethod.POST, "/api/v1/artists/subscribe"), antMatcher(HttpMethod.POST, "/api/v1/artists/unsubscribe"), - antMatcher(HttpMethod.GET, "/api/v1/artists/subscriptions") + antMatcher(HttpMethod.GET, "/api/v1/artists/subscriptions"), + antMatcher(HttpMethod.GET, "/api/v1/artists/unsubscriptions") ); } } diff --git a/app/api/show-api/src/main/java/com/example/artist/controller/ArtistAdminController.java b/app/api/show-api/src/main/java/com/example/artist/controller/ArtistAdminController.java index bcad3b4d..91ea1c76 100644 --- a/app/api/show-api/src/main/java/com/example/artist/controller/ArtistAdminController.java +++ b/app/api/show-api/src/main/java/com/example/artist/controller/ArtistAdminController.java @@ -5,7 +5,7 @@ import com.example.artist.controller.dto.response.ArtistDetailApiFormResponse; import com.example.artist.service.ArtistAdminService; import com.example.artist.service.dto.response.ArtistDetailServiceResponse; -import com.example.genre.controller.dto.response.GenreNameApiFormResponse; +import com.example.genre.controller.dto.response.GenreNameApiResponse; import com.example.genre.service.GenreAdminService; import jakarta.validation.Valid; import java.util.List; @@ -30,8 +30,8 @@ public class ArtistAdminController { @GetMapping public String createArtist(Model model) { - List genres = genreAdminService.findAllGenres().stream() - .map(GenreNameApiFormResponse::new) + List genres = genreAdminService.findAllGenres().stream() + .map(GenreNameApiResponse::new) .toList(); model.addAttribute("genres", genres); return "artist_create_form"; @@ -56,8 +56,8 @@ public String findAllArtist(Model model) { @GetMapping("/{id}") public String findArtist(@PathVariable("id") UUID id, Model model) { - List genres = genreAdminService.findAllGenres().stream() - .map(GenreNameApiFormResponse::new) + List genres = genreAdminService.findAllGenres().stream() + .map(GenreNameApiResponse::new) .toList(); model.addAttribute("genres", genres); diff --git a/app/api/show-api/src/main/java/com/example/artist/controller/ArtistController.java b/app/api/show-api/src/main/java/com/example/artist/controller/ArtistController.java index faa415ed..176673a4 100644 --- a/app/api/show-api/src/main/java/com/example/artist/controller/ArtistController.java +++ b/app/api/show-api/src/main/java/com/example/artist/controller/ArtistController.java @@ -36,7 +36,7 @@ public class ArtistController { private final ArtistService artistService; - @GetMapping + @GetMapping("/unsubscriptions") @Operation(summary = "구독하지 않은 아티스트 목록 조회") public ResponseEntity> getUnsubscribedArtists( @AuthenticationPrincipal AuthenticatedUser user, diff --git a/app/api/show-api/src/main/java/com/example/artist/controller/dto/response/ArtistKoreanNameApiResponse.java b/app/api/show-api/src/main/java/com/example/artist/controller/dto/response/ArtistKoreanNameApiResponse.java index 9571a34f..ceb44aaf 100644 --- a/app/api/show-api/src/main/java/com/example/artist/controller/dto/response/ArtistKoreanNameApiResponse.java +++ b/app/api/show-api/src/main/java/com/example/artist/controller/dto/response/ArtistKoreanNameApiResponse.java @@ -9,7 +9,8 @@ public record ArtistKoreanNameApiResponse( ) { public ArtistKoreanNameApiResponse( - ArtistKoreanNameServiceResponse artistKoreanNameServiceResponse) { + ArtistKoreanNameServiceResponse artistKoreanNameServiceResponse + ) { this( artistKoreanNameServiceResponse.id(), artistKoreanNameServiceResponse.koreanName() diff --git a/app/api/show-api/src/main/java/com/example/genre/controller/GenreAdminController.java b/app/api/show-api/src/main/java/com/example/genre/controller/GenreAdminController.java index 9043d26a..6530f55a 100644 --- a/app/api/show-api/src/main/java/com/example/genre/controller/GenreAdminController.java +++ b/app/api/show-api/src/main/java/com/example/genre/controller/GenreAdminController.java @@ -2,7 +2,7 @@ import com.example.genre.controller.dto.request.GenreCreateApiForm; import com.example.genre.controller.dto.request.GenreUpdateApiForm; -import com.example.genre.controller.dto.response.GenreNameApiFormResponse; +import com.example.genre.controller.dto.response.GenreNameApiResponse; import com.example.genre.service.GenreAdminService; import com.example.genre.service.dto.response.GenreNameServiceResponse; import jakarta.validation.Valid; @@ -38,8 +38,8 @@ public String createGenre(@Valid GenreCreateApiForm genreCreateApiForm) { @GetMapping("/list") public String findAllGenres(Model model) { - List genreNameApiFormResponses = genreAdminService.findAllGenres().stream() - .map(response -> new GenreNameApiFormResponse(response.id(), response.name())) + List genreNameApiFormResponses = genreAdminService.findAllGenres().stream() + .map(response -> new GenreNameApiResponse(response.id(), response.name())) .toList(); model.addAttribute("genres", genreNameApiFormResponses); @@ -50,7 +50,7 @@ public String findAllGenres(Model model) { public String findGenre(@PathVariable("id") UUID id, Model model) { GenreNameServiceResponse genreNameServiceResponse = genreAdminService.findGenreById( id); - GenreNameApiFormResponse genreNameApiFormResponse = new GenreNameApiFormResponse( + GenreNameApiResponse genreNameApiFormResponse = new GenreNameApiResponse( genreNameServiceResponse.id(), genreNameServiceResponse.name() ); diff --git a/app/api/show-api/src/main/java/com/example/genre/controller/GenreController.java b/app/api/show-api/src/main/java/com/example/genre/controller/GenreController.java index ef33506d..0610fdd3 100644 --- a/app/api/show-api/src/main/java/com/example/genre/controller/GenreController.java +++ b/app/api/show-api/src/main/java/com/example/genre/controller/GenreController.java @@ -32,7 +32,7 @@ public class GenreController { private final GenreService genreService; - @GetMapping + @GetMapping("/unsubscriptions") @Operation(summary = "구독하지 않은 장르 목록 조회") public ResponseEntity> getUnsubscribedGenres( @AuthenticationPrincipal AuthenticatedUser user, diff --git a/app/api/show-api/src/main/java/com/example/genre/controller/dto/response/GenreNameApiFormResponse.java b/app/api/show-api/src/main/java/com/example/genre/controller/dto/response/GenreNameApiResponse.java similarity index 70% rename from app/api/show-api/src/main/java/com/example/genre/controller/dto/response/GenreNameApiFormResponse.java rename to app/api/show-api/src/main/java/com/example/genre/controller/dto/response/GenreNameApiResponse.java index dd16cb2a..9e24c5cd 100644 --- a/app/api/show-api/src/main/java/com/example/genre/controller/dto/response/GenreNameApiFormResponse.java +++ b/app/api/show-api/src/main/java/com/example/genre/controller/dto/response/GenreNameApiResponse.java @@ -3,12 +3,12 @@ import com.example.genre.service.dto.response.GenreNameServiceResponse; import java.util.UUID; -public record GenreNameApiFormResponse( +public record GenreNameApiResponse( UUID id, String name ) { - public GenreNameApiFormResponse(GenreNameServiceResponse genreNameServiceResponse) { + public GenreNameApiResponse(GenreNameServiceResponse genreNameServiceResponse) { this ( genreNameServiceResponse.id(), genreNameServiceResponse.name() diff --git a/app/api/show-api/src/main/java/com/example/show/controller/ShowAdminController.java b/app/api/show-api/src/main/java/com/example/show/controller/ShowAdminController.java index a27620a9..76b57c61 100644 --- a/app/api/show-api/src/main/java/com/example/show/controller/ShowAdminController.java +++ b/app/api/show-api/src/main/java/com/example/show/controller/ShowAdminController.java @@ -2,7 +2,7 @@ import com.example.artist.controller.dto.response.ArtistKoreanNameApiResponse; import com.example.artist.service.ArtistAdminService; -import com.example.genre.controller.dto.response.GenreNameApiFormResponse; +import com.example.genre.controller.dto.response.GenreNameApiResponse; import com.example.genre.service.GenreAdminService; import com.example.show.controller.dto.request.ShowCreateApiForm; import com.example.show.controller.dto.request.ShowUpdateApiForm; @@ -38,9 +38,9 @@ public String createShow(Model model) { .map(ArtistKoreanNameApiResponse::new) .toList(); - List genres = genreAdminService.findAllGenres() + List genres = genreAdminService.findAllGenres() .stream() - .map(GenreNameApiFormResponse::new) + .map(GenreNameApiResponse::new) .toList(); model.addAttribute("artists", artists); @@ -72,9 +72,9 @@ public String findShow(@PathVariable("id") UUID id, Model model) { .map(ArtistKoreanNameApiResponse::new) .toList(); - List genres = genreAdminService.findAllGenres() + List genres = genreAdminService.findAllGenres() .stream() - .map(GenreNameApiFormResponse::new) + .map(GenreNameApiResponse::new) .toList(); ShowInfoServiceResponse showInfoServiceResponse = showAdminService.findShowInfo(id); diff --git a/app/api/show-api/src/main/java/com/example/show/controller/dto/param/ShowTicketingSiteApiParam.java b/app/api/show-api/src/main/java/com/example/show/controller/dto/param/ShowTicketingSiteApiParam.java deleted file mode 100644 index c4fbb544..00000000 --- a/app/api/show-api/src/main/java/com/example/show/controller/dto/param/ShowTicketingSiteApiParam.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.example.show.controller.dto.param; - -import com.example.show.service.dto.param.ShowTicketingSiteServiceParam; -import lombok.Builder; - -@Builder -public record ShowTicketingSiteApiParam( - String siteName, - String siteURL -) { - - public static ShowTicketingSiteApiParam from(ShowTicketingSiteServiceParam param) { - return ShowTicketingSiteApiParam.builder() - .siteName(param.siteName()) - .siteURL(param.siteURL()) - .build(); - } -} diff --git a/app/api/show-api/src/main/java/com/example/show/controller/dto/request/ShowCreateApiForm.java b/app/api/show-api/src/main/java/com/example/show/controller/dto/request/ShowCreateApiForm.java index f52891e9..d4a44a13 100644 --- a/app/api/show-api/src/main/java/com/example/show/controller/dto/request/ShowCreateApiForm.java +++ b/app/api/show-api/src/main/java/com/example/show/controller/dto/request/ShowCreateApiForm.java @@ -5,6 +5,7 @@ import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; import java.time.LocalDate; +import java.time.LocalDateTime; import java.util.List; import java.util.Map; import java.util.UUID; @@ -36,7 +37,7 @@ public record ShowCreateApiForm( List ticketingTypes, @NotNull(message = "공연 티켓팅 종류는 필수 요청값 입니다.") - List ticketingDates, + List ticketingDates, @NotNull(message = "티켓팅 예약 사이트명은 필수 요청값 입니다.") List ticketBookingSites, @@ -85,7 +86,7 @@ private Map getTicketingSitesApiResponse() { .collect(Collectors.toMap(ticketBookingSites::get, ticketingSiteURL::get)); } - private Map getTicketingDatesApiResponse() { + private Map getTicketingDatesApiResponse() { return IntStream.range(0, ticketingTypes.size()) .boxed() .collect(Collectors.toMap(ticketingTypes::get, ticketingDates::get)); diff --git a/app/api/show-api/src/main/java/com/example/show/controller/dto/request/ShowUpdateApiForm.java b/app/api/show-api/src/main/java/com/example/show/controller/dto/request/ShowUpdateApiForm.java index 4cfe4f14..a48f13d5 100644 --- a/app/api/show-api/src/main/java/com/example/show/controller/dto/request/ShowUpdateApiForm.java +++ b/app/api/show-api/src/main/java/com/example/show/controller/dto/request/ShowUpdateApiForm.java @@ -1,6 +1,6 @@ package com.example.show.controller.dto.request; -import com.example.show.controller.dto.response.SeatInfoApiResponse; +import com.example.show.controller.vo.TicketingApiType; import com.example.show.service.dto.request.ShowUpdateServiceRequest; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; @@ -33,14 +33,11 @@ public record ShowUpdateApiForm( @NotNull(message = "공연 포스터는 필수 요청값 입니다.") MultipartFile post, - @NotNull(message = "공연 좌석 타입은 필수 요청값 입니다.") - List seatTypes, + @NotNull(message = "공연 티켓팅 종류는 필수 요청값 입니다.") + List ticketingTypes, - @NotNull(message = "공연 좌석별 가격은 필수 요청값 입니다.") - List pricesPerSeatType, - - @NotNull(message = "공연 티켓 오픈 시간은 필수 요청값 입니다.") - LocalDateTime ticketOpenTime, + @NotNull(message = "공연 티켓팅 종류는 필수 요청값 입니다.") + List ticketingDates, @NotNull(message = "티켓팅 예약 사이트명은 필수 요청값 입니다.") List ticketBookingSites, @@ -48,6 +45,12 @@ public record ShowUpdateApiForm( @NotNull(message = "티켓팅 예약 사이트 URL는 필수 요청값 입니다.") List ticketingSiteURL, + @NotNull(message = "공연 좌석 타입은 필수 요청값 입니다.") + List seatTypes, + + @NotNull(message = "공연 좌석별 가격은 필수 요청값 입니다.") + List pricesPerSeatType, + @NotNull(message = "아티스트 ID는 필수 요청값 입니다.") List artistIds, @@ -63,23 +66,29 @@ public ShowUpdateServiceRequest toServiceRequest() { .endDate(endDate) .location(location) .post(post) - .seatInfoApiResponse(getSeatInfoApiResponse()) - .showTicketingSiteInfos(getTicketingInfoApiResponse()) + .priceInformation(getPriceInformation()) + .showTicketingSites(getTicketingSitesApiResponse()) + .ticketingTimes(getTicketingDatesApiResponse()) .artistIds(artistIds) .genreIds(genreIds) .build(); } - private SeatInfoApiResponse getSeatInfoApiResponse() { - Map priceInformation = IntStream.range(0, seatTypes.size()) + private Map getPriceInformation() { + return IntStream.range(0, seatTypes.size()) .boxed() .collect(Collectors.toMap(seatTypes::get, pricesPerSeatType::get)); - return new SeatInfoApiResponse(priceInformation); } - private Map getTicketingInfoApiResponse() { + private Map getTicketingSitesApiResponse() { return IntStream.range(0, ticketBookingSites.size()) .boxed() .collect(Collectors.toMap(ticketBookingSites::get, ticketingSiteURL::get)); } + + private Map getTicketingDatesApiResponse() { + return IntStream.range(0, ticketingTypes.size()) + .boxed() + .collect(Collectors.toMap(ticketingTypes::get, ticketingDates::get)); + } } diff --git a/app/api/show-api/src/main/java/com/example/show/controller/dto/response/SeatInfoApiResponse.java b/app/api/show-api/src/main/java/com/example/show/controller/dto/response/SeatInfoApiResponse.java deleted file mode 100644 index 86b81f5c..00000000 --- a/app/api/show-api/src/main/java/com/example/show/controller/dto/response/SeatInfoApiResponse.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.example.show.controller.dto.response; - -import java.util.Map; -import org.example.entity.show.info.SeatPrices; - -public record SeatInfoApiResponse( - Map priceInformation -) { - - public static SeatInfoApiResponse from(SeatPrices seatPrices) { - return new SeatInfoApiResponse(seatPrices.getPriceBySeat()); - } -} diff --git a/app/api/show-api/src/main/java/com/example/show/controller/dto/response/ShowDetailApiResponse.java b/app/api/show-api/src/main/java/com/example/show/controller/dto/response/ShowDetailApiResponse.java index b6fdd6da..f8f92213 100644 --- a/app/api/show-api/src/main/java/com/example/show/controller/dto/response/ShowDetailApiResponse.java +++ b/app/api/show-api/src/main/java/com/example/show/controller/dto/response/ShowDetailApiResponse.java @@ -1,6 +1,5 @@ package com.example.show.controller.dto.response; -import com.example.show.controller.dto.param.ShowTicketingSiteApiParam; import com.example.show.service.dto.response.ShowDetailServiceResponse; import io.swagger.v3.oas.annotations.media.Schema; import java.util.List; @@ -31,11 +30,14 @@ public record ShowDetailApiResponse( @Schema(description = "장르 정보") List genres, + @Schema(description = "티켓팅 예매 시간 정보") + List ticketingTimes, + @Schema(description = "좌석 정보") ShowSeatApiResponse seats, @Schema(description = "티켓팅 정보 및 공연 날짜") - List ticketingSites + ShowTicketingSiteApiResponse ticketingSites ) { public static ShowDetailApiResponse from(ShowDetailServiceResponse show) { @@ -55,12 +57,13 @@ public static ShowDetailApiResponse from(ShowDetailServiceResponse show) { .map(ShowGenreApiResponse::from) .toList() ) - .seats(ShowSeatApiResponse.from((show.seats()))) - .ticketingSites( - show.ticketingSites().stream() - .map(ShowTicketingSiteApiParam::from) + .ticketingTimes( + show.ticketingTimes().stream() + .map(ShowTicketingTimeApiResponse::from) .toList() ) + .seats(ShowSeatApiResponse.from((show.seats()))) + .ticketingSites(ShowTicketingSiteApiResponse.from(show.ticketingSites())) .build(); } } diff --git a/app/api/show-api/src/main/java/com/example/show/controller/dto/response/ShowInfoApiResponse.java b/app/api/show-api/src/main/java/com/example/show/controller/dto/response/ShowInfoApiResponse.java index b961f9ac..db6027ae 100644 --- a/app/api/show-api/src/main/java/com/example/show/controller/dto/response/ShowInfoApiResponse.java +++ b/app/api/show-api/src/main/java/com/example/show/controller/dto/response/ShowInfoApiResponse.java @@ -1,8 +1,7 @@ package com.example.show.controller.dto.response; -import com.example.artist.service.dto.response.ArtistKoreanNameServiceResponse; -import com.example.genre.service.dto.response.GenreNameServiceResponse; -import com.example.show.controller.dto.param.ShowTicketingSiteApiParam; +import com.example.artist.controller.dto.response.ArtistKoreanNameApiResponse; +import com.example.genre.controller.dto.response.GenreNameApiResponse; import com.example.show.service.dto.response.ShowInfoServiceResponse; import java.time.LocalDate; import java.util.List; @@ -17,11 +16,13 @@ public record ShowInfoApiResponse( LocalDate endDate, String location, String image, - SeatInfoApiResponse seatInfoApiResponse, - List ticketingSites, - List artistKoreanNameResponses, - List genreNameResponses + ShowSeatApiResponse seatInfoApiResponse, + ShowTicketingSiteApiResponse ticketingSiteApiResponse, + List ticketingTimes, + List artistKoreanNameResponses, + List genreNameResponses ) { + public ShowInfoApiResponse(ShowInfoServiceResponse showInfoServiceResponse) { this( showInfoServiceResponse.id(), @@ -31,12 +32,17 @@ public ShowInfoApiResponse(ShowInfoServiceResponse showInfoServiceResponse) { showInfoServiceResponse.startDate(), showInfoServiceResponse.location(), showInfoServiceResponse.image(), - showInfoServiceResponse.seatInfoApiResponse(), - showInfoServiceResponse.ticketingSiteInfos().stream() - .map(ShowTicketingSiteApiParam::from) + ShowSeatApiResponse.from(showInfoServiceResponse.seats()), + ShowTicketingSiteApiResponse.from(showInfoServiceResponse.ticketingSiteInfos()), + showInfoServiceResponse.ticketingSites().stream() + .map(ShowTicketingTimeApiResponse::from) + .toList(), + showInfoServiceResponse.artistKoreanNameResponses().stream() + .map(ArtistKoreanNameApiResponse::new) .toList(), - showInfoServiceResponse.artistKoreanNameResponses(), - showInfoServiceResponse.genreNameResponses() + showInfoServiceResponse.genreNameResponses().stream() + .map(GenreNameApiResponse::new) + .toList() ); } diff --git a/app/api/show-api/src/main/java/com/example/show/controller/dto/response/ShowTicketingSiteApiResponse.java b/app/api/show-api/src/main/java/com/example/show/controller/dto/response/ShowTicketingSiteApiResponse.java new file mode 100644 index 00000000..f690a2ac --- /dev/null +++ b/app/api/show-api/src/main/java/com/example/show/controller/dto/response/ShowTicketingSiteApiResponse.java @@ -0,0 +1,17 @@ +package com.example.show.controller.dto.response; + +import com.example.show.service.dto.response.ShowTicketingSiteServiceResponse; +import java.util.Map; +import lombok.Builder; + +@Builder +public record ShowTicketingSiteApiResponse( + Map ticketingSites +) { + + public static ShowTicketingSiteApiResponse from( + ShowTicketingSiteServiceResponse ticketingSites + ) { + return new ShowTicketingSiteApiResponse(ticketingSites.ticketingSites()); + } +} diff --git a/app/api/show-api/src/main/java/com/example/show/controller/dto/response/ShowTicketingTimeApiResponse.java b/app/api/show-api/src/main/java/com/example/show/controller/dto/response/ShowTicketingTimeApiResponse.java new file mode 100644 index 00000000..dcd7c795 --- /dev/null +++ b/app/api/show-api/src/main/java/com/example/show/controller/dto/response/ShowTicketingTimeApiResponse.java @@ -0,0 +1,20 @@ +package com.example.show.controller.dto.response; + +import com.example.show.controller.vo.TicketingApiType; +import com.example.show.service.dto.response.ShowTicketingTimeServiceResponse; +import lombok.Builder; +import org.example.util.DateTimeUtil; + +@Builder +public record ShowTicketingTimeApiResponse( + TicketingApiType ticketingApiType, + String ticketingAt +) { + + public static ShowTicketingTimeApiResponse from(ShowTicketingTimeServiceResponse response) { + return ShowTicketingTimeApiResponse.builder() + .ticketingApiType(response.ticketingApiType()) + .ticketingAt(DateTimeUtil.formatLocalDateTime(response.ticketingAt())) + .build(); + } +} diff --git a/app/api/show-api/src/main/java/com/example/show/service/ShowAdminService.java b/app/api/show-api/src/main/java/com/example/show/service/ShowAdminService.java index 1c12d0eb..96dcb199 100644 --- a/app/api/show-api/src/main/java/com/example/show/service/ShowAdminService.java +++ b/app/api/show-api/src/main/java/com/example/show/service/ShowAdminService.java @@ -11,7 +11,6 @@ import java.util.UUID; import lombok.RequiredArgsConstructor; import org.example.dto.show.response.ShowInfoDomainResponse; -import org.example.entity.show.Show; import org.example.exception.BusinessException; import org.example.usecase.show.ShowUseCase; import org.springframework.stereotype.Service; @@ -51,14 +50,11 @@ public ShowInfoServiceResponse findShowInfo(UUID id) { public void updateShow(UUID id, ShowUpdateServiceRequest showUpdateServiceRequest) { String imageUrl = fileUploadComponent.uploadFile("show", showUpdateServiceRequest.post()); - Show show = showUpdateServiceRequest.toShowWithImageUrl(imageUrl); try { showUseCase.updateShow( id, - show, - showUpdateServiceRequest.artistIds(), - showUpdateServiceRequest.genreIds() + showUpdateServiceRequest.toDomainRequest(imageUrl) ); } catch (NoSuchElementException e) { throw new BusinessException(ShowError.ENTITY_NOT_FOUND); diff --git a/app/api/show-api/src/main/java/com/example/show/service/dto/param/ShowTicketingSiteServiceParam.java b/app/api/show-api/src/main/java/com/example/show/service/dto/param/ShowTicketingSiteServiceParam.java deleted file mode 100644 index e391f59a..00000000 --- a/app/api/show-api/src/main/java/com/example/show/service/dto/param/ShowTicketingSiteServiceParam.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.example.show.service.dto.param; - -import lombok.Builder; - -@Builder -public record ShowTicketingSiteServiceParam( - String siteName, - String siteURL -) { - -} diff --git a/app/api/show-api/src/main/java/com/example/show/service/dto/request/ShowCreateServiceRequest.java b/app/api/show-api/src/main/java/com/example/show/service/dto/request/ShowCreateServiceRequest.java index 681766be..07b254ac 100644 --- a/app/api/show-api/src/main/java/com/example/show/service/dto/request/ShowCreateServiceRequest.java +++ b/app/api/show-api/src/main/java/com/example/show/service/dto/request/ShowCreateServiceRequest.java @@ -2,6 +2,7 @@ import com.example.show.controller.vo.TicketingApiType; import java.time.LocalDate; +import java.time.LocalDateTime; import java.util.List; import java.util.Map; import java.util.UUID; @@ -23,7 +24,7 @@ public record ShowCreateServiceRequest( MultipartFile post, Map priceInformation, Map showTicketingSites, - Map ticketingTimes, + Map ticketingTimes, List artistIds, List genreIds ) { diff --git a/app/api/show-api/src/main/java/com/example/show/service/dto/request/ShowUpdateServiceRequest.java b/app/api/show-api/src/main/java/com/example/show/service/dto/request/ShowUpdateServiceRequest.java index 36ba02b9..c2243deb 100644 --- a/app/api/show-api/src/main/java/com/example/show/service/dto/request/ShowUpdateServiceRequest.java +++ b/app/api/show-api/src/main/java/com/example/show/service/dto/request/ShowUpdateServiceRequest.java @@ -1,13 +1,15 @@ package com.example.show.service.dto.request; -import com.example.show.controller.dto.response.SeatInfoApiResponse; +import com.example.show.controller.vo.TicketingApiType; import java.time.LocalDate; +import java.time.LocalDateTime; import java.util.List; import java.util.Map; import java.util.UUID; import lombok.Builder; -import org.example.entity.show.Show; +import org.example.dto.show.request.ShowUpdateDomainRequest; import org.example.entity.show.info.SeatPrices; +import org.example.entity.show.info.ShowTicketingTimes; import org.example.entity.show.info.TicketingSites; import org.springframework.web.multipart.MultipartFile; @@ -20,32 +22,52 @@ public record ShowUpdateServiceRequest( LocalDate endDate, String location, MultipartFile post, - SeatInfoApiResponse seatInfoApiResponse, - Map showTicketingSiteInfos, + Map priceInformation, + Map showTicketingSites, + Map ticketingTimes, List artistIds, List genreIds ) { - public Show toShowWithImageUrl(String imageUrl) { - TicketingSites ticketingSites = new TicketingSites(); - showTicketingSiteInfos.forEach(ticketingSites::saveTicketingSite); - - return Show.builder() + public ShowUpdateDomainRequest toDomainRequest(String imageURL) { + return ShowUpdateDomainRequest.builder() .title(title) .content(content) .startDate(startDate) .endDate(endDate) .location(location) - .image(imageUrl) - .seatPrices(getSeatPrice()) - .ticketingSites(ticketingSites) + .posterImageURL(imageURL) + .showSeats(getSeatPrice()) + .showTicketingSites(getTicketingSites()) + .showTicketingTimes(getTicketingTimes()) + .artistIds(artistIds) + .genreIds(genreIds) .build(); } private SeatPrices getSeatPrice() { SeatPrices seatPrices = new SeatPrices(); - seatInfoApiResponse.priceInformation().forEach(seatPrices::savePriceInformation); + priceInformation.forEach(seatPrices::savePriceInformation); return seatPrices; } + + private TicketingSites getTicketingSites() { + TicketingSites ticketingSites = new TicketingSites(); + showTicketingSites.forEach(ticketingSites::saveTicketingSite); + + return ticketingSites; + } + + private ShowTicketingTimes getTicketingTimes() { + ShowTicketingTimes showTicketingTimes = new ShowTicketingTimes(); + ticketingTimes.forEach( + (apiType, date) -> + showTicketingTimes.saveTicketingTimes( + apiType.toDomainType(), + date + ) + ); + return showTicketingTimes; + } } diff --git a/app/api/show-api/src/main/java/com/example/show/service/dto/response/ShowDetailServiceResponse.java b/app/api/show-api/src/main/java/com/example/show/service/dto/response/ShowDetailServiceResponse.java index 48298055..5471a9df 100644 --- a/app/api/show-api/src/main/java/com/example/show/service/dto/response/ShowDetailServiceResponse.java +++ b/app/api/show-api/src/main/java/com/example/show/service/dto/response/ShowDetailServiceResponse.java @@ -1,12 +1,10 @@ package com.example.show.service.dto.response; -import com.example.show.service.dto.param.ShowTicketingSiteServiceParam; import java.time.LocalDate; import java.util.List; import java.util.UUID; import lombok.Builder; import org.example.dto.show.response.ShowDetailDomainResponse; -import org.example.entity.show.info.TicketingSites; @Builder public record ShowDetailServiceResponse( @@ -18,12 +16,12 @@ public record ShowDetailServiceResponse( String posterImageURL, List artists, List genres, + List ticketingTimes, ShowSeatServiceResponse seats, - List ticketingSites + ShowTicketingSiteServiceResponse ticketingSites ) { public static ShowDetailServiceResponse from(ShowDetailDomainResponse show) { - TicketingSites ticketingSites = show.show().ticketingSites(); return ShowDetailServiceResponse.builder() .id(show.show().id()) .title(show.show().title()) @@ -40,16 +38,12 @@ public static ShowDetailServiceResponse from(ShowDetailDomainResponse show) { .map(ShowGenreServiceResponse::from) .toList() ) - .seats(ShowSeatServiceResponse.from(show.show().seatPrices())) - .ticketingSites( - ticketingSites.getSites().stream() - .map(site -> ShowTicketingSiteServiceParam.builder() - .siteName(site) - .siteURL(ticketingSites.getURLOrNullBy(site)) - .build() - ) - .toList() + .ticketingTimes(show.ticketingTimes().stream() + .map(ShowTicketingTimeServiceResponse::from) + .toList() ) + .seats(ShowSeatServiceResponse.from(show.show().seatPrices())) + .ticketingSites(ShowTicketingSiteServiceResponse.from(show.show().ticketingSites())) .build(); } } diff --git a/app/api/show-api/src/main/java/com/example/show/service/dto/response/ShowInfoServiceResponse.java b/app/api/show-api/src/main/java/com/example/show/service/dto/response/ShowInfoServiceResponse.java index 435df340..7e9516f7 100644 --- a/app/api/show-api/src/main/java/com/example/show/service/dto/response/ShowInfoServiceResponse.java +++ b/app/api/show-api/src/main/java/com/example/show/service/dto/response/ShowInfoServiceResponse.java @@ -2,8 +2,6 @@ import com.example.artist.service.dto.response.ArtistKoreanNameServiceResponse; import com.example.genre.service.dto.response.GenreNameServiceResponse; -import com.example.show.controller.dto.response.SeatInfoApiResponse; -import com.example.show.service.dto.param.ShowTicketingSiteServiceParam; import java.time.LocalDate; import java.util.List; import java.util.Set; @@ -12,6 +10,7 @@ import org.example.dto.artist.response.ArtistKoreanNameDomainResponse; import org.example.dto.genre.response.GenreNameDomainResponse; import org.example.dto.show.response.ShowInfoDomainResponse; +import org.example.dto.show.response.ShowTicketingTimeDomainResponse; @Builder public record ShowInfoServiceResponse( @@ -22,35 +21,38 @@ public record ShowInfoServiceResponse( LocalDate endDate, String location, String image, - SeatInfoApiResponse seatInfoApiResponse, - List ticketingSiteInfos, + ShowSeatServiceResponse seats, + ShowTicketingSiteServiceResponse ticketingSiteInfos, + List ticketingSites, List artistKoreanNameResponses, List genreNameResponses ) { public ShowInfoServiceResponse(ShowInfoDomainResponse showInfo) { this( - showInfo.id(), - showInfo.title(), - showInfo.content(), - showInfo.startDate(), - showInfo.endDate(), - showInfo.location(), - showInfo.image(), - SeatInfoApiResponse.from(showInfo.seatPrices()), - showInfo.ticketingSites().getSites() - .stream() - .map(siteName -> - ShowTicketingSiteServiceParam.builder() - .siteName(siteName) - .siteURL(showInfo.ticketingSites().getURLOrNullBy(siteName)) - .build() - ).toList(), + showInfo.show().id(), + showInfo.show().title(), + showInfo.show().content(), + showInfo.show().startDate(), + showInfo.show().endDate(), + showInfo.show().location(), + showInfo.show().image(), + ShowSeatServiceResponse.from(showInfo.show().seatPrices()), + ShowTicketingSiteServiceResponse.from(showInfo.show().ticketingSites()), + toShowTicketingTimeServiceResponses(showInfo.ticketingTimes()), toArtistKoreanNameServiceResponses(showInfo.artistKoreanNameResponses()), toGenreNameServiceResponses(showInfo.genreNameResponses()) ); } + private static List toShowTicketingTimeServiceResponses( + Set ticketingSites + ) { + return ticketingSites.stream() + .map(ShowTicketingTimeServiceResponse::from) + .toList(); + } + private static List toArtistKoreanNameServiceResponses( Set artistKoreanNameResponses) { return artistKoreanNameResponses diff --git a/app/api/show-api/src/main/java/com/example/show/service/dto/response/ShowTicketingSiteServiceResponse.java b/app/api/show-api/src/main/java/com/example/show/service/dto/response/ShowTicketingSiteServiceResponse.java new file mode 100644 index 00000000..bab00c79 --- /dev/null +++ b/app/api/show-api/src/main/java/com/example/show/service/dto/response/ShowTicketingSiteServiceResponse.java @@ -0,0 +1,15 @@ +package com.example.show.service.dto.response; + +import java.util.Map; +import lombok.Builder; +import org.example.entity.show.info.TicketingSites; + +@Builder +public record ShowTicketingSiteServiceResponse( + Map ticketingSites +) { + + public static ShowTicketingSiteServiceResponse from(TicketingSites ticketingSites) { + return new ShowTicketingSiteServiceResponse(ticketingSites.getTicketingURLBySite()); + } +} diff --git a/app/api/show-api/src/main/java/com/example/show/service/dto/response/ShowTicketingTimeServiceResponse.java b/app/api/show-api/src/main/java/com/example/show/service/dto/response/ShowTicketingTimeServiceResponse.java new file mode 100644 index 00000000..de016129 --- /dev/null +++ b/app/api/show-api/src/main/java/com/example/show/service/dto/response/ShowTicketingTimeServiceResponse.java @@ -0,0 +1,20 @@ +package com.example.show.service.dto.response; + +import com.example.show.controller.vo.TicketingApiType; +import java.time.LocalDateTime; +import lombok.Builder; +import org.example.dto.show.response.ShowTicketingTimeDomainResponse; + +@Builder +public record ShowTicketingTimeServiceResponse( + TicketingApiType ticketingApiType, + LocalDateTime ticketingAt +) { + + public static ShowTicketingTimeServiceResponse from(ShowTicketingTimeDomainResponse response) { + return ShowTicketingTimeServiceResponse.builder() + .ticketingApiType(TicketingApiType.from(response.ticketingType())) + .ticketingAt(response.ticketingAt()) + .build(); + } +} diff --git a/app/api/show-api/src/test/java/show/fixture/dto/ShowRequestDtoFixture.java b/app/api/show-api/src/test/java/show/fixture/dto/ShowRequestDtoFixture.java index 03106988..ca6f3fa6 100644 --- a/app/api/show-api/src/test/java/show/fixture/dto/ShowRequestDtoFixture.java +++ b/app/api/show-api/src/test/java/show/fixture/dto/ShowRequestDtoFixture.java @@ -1,11 +1,11 @@ package show.fixture.dto; -import com.example.show.controller.dto.response.SeatInfoApiResponse; import com.example.show.controller.vo.TicketingApiType; import com.example.show.service.dto.request.ShowCreateServiceRequest; import com.example.show.service.dto.request.ShowSearchPaginationServiceRequest; import com.example.show.service.dto.request.ShowUpdateServiceRequest; import java.time.LocalDate; +import java.time.LocalDateTime; import java.util.List; import java.util.Map; import java.util.UUID; @@ -44,8 +44,9 @@ public static ShowUpdateServiceRequest showUpdateServiceRequest() { .endDate(LocalDate.EPOCH) .location("test_location") .post(post) - .seatInfoApiResponse(getSeatInfoApiResponses()) - .showTicketingSiteInfos(getTicketingSites()) + .priceInformation(getSeatInfoApiResponse()) + .showTicketingSites(getTicketingSites()) + .ticketingTimes(getShowTicketingDates()) .artistIds(List.of(UUID.randomUUID())) .genreIds(List.of(UUID.randomUUID())) .build(); @@ -71,17 +72,6 @@ private static Map getSeatInfoApiResponse() { ); } - private static SeatInfoApiResponse getSeatInfoApiResponses() { - return new SeatInfoApiResponse( - Map.of( - "VIP", 150000, - "R", 120000, - "S", 100000, - "A", 80000 - ) - ); - } - private static Map getTicketingSites() { return Map.of( "YES24", "https://YES24URL", @@ -89,10 +79,10 @@ private static Map getTicketingSites() { ); } - private static Map getShowTicketingDates() { + private static Map getShowTicketingDates() { return Map.of( - TicketingApiType.PRE, LocalDate.of(2024, 10, 1), - TicketingApiType.NORMAL, LocalDate.of(2024, 10, 12) + TicketingApiType.PRE, LocalDateTime.now(), + TicketingApiType.NORMAL, LocalDateTime.now() ); } } diff --git a/app/api/show-api/src/test/java/show/service/ShowAdminServiceTest.java b/app/api/show-api/src/test/java/show/service/ShowAdminServiceTest.java index 8f183ab8..71e3f778 100644 --- a/app/api/show-api/src/test/java/show/service/ShowAdminServiceTest.java +++ b/app/api/show-api/src/test/java/show/service/ShowAdminServiceTest.java @@ -1,7 +1,6 @@ package show.service; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.anyList; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.mock; @@ -14,7 +13,7 @@ import com.example.show.service.dto.request.ShowUpdateServiceRequest; import java.util.UUID; import org.example.dto.show.request.ShowCreationDomainRequest; -import org.example.entity.show.Show; +import org.example.dto.show.request.ShowUpdateDomainRequest; import org.example.usecase.show.ShowUseCase; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -39,7 +38,8 @@ void showCreateWithUploadedImageUrl() { showCreateServiceRequest.post() ) ).willReturn("test_imageUrl"); - ShowCreationDomainRequest request = showCreateServiceRequest.toDomainRequest("test_imageUrl"); + ShowCreationDomainRequest request = showCreateServiceRequest.toDomainRequest( + "test_imageUrl"); //when showAdminService.save(showCreateServiceRequest); @@ -65,7 +65,6 @@ void showUpdateWithUploadedImageUrl() { showAdminService.updateShow(showId, showUpdateServiceRequest); //then - verify(showUseCase, times(1)).updateShow(eq(showId), any(Show.class), anyList(), anyList()); + verify(showUseCase, times(1)).updateShow(eq(showId), any(ShowUpdateDomainRequest.class)); } - } diff --git a/app/api/user-api/src/main/resources/templates/show_create_form.html b/app/api/user-api/src/main/resources/templates/show_create_form.html index 7b52fecc..021d529c 100644 --- a/app/api/user-api/src/main/resources/templates/show_create_form.html +++ b/app/api/user-api/src/main/resources/templates/show_create_form.html @@ -126,7 +126,7 @@

추가할 공연 정보

- + `; diff --git a/app/api/user-api/src/main/resources/templates/show_form.html b/app/api/user-api/src/main/resources/templates/show_form.html index 837a38ff..d9f1a083 100644 --- a/app/api/user-api/src/main/resources/templates/show_form.html +++ b/app/api/user-api/src/main/resources/templates/show_form.html @@ -9,12 +9,6 @@

공연 수정

- -
- - -
-
@@ -80,12 +74,12 @@

공연 수정

- +
- -
+ +
- +
@@ -100,6 +94,16 @@

공연 수정

+ +
+ +
+
+ +
+
+
+
@@ -108,6 +112,26 @@

공연 수정