Skip to content

[feat] 구글 캘린더 일정을 투두로 저장 #222

Open

Description

@Jy000n

Feature Issue 📌

  • 기존 : 구글 캘린더 일정은 조회 시 제목만 내려주고 DB에 저장하지 않아, 티모의 투두처럼 타이머 실행/순서 변경/통계 반영을 할 수 없음
  • 변경 : 구글 일정을 투두로 저장해서 다른 투두처럼 타이머 실행, 순서 변경, 통계, AI 추천에 반영되게 함
  • 구글 일정을 가져와 저장하는 동작은 조회(GET)와 분리해 새 API(POST)로 추가
    • 프론트는 새로고침 때 동기화 API를 먼저 호출하고, 이후 투두 조회 API로 화면을 그림
    • 새로운 API만 추가하고, 기존 조회 API는 변경하지 않음

기획과 논의 내용

공통 정책

  • 구글 캘린더에서 가져오는 것 : 제목, 날짜
  • 구글 일정은 한 번에 전부 가져오지 않고, 사용자가 조회한 기간(렌더링되는 날짜 범위)의 일정만 그때그때 투두로 저장
    • 조회하지 않은 기간의 일정은 티모에 저장되지 않음
  • 반복 일정은 티모의 반복 일정 정책으로 들어오지 않고 매번 별개의 투두로 들어옴
    • 월요일 매주 반복 일정이면 월요일마다 투두를 개별 생성해놓은 것처럼.
  • 티모 내에서 소요 시간을 설정해야 타이머 실행 가능 (소요 시간 없이도 완료 처리는 가능)
  • 구글 일정 투두는 연동 해제 후에도 항상 구글 일정 투두로 취급

결정된 정책

  1. 티모에서 구글 일정 투두의 수정/삭제 1차 스프린트 내에서는 불가능
    • 소요시간, 순서, 태그, 아이콘, 메모, 서브태스크, 완료 체크는 티모에서 자유롭게 사용 가능
    • 구글에서의 수정/삭제는 티모에 반영
    • 단, 구글에서 삭제되었지만 타이머 기록이 있어 남아 있는 일정(구글에서 삭제된 일정)은 사용자가 직접 삭제 가능
  2. 구글에서의 일정 수정/삭제 시 티모에 있던 투두 처리
    • 타이머 기록 없는 투두 : 티모에서도 같이 삭제
    • 타이머 기록 있는 투두 : 통계, 타임박스에 쓰이므로 삭제하지 않고 구글에서 삭제된 일정으로 표시 후 유지
  3. 캘린더 연동 해제, 재연동 시 투두 처리
    • 중도 연동 해제 시 : 오늘 이후(내일부터)의 연동 투두만 삭제, 이전 투두는 유지
    • 재연동 시 : 현재처럼 렌더링되는 부분만큼씩 가져오기 (구글 일정 ID로 매칭해 중복 방지)

1차 스프린트에서 제외 (잘 발생하지 않을 것 같은 예외 상황이라 이후 논의)

  1. 하루 투두 최대 20개 제한
    • 구글 일정까지 가져올 때 합산 20개가 넘어갔을 때의 처리 방법
    • (1차 스프린트 임시 처리 방법) 구글 일정은 모두 가져오되, 하루 20개 초과 시 사용자가 직접 새로운 투두는 생성 불가
  2. 투두 제목 30자 제한
    • 구글 일정 제목이 30자를 넘겼을 때의 처리 방법
    • (1차 스프린트 임시 처리 방법) 제목 30자까지만 잘라서 저장

Todo ✔️

  • 관련 API 명세서 작성+수정
  • Todo에 구글 일정 구분(출처, 구글 일정 ID) 컬럼 추가, (user, 구글 일정 ID) 유니크 제약으로 중복 방지
  • 구글 일정 동기화 API 추가 (POST /api/v1/users/calendar/events/sync)
    • 요청한 기간의 구글 일정을 가져와 투두로 신규 저장
    • 동시 요청 시에도 중복 투두가 생기지 않도록 처리
  • 구글 일정 투두의 제목/날짜 수정, 삭제 불가 처리
  • 구글에서 삭제된 일정의 타이머 기록 유무별 처리, 구글에서 삭제된 일정 명시적 표시
  • 연동 해제 시 오늘 이후 구글 일정 투두 삭제
  • 홈 조회(GET /api/v1/home, GET /api/v1/home/today) 응답에 구글 일정 구분 필드 추가
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions