Skip to content

feat: #37 하루 마감 및 복구안 생성 로직 구현 - #38

Open
wngjs8114 wants to merge 2 commits into
devfrom
feature/#37-recovery-logic
Open

feat: #37 하루 마감 및 복구안 생성 로직 구현#38
wngjs8114 wants to merge 2 commits into
devfrom
feature/#37-recovery-logic

Conversation

@wngjs8114

Copy link
Copy Markdown
Collaborator

관련 이슈

Closes #37

작업 내용

하루 계획 마감(finalize_daily_plan)과 분량유지형/핵심집중형 복구안 생성(generate_recovery_options) 로직 구현. 계획 자체는 사용자 승인 전까지 건드리지 않고, RecoveryPlan/RecoveryPlanItem만 생성한다.

구조

  • progress_recorder.py
    • finalize_daily_plan(daily_plan): 마감 처리 + 복구 필요 판단 + recovery.py 위임
    • record_progress(): 마감된 계획의 항목은 수정 거부하도록 방어 추가
  • recovery.py (신규)
    • generate_recovery_options(): 분량유지형/핵심집중형 두 안 생성
    • 기존 scheduler.allocate_tasks_to_days()를 재사용해 재배치 계산

마감 정책

  • 미래 날짜 계획은 마감 불가 (과거/오늘은 허용 — 마감을 놓친 날도 나중에 복구 가능해야 함)
  • 조건부 UPDATE(filter(finalized_at__isnull=True).update(...))로 원자적 선점, SQLite에서도 안전하게 중복 마감 방지
  • 진행 기록(ProgressLog) 없는 항목이 하나라도 있으면 마감 거부, IncompleteProgressErrorfinalized_at도 트랜잭션 롤백으로 원복
  • 마감 후에는 record_progress()로 해당 계획 항목 수정 불가

복구안 정책

  • 복구 배치는 마감 시점과 무관하게 항상 내일부터 (오늘/과거 날짜에는 배치 안 함)
  • 분량 유지형: 작업 제외 없음. 배치 실패 시 안 자체를 만들지 않고 maintain_volume_failure_reason 반환
  • 핵심 집중형: 제외 우선순위 low+optional → low+basic → medium+optional 순으로 하나씩 제외하며 재배치 시도. importance=high 또는 depth=core는 절대 제외 안 함. 최소 1개 작업은 반드시 남기며, 전부 제외해야 하는 상황이면 core_focus=None + 실패 사유 반환
  • 같은 tier 내 제외 순서: 시험일 먼 과목 우선 → remaining_minutes 큰 것부터 → order/id 내림차순
  • remaining_minutes: 최신 speed_factorestimated_max 재계산 후, PARTIAL은 남은 완료율만큼만 반영 (평균값이 아닌 보수적 기준 — speed_calibrator의 평균값과는 목적이 다름)
  • NOT_DONEactual_minutes 입력값과 무관하게 항상 0으로 고정 저장

이번 PR 범위 밖

  • apply_recovery_plan() — 사용자가 복구안을 선택해 실제 계획에 반영 (다음 PR)
  • View/URL 연결

테스트

  • python manage.py test planner → 82개 통과 (기존 67 + 신규 15)
  • 신규 테스트: 분량유지형 성공/실패, 핵심집중형 최소 보호/전체제외 방지/보호작업 유지, 시험일 우선순위 보호, PARTIAL 남은시간 계산, 순차 중복 마감 방어, 마감 후 수정 차단, 과거/미래 마감 정책, 진행기록 누락 시 롤백, 미래 기존 작업의 가용시간 차감, NOT_DONE 강제 0분

@wngjs8114
wngjs8114 requested a review from 6ye0m August 1, 2026 14:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

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

1 participant