배경
end_of_day_modal.html(FE1, #74)이 하루 종료 UI는 갖췄지만, eodSubmit 버튼은 아직 setTimeout으로 가짜 진행 애니메이션만 보여줄 뿐 실제 제출 로직이 없다. finalize_daily_plan() 서비스 함수는 이미 완성돼 있음.
작업 내용
planner:daily_plan_finalize (POST): 오늘의 DailyPlan을 finalize_daily_plan()으로 마감 처리
progress_record(#73)와 동일하게 모달에서 즉시 반영되는 기능이라 JSON API로 구현.
API 계약 (초안)
POST /planner/daily-plans/finalize/
Request: {} (또는 mark_unrecorded_as_not_done 옵션 필요 여부 검토)
Response 성공(200): {
"needs_recovery": bool,
"recovery_group_id": str | null,
"redirect_url": str // needs_recovery=true면 recovery_compare, false면 dashboard
}
Response 실패(400/404/409): {"message": str}
확인 필요 사항
end_of_day_modal.html이 이미 "완료하지 못한 작업이 있으면 복구 방법을 선택할 수 있는 화면으로 안내해드릴게요"라고 안내하므로, mark_unrecorded_as_not_done=True를 기본값으로 고정할지 확인
finalize_daily_plan()이 반환하는 needs_recovery/recovery_plans(maintain_volume/core_focus)를 프론트에 어떻게 넘길지 — recovery_compare View가 아직 없어서(#82에서 화면만 진행 중), 일단 recovery_group_id만 넘기고 이동은 recovery_compare View가 만들어지면 그때 연결
#73(progress_record)에서 정한 "오늘 날짜 + 활성 시험기간만" 제한 원칙 동일 적용
DailyPlanAlreadyFinalizedError, FutureDailyPlanFinalizeError, IncompleteProgressError 각각 어떤 메시지/상태코드로 응답할지
이번 이슈 범위 밖
테스트
- 정상 마감 (미완료 작업 없음) → needs_recovery=false
- 미완료 작업 있음 → needs_recovery=true, 복구안 생성 확인
- 오늘 아닌 계획 마감 시도 차단
- 이미 마감된 계획 재마감 시도 시 거부
- 진행 기록 없는 작업 있을 때 mark_unrecorded_as_not_done 정책대로 처리
- 다른 사용자 계획 접근 차단
배경
end_of_day_modal.html(FE1, #74)이 하루 종료 UI는 갖췄지만,eodSubmit버튼은 아직setTimeout으로 가짜 진행 애니메이션만 보여줄 뿐 실제 제출 로직이 없다.finalize_daily_plan()서비스 함수는 이미 완성돼 있음.작업 내용
planner:daily_plan_finalize(POST): 오늘의DailyPlan을finalize_daily_plan()으로 마감 처리progress_record(#73)와 동일하게 모달에서 즉시 반영되는 기능이라 JSON API로 구현.API 계약 (초안)
POST /planner/daily-plans/finalize/
Request: {} (또는 mark_unrecorded_as_not_done 옵션 필요 여부 검토)
Response 성공(200): {
"needs_recovery": bool,
"recovery_group_id": str | null,
"redirect_url": str // needs_recovery=true면 recovery_compare, false면 dashboard
}
Response 실패(400/404/409): {"message": str}
확인 필요 사항
end_of_day_modal.html이 이미 "완료하지 못한 작업이 있으면 복구 방법을 선택할 수 있는 화면으로 안내해드릴게요"라고 안내하므로,mark_unrecorded_as_not_done=True를 기본값으로 고정할지 확인finalize_daily_plan()이 반환하는needs_recovery/recovery_plans(maintain_volume/core_focus)를 프론트에 어떻게 넘길지 —recovery_compareView가 아직 없어서(#82에서 화면만 진행 중), 일단recovery_group_id만 넘기고 이동은recovery_compareView가 만들어지면 그때 연결#73(progress_record)에서 정한 "오늘 날짜 + 활성 시험기간만" 제한 원칙 동일 적용DailyPlanAlreadyFinalizedError,FutureDailyPlanFinalizeError,IncompleteProgressError각각 어떤 메시지/상태코드로 응답할지이번 이슈 범위 밖
recovery_compare(복구안 비교) View — 화면(feat: #68 복구안 비교 및 미리보기 화면 구현 #82)만 진행 중, 별도 이슈로 분리eodSubmit클릭 핸들러 fetch 연결 (API 계약 전달 후 FE1 작업)테스트