[Project] 날짜별 상영시간 계산하기

김호정's avatar
Oct 09, 2024
[Project] 날짜별 상영시간 계산하기

상영시간을 계산해야되는 이유

notion image
프론트를 보면 날짜별 상영관을 보여준다.
우리는 프론트에게 날짜별 상영리스트와 상영관 등록시 상영시작가능 시간을 알려줘야한다.(아니면 상영시간이 겹치는 상황 발생)
 
 
 

다음상영시간을 구하는 로직

  1. 그날짜에 상영시간이 있을 경우
  1. 그날짜에 상영시간이 없을 경우
크게 이렇게 2가지 경우로 나누었다.
 

1.1 상영시간이 있을 경우

f (!screenShowtimes.isEmpty()) { for (Showtime showtime : screenShowtimes) { AdminShowtimeResponse.ShowtimeDTO showtimeDTO = new AdminShowtimeResponse.ShowtimeDTO(showtime); screenDTO.addShowtime(showtimeDTO); // 마지막 상영 종료 시간을 계산 (상영 시작 시간 + 런타임 + 30분) LocalDateTime showtimeEnd = showtime.getStartedAt().toLocalDateTime() .plusMinutes(showtime.getMovie().getRuntime() + 30); } }
그전 상영시간에 영화 런타임을 더하고 +30분을 한 시간이 다음 상영가능 시간이 된다.
 

1.2 상영시간이 있을 경우(자정을 넘었는지 체크)

// selectedDate의 다음날 자정 기준으로 비교 LocalDateTime midnight = selectedDate.plusDays(1).atTime(0, 0); // 다음날 자정 // 자정 기준 검증 if (showtimeEnd.isBefore(midnight)) { screenDTO.setCanAddShowtime("true"); screenDTO.setNextAvailableTime(showtimeEnd); } else { screenDTO.setCanAddShowtime(null); }
근데 만약 상영시간이 자정을 넘겼다면 다른 처리를 해줘야한다.
왜냐하면 12일 11시 59분에 등록을 했다고 가정을 한다면 당연히 영화 런타임을 더하면 다음날이 되기 때문에 다음날의 데이터는 프론트에게 넘기면 안된다.
 
 

2.1 상영시간이 없을경우

if (previousDayShowtimes.isEmpty()) { // 전날에도 상영 시간이 없는 경우 screenDTO.setNextAvailableTime(selectedDate.atStartOfDay()); // 0시로 설정 screenDTO.setCanAddShowtime("true"); }
전날에 상영시간이 조회가 안되는거는 휴무였을 가능성이 높다 이럴경우에는 첫시작시간은 마음대로 설정해도 겹치는 시간이 발생하지 않는다 설정하지 않는다면 기초시간을 0시로 설정했다.
 

2.2

// 전날 상영 시간이 있는 경우 Showtime lastShowtime = previousDayShowtimes.get(previousDayShowtimes.size() - 1); LocalDateTime previousEndTime = lastShowtime.getStartedAt().toLocalDateTime() .plusMinutes(lastShowtime.getMovie().getRuntime() + 30); if (previousEndTime.isBefore(selectedDate.atStartOfDay())) { screenDTO.setNextAvailableTime(selectedDate.atStartOfDay()); // 0시로 설정 } else { screenDTO.setNextAvailableTime(previousEndTime); } screenDTO.setCanAddShowtime("true"); }
전날에 상영시간이 있는 경우 상영시간 중 가장 마지막에 상영된 상영스케줄을 찾아 자정을 넘었는지를 체크하고 넘었다면 넘은 시간 뒤가 오늘 상영가능한 시간으로 설정
 
notion image
 
상영시간이 넘어간 상영관을 상영스케줄 등록을 막았고
 
notion image
 
다음날 상영가능 시간을 추가한거를 확인할 수 있다.
Share article

keepgoing