배경
RecoveryPlan/RecoveryPlanItem 모델과 관련 Enum(RecoveryType, RecoveryPlanStatus, RecoveryActionType)은 이미 정의돼 있으나(planner/models.py, core/choices.py), 이를 채우는 계산 로직(planner/services/recovery.py)과 하루 마감 판정 로직(finalize_daily_plan)이 아직 구현되지 않았습니다.
1차 PR 범위
planner/services/progress_recorder.py에 추가
def finalize_daily_plan(daily_plan) -> dict:
"""
해당 DailyPlan의 모든 DailyPlanItem 상태를 확인해
복구가 필요한지 판정한다.
- 미완료(not_done)/부분완료(partial) 항목이 있으면 복구 필요
- 반환: {"needs_recovery": bool, "unfinished_items": [...]}
"""
planner/services/recovery.py 신규 구현
def generate_recovery_options(exam_period, from_date) -> dict:
"""
finalize_daily_plan에서 복구가 필요하다고 판정된 미완료 작업들을
기준으로 분량유지형/핵심집중형 복구안 2종을 계산만 하고
RecoveryPlan/RecoveryPlanItem으로 저장한다 (status=PENDING 고정).
실제 DailyPlan/DailyPlanItem은 건드리지 않는다.
- 같은 계산 시점의 두 안은 동일한 recovery_group_id로 묶음
- 분량유지형: action_type=RESCHEDULE만 사용, 남은 가용시간에 재배치
- 핵심집중형: 중요도·depth 낮은 작업부터 action_type=EXCLUDE,
나머지는 RESCHEDULE
"""
이번 PR 범위 밖
apply_recovery_plan(recovery_plan) — 사용자가 안을 선택해 실제 계획에 반영 (다음 PR)
- View/URL 연결
확인 필요
배경
RecoveryPlan/RecoveryPlanItem모델과 관련 Enum(RecoveryType,RecoveryPlanStatus,RecoveryActionType)은 이미 정의돼 있으나(planner/models.py,core/choices.py), 이를 채우는 계산 로직(planner/services/recovery.py)과 하루 마감 판정 로직(finalize_daily_plan)이 아직 구현되지 않았습니다.1차 PR 범위
planner/services/progress_recorder.py에 추가planner/services/recovery.py신규 구현이번 PR 범위 밖
apply_recovery_plan(recovery_plan)— 사용자가 안을 선택해 실제 계획에 반영 (다음 PR)확인 필요
finalize_daily_plan을 언제 트리거할지 (배치 vs 사용자 액션)RecoveryPlanItem.reason에 어느 수준의 설명을 담을지