Skip to content

[planner] 하루 마감 및 복구안 생성 로직 구현 #37

Description

@wngjs8114

배경

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 연결

확인 필요

  • finalize_daily_plan을 언제 트리거할지 (배치 vs 사용자 액션)
  • 재배치 대상 날짜 범위 (오늘 이후 ~ exam_date 이전으로 고정 가능한지)
  • RecoveryPlanItem.reason에 어느 수준의 설명을 담을지

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions