[달력 일정 구현 로직] 일정이 유기적으로 보여야하는 달력 일정 구성 로직
진행중인 사이드 프로젝트에서 달력의 일정을 유기적으로 조절해야 하는 상황이 생겼다.
그래서 서버 파트를 맡은 분과 함께 어떻게 이 로직을 구성할지 의논을 해봤다.
유기적이라는 말이 잘 와닿지 않을수도 있을 것 같아서 캘린더 디자인 이미지를 가져왔다.
위와 같이 톱니바퀴처럼? 일정이 짜여 들어가야 했다.
기존에 우리 팀 서버가 생각했던 방식은 매일 일정을 조회해오고, 그 날마다 있는 일정을 담아서 오는 방식이었다.
하지만 이렇게 할 경우 금요일, 토요일처럼 0번 인덱스가 비어서 보여져야하는 뷰의 구성을 어떻게 할 수 있을지에 대해서 물어봤었다.
그래서 내가 생각했던 부분은
1. 주단위로 일정을 가져온다.
왜냐하면 주 단위로 가져와야 해당 주의 일정의 종료 여부를 알기 쉬울것이라고 판단했다.
일요일 - 목요일 의 일정의 경우, 금요일을 조회한다고 생각했을 때, 주단위로 가져온 일정 목록에서 끝나는 날이 오늘보다 빠른게 있는지를 조회하면 이미 끝난 일정을 파악할 수 있기 때문이다.
2. 계산용 배열과 보내주기용 배열 (클라이언트에게 보내줄 Response용 배열)을 따로 둔다.
계산용 배열은 일주일 단위로 데이터를 운용?해야 하므로, 일 단위로 나누어야하는 보내주기용 배열과 분리하는게 맞다고 생각했다.
생각한 방법은 이러하다.
1. 주 단위로 (일 ~ 토) 일정들을 가져온다. 이 때 일정들은 시작 일자를 기준으로 정렬된다.
2. 가져온 일정들을 일자별로 계산 배열에 추가한다.
ex) 일요일에는 일요일에 시작되는 아이템 하나가 계산용 배열에 들어가고, 월요일에는 월요일에 시작되는 아이템 하나가 추가되는 식
이 때 아이템은 일정이 종료되기 전까지 스택처럼 쌓는다.
3. 종료된 일정이 있는 경우에는 해당 자리를 지우는게 아니라 공백으로 둔다.
빈 자리를 만들기 위함이다. 지우면 인덱스가 밀려 올라가므로 공백으로 처리한다고 생각했다.
4. 종료된 일정이 있다면, 그 다음 아이템 (계산용 배열에 2번 아이템까지 들어있다면 3번 아이템) 을 계산용 배열의 공백자리에 추가한다.
와 같은 플로우를 생각했다.
이렇게 하면 공백 자리는 물론, 빈 자리에 일정 추가까지 가능할 것이라는 생각이 들었다.
혹시 비슷한 뷰를 구성해야하는 분들께 내 생각들이 조금이나마 도움이 되었으면 좋겠다.