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
10 changes: 7 additions & 3 deletions src/main/java/com/beat/domain/booking/dao/BookingRepository.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import org.springframework.data.repository.query.Param;

import com.beat.domain.booking.domain.Booking;
import com.beat.domain.booking.domain.BookingStatus;

public interface BookingRepository extends JpaRepository<Booking, Long> {
@Query("SELECT b FROM Booking b " +
Expand All @@ -33,6 +34,9 @@ Optional<Booking> findFirstByBookerNameAndBookerPhoneNumberAndBirthDateAndPasswo

List<Booking> findByUsersId(Long userId);

@Query("SELECT COUNT(b) > 0 FROM Booking b WHERE b.schedule.id IN :scheduleIds AND b.bookingStatus != 'BOOKING_CANCELLED'")
boolean existsByScheduleIdIn(@Param("scheduleIds") List<Long> scheduleIds);
}
@Query("SELECT COUNT(b) > 0 FROM Booking b WHERE b.schedule.id IN :scheduleIds AND b.bookingStatus NOT IN :excludedStatuses")
boolean existsActiveBookingByScheduleIds(
@Param("scheduleIds") List<Long> scheduleIds,
@Param("excludedStatuses") List<BookingStatus> excludedStatuses
);
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
import java.util.List;
import java.util.stream.Collectors;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.beat.domain.booking.dao.BookingRepository;
import com.beat.domain.booking.domain.BookingStatus;
import com.beat.domain.cast.dao.CastRepository;
import com.beat.domain.cast.domain.Cast;
import com.beat.domain.member.dao.MemberRepository;
Expand Down Expand Up @@ -96,7 +96,7 @@ public PerformanceResponse createPerformance(Long memberId, PerformanceRequest r
performance
);
})
.collect(Collectors.toList());
.toList();

performance.assignScheduleNumbers(schedules);
scheduleRepository.saveAll(schedules);
Expand All @@ -105,7 +105,7 @@ public PerformanceResponse createPerformance(Long memberId, PerformanceRequest r

List<LocalDateTime> performanceDates = schedules.stream()
.map(Schedule::getPerformanceDate)
.collect(Collectors.toList());
.toList();
performance.updatePerformancePeriod(performanceDates);
performanceRepository.save(performance);

Expand All @@ -116,7 +116,7 @@ public PerformanceResponse createPerformance(Long memberId, PerformanceRequest r
castRequest.castPhoto(),
performance
))
.collect(Collectors.toList());
.toList();
castRepository.saveAll(casts);

List<Staff> staffs = request.staffList().stream()
Expand All @@ -126,15 +126,15 @@ public PerformanceResponse createPerformance(Long memberId, PerformanceRequest r
staffRequest.staffPhoto(),
performance
))
.collect(Collectors.toList());
.toList();
staffRepository.saveAll(staffs);

List<PerformanceImage> performanceImageList = request.performanceImageList().stream()
.map(performanceImageRequest -> PerformanceImage.create(
performanceImageRequest.performanceImage(),
performance
))
.collect(Collectors.toList());
.toList();
performanceImageRepository.saveAll(performanceImageList);

return mapToPerformanceResponse(performance, schedules, casts, staffs, performanceImageList);
Expand All @@ -150,7 +150,7 @@ private PerformanceResponse mapToPerformanceResponse(Performance performance, Li
calculateDueDate(schedule.getPerformanceDate().toLocalDate()),
schedule.getScheduleNumber()
))
.collect(Collectors.toList());
.toList();

List<CastResponse> castResponses = casts.stream()
.map(cast -> CastResponse.of(
Expand All @@ -159,7 +159,7 @@ private PerformanceResponse mapToPerformanceResponse(Performance performance, Li
cast.getCastRole(),
cast.getCastPhoto()
))
.collect(Collectors.toList());
.toList();

List<StaffResponse> staffResponses = staffs.stream()
.map(staff -> StaffResponse.of(
Expand All @@ -168,14 +168,14 @@ private PerformanceResponse mapToPerformanceResponse(Performance performance, Li
staff.getStaffRole(),
staff.getStaffPhoto()
))
.collect(Collectors.toList());
.toList();

List<PerformanceImageResponse> performanceImageResponses = performanceImages.stream()
.map(image -> PerformanceImageResponse.of(
image.getId(),
image.getPerformanceImageUrl()
))
.collect(Collectors.toList());
.toList();

return PerformanceResponse.of(
performance.getUsers().getId(),
Expand Down Expand Up @@ -226,9 +226,10 @@ public void deletePerformance(Long memberId, Long performanceId) {

List<Long> scheduleIds = scheduleRepository.findIdsByPerformanceId(performanceId);

boolean hasBookings = bookingRepository.existsByScheduleIdIn(scheduleIds);
List<BookingStatus> statusesToExclude = List.of(BookingStatus.BOOKING_CANCELLED, BookingStatus.BOOKING_DELETED);
boolean isBookerExist = bookingRepository.existsActiveBookingByScheduleIds(scheduleIds, statusesToExclude);

if (hasBookings) {
if (isBookerExist) {
throw new ForbiddenException(PerformanceErrorCode.PERFORMANCE_DELETE_FAILED);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,12 @@
import java.time.temporal.ChronoUnit;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.beat.domain.booking.dao.BookingRepository;
import com.beat.domain.booking.domain.BookingStatus;
import com.beat.domain.cast.dao.CastRepository;
import com.beat.domain.cast.domain.Cast;
import com.beat.domain.cast.exception.CastErrorCode;
Expand Down Expand Up @@ -73,7 +73,9 @@ public PerformanceModifyResponse modifyPerformance(Long memberId, PerformanceMod
validateOwnership(userId, performance);

List<Long> scheduleIds = scheduleRepository.findIdsByPerformanceId(request.performanceId());
boolean isBookerExist = bookingRepository.existsByScheduleIdIn(scheduleIds);

List<BookingStatus> statusesToExclude = List.of(BookingStatus.BOOKING_CANCELLED, BookingStatus.BOOKING_DELETED);
boolean isBookerExist = bookingRepository.existsActiveBookingByScheduleIds(scheduleIds, statusesToExclude);

if (isBookerExist && request.ticketPrice() != performance.getTicketPrice()) {
log.error("Ticket price update failed due to existing bookings for performanceId: {}", performance.getId());
Expand Down Expand Up @@ -148,7 +150,7 @@ private void updatePerformanceDetails(Performance performance, PerformanceModify

List<LocalDateTime> performanceDates = request.scheduleModifyRequests().stream()
.map(ScheduleModifyRequest::performanceDate)
.collect(Collectors.toList());
.toList();
performance.updatePerformancePeriod(performanceDates);

if (!isBookerExist) {
Expand All @@ -167,11 +169,11 @@ private List<ScheduleModifyResponse> processSchedules(List<ScheduleModifyRequest
List<Long> requestScheduleIds = scheduleRequests.stream()
.map(ScheduleModifyRequest::scheduleId)
.filter(Objects::nonNull)
.collect(Collectors.toList());
.toList();

List<Long> schedulesToDelete = existingScheduleIds.stream()
.filter(id -> !requestScheduleIds.contains(id))
.collect(Collectors.toList());
.toList();

deleteRemainingSchedules(schedulesToDelete);

Expand All @@ -191,7 +193,7 @@ private List<ScheduleModifyResponse> processSchedules(List<ScheduleModifyRequest

return schedule;
})
.collect(Collectors.toList());
.toList();

performance.assignScheduleNumbers(schedules);

Expand All @@ -203,7 +205,7 @@ private List<ScheduleModifyResponse> processSchedules(List<ScheduleModifyRequest
calculateDueDate(schedule.getPerformanceDate()),
schedule.getScheduleNumber()
))
.collect(Collectors.toList());
.toList();
}

private Schedule addSchedule(ScheduleModifyRequest request, Performance performance) {
Expand Down Expand Up @@ -409,7 +411,7 @@ private List<StaffModifyResponse> processStaffs(List<StaffModifyRequest> staffRe
return updateStaff(request, performance);
}
})
.collect(Collectors.toList());
.toList();

deleteRemainingStaffs(existingStaffIds);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import org.springframework.transaction.annotation.Transactional;

import com.beat.domain.booking.dao.BookingRepository;
import com.beat.domain.booking.domain.BookingStatus;
import com.beat.domain.cast.dao.CastRepository;
import com.beat.domain.cast.domain.Cast;
import com.beat.domain.member.dao.MemberRepository;
Expand Down Expand Up @@ -76,27 +77,27 @@ public PerformanceDetailResponse getPerformanceDetail(Long performanceId) {
return PerformanceDetailScheduleResponse.of(schedule.getId(), schedule.getPerformanceDate(),
schedule.getScheduleNumber().name(), dueDate, schedule.isBooking());
})
.collect(Collectors.toList());
.toList();

int minDueDate = scheduleService.getMinDueDate(scheduleRepository.findAllByPerformanceId(performanceId));

List<PerformanceDetailCastResponse> castList = castRepository.findByPerformanceId(performanceId)
.stream()
.map(cast -> PerformanceDetailCastResponse.of(cast.getId(), cast.getCastName(), cast.getCastRole(),
cast.getCastPhoto()))
.collect(Collectors.toList());
.toList();

List<PerformanceDetailStaffResponse> staffList = staffRepository.findByPerformanceId(performanceId)
.stream()
.map(staff -> PerformanceDetailStaffResponse.of(staff.getId(), staff.getStaffName(), staff.getStaffRole(),
staff.getStaffPhoto()))
.collect(Collectors.toList());
.toList();

List<PerformanceDetailImageResponse> performanceImageList = performanceImageRepository.findAllByPerformanceId(
performanceId)
.stream()
.map(image -> PerformanceDetailImageResponse.of(image.getId(), image.getPerformanceImageUrl()))
.collect(Collectors.toList());
.toList();

log.info("Successfully completed getPerformanceDetail for performanceId: {}", performanceId);
return PerformanceDetailResponse.of(performance.getId(), performance.getPerformanceTitle(),
Expand All @@ -119,7 +120,7 @@ public BookingPerformanceDetailResponse getBookingPerformanceDetail(Long perform
return BookingPerformanceDetailScheduleResponse.of(schedule.getId(), schedule.getPerformanceDate(),
schedule.getScheduleNumber().name(), scheduleService.getAvailableTicketCount(schedule),
schedule.isBooking(), dueDate);
}).collect(Collectors.toList());
}).toList();

return BookingPerformanceDetailResponse.of(performance.getId(), performance.getPerformanceTitle(),
performance.getPerformancePeriod(), scheduleList, performance.getTicketPrice(),
Expand All @@ -146,7 +147,7 @@ public MakerPerformanceResponse getMemberPerformances(Long memberId) {
return MakerPerformanceDetailResponse.of(performance.getId(), performance.getGenre().name(),
performance.getPerformanceTitle(), performance.getPosterImage(), performance.getPerformancePeriod(),
minDueDate);
}).collect(Collectors.toList());
}).toList();

List<MakerPerformanceDetailResponse> positiveDueDates = performanceDetails.stream()
.filter(detail -> detail.minDueDate() >= 0)
Expand All @@ -156,7 +157,7 @@ public MakerPerformanceResponse getMemberPerformances(Long memberId) {
List<MakerPerformanceDetailResponse> negativeDueDates = performanceDetails.stream()
.filter(detail -> detail.minDueDate() < 0)
.sorted(Comparator.comparingInt(MakerPerformanceDetailResponse::minDueDate).reversed())
.collect(Collectors.toList());
.toList();

positiveDueDates.addAll(negativeDueDates);

Expand Down Expand Up @@ -186,7 +187,8 @@ public PerformanceModifyDetailResponse getPerformanceEdit(Long memberId, Long pe

List<Long> scheduleIds = scheduleRepository.findIdsByPerformanceId(performanceId);

boolean isBookerExist = bookingRepository.existsByScheduleIdIn(scheduleIds);
List<BookingStatus> statusesToExclude = List.of(BookingStatus.BOOKING_CANCELLED, BookingStatus.BOOKING_DELETED);
boolean isBookerExist = bookingRepository.existsActiveBookingByScheduleIds(scheduleIds, statusesToExclude);

List<Schedule> schedules = scheduleRepository.findAllByPerformanceId(performanceId);
List<Cast> casts = castRepository.findAllByPerformanceId(performanceId);
Expand All @@ -203,21 +205,21 @@ private PerformanceModifyDetailResponse mapToPerformanceEditResponse(Performance
.map(schedule -> ScheduleResponse.of(schedule.getId(), schedule.getPerformanceDate(),
schedule.getTotalTicketCount(), calculateDueDate(schedule.getPerformanceDate()),
schedule.getScheduleNumber()))
.collect(Collectors.toList());
.toList();

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

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

List<PerformanceImageResponse> performanceImageResponses = performanceImages.stream()
.map(performanceImage -> PerformanceImageResponse.of(performanceImage.getId(),
performanceImage.getPerformanceImageUrl()))
.collect(Collectors.toList());
.toList();

return PerformanceModifyDetailResponse.of(performance.getUsers().getId(), performance.getId(),
performance.getPerformanceTitle(), performance.getGenre(), performance.getRunningTime(),
Expand Down
2 changes: 1 addition & 1 deletion src/main/resources/application.yml
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
spring:
profiles:
default: local
default: dev