Skip to content

사용자 커스텀 복습 주기 관리 기능 구현 #52

Description

@jhan0121

✨ 구현 할 기능

사용자가 자신만의 복습 템포에 맞춰 주기를 설정할 수 있는 커스텀 주기 기능을 도입합니다.
기존의 단일 고정 주기 외에 사용자가 직접 주기를 생성, 수정, 삭제할 수 있도록 확장합니다.

  • 기본 주기: 서비스 제공, 수정/삭제 불가
  • 커스텀 주기:사용자 생성, 수정/삭제 가능 (최대 5개)

📢 구현 방식

1. 정책 및 제약 조건

  • 보유 개수: 커스텀 주기는 인당 최대 5개로 제한 (초과 시 생성 불가)
  • 시간 설정:
    • 최소 10분 단위로만 설정 가능 (예: 10분, 90분 가능 / 15분 불가)
    • 첫 번째 주기는 등록 시점으로부터 최소 10분 이상
    • 마지막 회차는 등록일 기준 1년(365일) 이내여야 함

2. 데이터 처리

  • 전송 포맷: ISO 8601 Duration (예: PT10M, P1D)을 사용하여 프론트/백엔드 간 데이터 통신 및 Duration 호환성 확보
  • 데이터 저장:
    • Cycle 테이블과 Review 테이블을 강하게 결합하지 않음
    • 리뷰 생성 시점의 주기 데이터를 사용하여 Review 행을 개별 생성하므로, 커스텀 주기가 삭제되어도 이미 생성된 리뷰 데이터는 보존

3. API 설계

  • 조회: GET /api/v1/cycles/custom
  • 생성: POST /api/v1/cycles/custom
  • 수정: PUT /api/v1/cycles/custom/{cycleId}
  • 삭제: DELETE /api/cycles/custom/{cycleId}

📑 기능 명세

  • 커스텀 주기 조회 API 개발
  • 커스텀 주기 생성 API 개발
    • 요청 Body(durations)의 ISO 8601 포맷 파싱 및 검증
    • 커스텀 주기 보유 개수(5개 미만) 확인 로직
    • 시간 단위(10분), 최소 간격, 최대 기간(1년) 검증 로직 구현
  • 커스텀 주기 수정 API 개발
    • 본인 소유 주기 여부 확인
    • '기본 주기' 수정 시도 차단
    • 변경된 주기에 대한 시간/기간 유효성 검증 수행
  • 커스텀 주기 삭제 API 개발
    • 본인 소유 주기 여부 확인
    • '기본 주기' 삭제 시도 차단 (403 Forbidden)
  • 테스트 코드 작성
    • 단위 테스트 및 통합 테스트 작성

📕 래퍼런스

Metadata

Metadata

Assignees

Labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions