Query dsl 시간 중복 쿼리

HyeonWoo·2021년 1월 9일
0

스프링 & JPA

목록 보기
21/34
post-thumbnail

이번 장에서는 프로젝트를 진행하면서 기능 구현한 코드를 정리해 보려고 한다.


식당 예약 프로그램, 스케줄 관리 등 새로 추가하는 데이터가 기존 데이터의 시간대와 겹치는 지 확인하는 기능은 빠져서는 안될 기능이다.

나는 프로젝트를 진행하면서 강사가 학생 수업을 배정할때 쓰이는 스케줄 관리 기능을 구현해야 했다.

요구 사항은 아래와 같다

  1. 강사는 학생의 수업을 배정할때 시간이 겹치는 지 알아야한다.
  2. 수업은 시작시간과 종료시간이 존재한다.
  3. 수업마다 수업시간은 다르다.
  4. 주7일에서 2일만 수업하는 학생, 3일만 수업하는 학생 등 다르게 존재한다.
  5. 강사는 여러명 존재한다.

나는 위 요구사항을 만족 시키기 위해서 같은 강사가 여러 학생들을 같은 시간대에 배정을 할 경우에 대해 고민했다. 요일은 월요일만 두고 고려하였다.

시간대가 겹치는 경우는 약 4가지로 둘 수 있었다

case1 : 수업 시작 시간만 동일할 경우
case2 : 수업 종료 시간만 동일할 경우
case3 : 시작시간과 종료시간이 기존 데이터 사이의 범위에 있는 경우
case4 : 시작시간과 종료시간이 기존 데이터 사이의 범위보다 큰 경우

위 4가지 사항을 고려하여 아래와 같은 Query dsl로 시간 중복을 체크할 수 있었다.

이렇게해서 월요일부터 일요일까지 새로 배정하는 시간대와 DB에 존재하는 데이터들의 시간대가 겹치면 아래 결과 처럼 어떤 학생이, 무슨요일에, 어느 시간대에 무슨 과목이 배정되어 있는지 응답하도록 하였다.

위 기능을 구현하면서 에타로 시간표 짰던 기억이 많이 났었다 🙁

profile
학습 정리, 자기 개발을 위한 블로그

0개의 댓글