Skip to content

Commit

Permalink
[feat] #117 - 공연 수정 페이지 정보 조회 GET API 구현 (#121)
Browse files Browse the repository at this point in the history
* [#117] remove(PerformanceCreateService): 사용하지 않는 클래스 삭제

* [#117] refactor(CastRepository): DB에 등록된 등장인물을 모두 가져오는 메서드 구현

* [#117] refactor(ScheduleRepository): DB에 등록된 회차를 모두 가져오는 메서드 구현

* [#117] refactor(StaffRepository): DB에 등록된 스태프를 모두 가져오는 메서드 구현

* [#117] refactor(PerformanceSuccessCode): 공연 수정 페이지 조회 성공 메시지 추가

* [#117] refactor(PerformanceEditResponse): 공연 수정 페이지 조회 응답 DTO 생성

* [#117] refactor(PerformanceService): 수정 페이지의 정보를 조회하는 서비스 로직 구현

* [#117] feat(PerformanceController): 공연 수정 페이지의 정보를 조회하는 GET API 구현
  • Loading branch information
hoonyworld authored Jul 17, 2024
1 parent 5ad88f9 commit ff1618c
Show file tree
Hide file tree
Showing 8 changed files with 184 additions and 156 deletions.
2 changes: 2 additions & 0 deletions src/main/java/com/beat/domain/cast/dao/CastRepository.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,6 @@

public interface CastRepository extends JpaRepository<Cast, Long> {
List<Cast> findByPerformanceId(Long performanceId);

List<Cast> findAllByPerformanceId(Long performanceId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import com.beat.domain.performance.application.dto.BookingPerformanceDetailResponse;
import com.beat.domain.performance.application.dto.MakerPerformanceResponse;
import com.beat.domain.performance.application.dto.PerformanceDetailResponse;
import com.beat.domain.performance.application.dto.PerformanceEditResponse;
import com.beat.domain.performance.application.dto.create.PerformanceRequest;
import com.beat.domain.performance.application.dto.create.PerformanceResponse;
import com.beat.domain.performance.application.dto.update.PerformanceUpdateRequest;
Expand Down Expand Up @@ -35,7 +36,6 @@ public class PerformanceController {
private final PerformanceManagementService performanceManagementService;
private final PerformanceUpdateService performanceUpdateService;


@Operation(summary = "공연 생성 API", description = "공연을 생성하는 POST API입니다.")
@PostMapping
public ResponseEntity<SuccessResponse<PerformanceResponse>> createPerformance(
Expand All @@ -45,6 +45,7 @@ public ResponseEntity<SuccessResponse<PerformanceResponse>> createPerformance(
return ResponseEntity.status(HttpStatus.CREATED)
.body(SuccessResponse.of(PerformanceSuccessCode.PERFORMANCE_CREATE_SUCCESS, response));
}

@Operation(summary = "공연 정보 수정 API", description = "공연 정보를 수정하는 PUT API입니다.")
@PutMapping
public ResponseEntity<SuccessResponse<PerformanceUpdateResponse>> updatePerformance(
Expand All @@ -55,6 +56,15 @@ public ResponseEntity<SuccessResponse<PerformanceUpdateResponse>> updatePerforma
.body(SuccessResponse.of(PerformanceSuccessCode.PERFORMANCE_UPDATE_SUCCESS, response));
}

@Operation(summary = "공연 수정 페이지 정보 조회 API", description = "공연 정보를 조회하는 GET API입니다.")
@GetMapping("/{performanceId}")
public ResponseEntity<SuccessResponse<PerformanceEditResponse>> getPerformanceForEdit(
@CurrentMember Long memberId,
@PathVariable Long performanceId) {
PerformanceEditResponse response = performanceService.getPerformanceEdit(memberId, performanceId);
return ResponseEntity.ok(SuccessResponse.of(PerformanceSuccessCode.PERFORMANCE_MODIFY_PAGE_SUCCESS, response));
}

@Operation(summary = "공연 상세정보 조회 API", description = "공연 상세페이지의 공연 상세정보를 조회하는 GET API입니다.")
@GetMapping("/detail/{performanceId}")
public ResponseEntity<SuccessResponse<PerformanceDetailResponse>> getPerformanceDetail(
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,8 +1,13 @@
package com.beat.domain.performance.application;
import com.beat.domain.booking.dao.BookingRepository;
import com.beat.domain.cast.domain.Cast;
import com.beat.domain.member.dao.MemberRepository;
import com.beat.domain.member.domain.Member;
import com.beat.domain.member.exception.MemberErrorCode;
import com.beat.domain.performance.application.dto.*;
import com.beat.domain.performance.application.dto.create.CastResponse;
import com.beat.domain.performance.application.dto.create.ScheduleResponse;
import com.beat.domain.performance.application.dto.create.StaffResponse;
import com.beat.domain.performance.application.dto.home.HomePerformanceDetail;
import com.beat.domain.performance.application.dto.home.HomePromotionDetail;
import com.beat.domain.performance.application.dto.home.HomeRequest;
Expand All @@ -17,6 +22,7 @@
import com.beat.domain.cast.dao.CastRepository;
import com.beat.domain.schedule.domain.Schedule;
import com.beat.domain.staff.dao.StaffRepository;
import com.beat.domain.staff.domain.Staff;
import com.beat.domain.user.dao.UserRepository;
import com.beat.domain.user.domain.Users;
import com.beat.domain.user.exception.UserErrorCode;
Expand All @@ -25,6 +31,9 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
Expand All @@ -39,6 +48,7 @@ public class PerformanceService {
private final PromotionRepository promotionRepository;
private final MemberRepository memberRepository;
private final UserRepository userRepository;
private final BookingRepository bookingRepository;

@Transactional(readOnly = true)
public PerformanceDetailResponse getPerformanceDetail(Long performanceId) {
Expand Down Expand Up @@ -206,4 +216,78 @@ public MakerPerformanceResponse getMemberPerformances(Long memberId) {
return MakerPerformanceResponse.of(user.getId(), performanceDetails);
}

@Transactional
public PerformanceEditResponse getPerformanceEdit(Long memberId, Long performanceId) {
Member member = memberRepository.findById(memberId)
.orElseThrow(() -> new NotFoundException(MemberErrorCode.MEMBER_NOT_FOUND));

Performance performance = performanceRepository.findById(performanceId)
.orElseThrow(() -> new NotFoundException(PerformanceErrorCode.PERFORMANCE_NOT_FOUND));

boolean isBookerExist = bookingRepository.existsBySchedulePerformanceId(performanceId);

List<Schedule> schedules = scheduleRepository.findAllByPerformanceId(performanceId);
List<Cast> casts = castRepository.findAllByPerformanceId(performanceId);
List<Staff> staffs = staffRepository.findAllByPerformanceId(performanceId);

return mapToPerformanceEditResponse(performance, schedules, casts, staffs, isBookerExist);
}

private PerformanceEditResponse mapToPerformanceEditResponse(Performance performance, List<Schedule> schedules, List<Cast> casts, List<Staff> staffs, boolean isBookerExist) {
List<ScheduleResponse> scheduleResponses = schedules.stream()
.map(schedule -> ScheduleResponse.of(
schedule.getId(),
schedule.getPerformanceDate(),
schedule.getTotalTicketCount(),
calculateDueDate(schedule.getPerformanceDate()),
schedule.getScheduleNumber()
))
.collect(Collectors.toList());

List<CastResponse> castResponses = casts.stream()
.map(cast -> CastResponse.of(
cast.getId(),
cast.getCastName(),
cast.getCastRole(),
cast.getCastPhoto()
))
.collect(Collectors.toList());

List<StaffResponse> staffResponses = staffs.stream()
.map(staff -> StaffResponse.of(
staff.getId(),
staff.getStaffName(),
staff.getStaffRole(),
staff.getStaffPhoto()
))
.collect(Collectors.toList());

return PerformanceEditResponse.of(
performance.getUsers().getId(),
performance.getId(),
performance.getPerformanceTitle(),
performance.getGenre(),
performance.getRunningTime(),
performance.getPerformanceDescription(),
performance.getPerformanceAttentionNote(),
performance.getBankName(),
performance.getAccountNumber(),
performance.getAccountHolder(),
performance.getPosterImage(),
performance.getPerformanceTeamName(),
performance.getPerformanceVenue(),
performance.getPerformanceContact(),
performance.getPerformancePeriod(),
performance.getTicketPrice(),
performance.getTotalScheduleCount(),
isBookerExist,
scheduleResponses,
castResponses,
staffResponses
);
}

private int calculateDueDate(LocalDateTime performanceDate) {
return (int) ChronoUnit.DAYS.between(LocalDate.now(), performanceDate.toLocalDate());
}
}
Loading

0 comments on commit ff1618c

Please sign in to comment.