이번 장에서는 프로젝트를 진행하면서 기능 구현한 코드를 정리해 보려고 한다.
식당 예약 프로그램, 스케줄 관리 등 새로 추가하는 데이터가 기존 데이터의 시간대와 겹치는 지 확인하는 기능은 빠져서는 안될 기능이다.
나는 프로젝트를 진행하면서 강사가 학생 수업을 배정할때 쓰이는 스케줄 관리 기능을 구현해야 했다.
요구 사항은 아래와 같다
나는 위 요구사항을 만족 시키기 위해서 같은 강사가 여러 학생들을 같은 시간대에 배정을 할 경우에 대해 고민했다. 요일은 월요일만 두고 고려하였다.
시간대가 겹치는 경우는 약 4가지로 둘 수 있었다
case1 : 수업 시작 시간만 동일할 경우
case2 : 수업 종료 시간만 동일할 경우
case3 : 시작시간과 종료시간이 기존 데이터 사이의 범위에 있는 경우
case4 : 시작시간과 종료시간이 기존 데이터 사이의 범위보다 큰 경우
위 4가지 사항을 고려하여 아래와 같은 Query dsl로 시간 중복을 체크할 수 있었다.
이렇게해서 월요일부터 일요일까지 새로 배정하는 시간대와 DB에 존재하는 데이터들의 시간대가 겹치면 아래 결과 처럼 어떤 학생이, 무슨요일에, 어느 시간대에 무슨 과목이 배정되어 있는지 응답하도록 하였다.
위 기능을 구현하면서 에타로 시간표 짰던 기억이 많이 났었다 🙁