feat: #57 계획 가능성 판정 및 초기 계획 생성 View 연결 - #58
Conversation
|
확인한 것들
calculate_feasibility(required_min_minutes, required_max_minutes, available_minutes) 호출부와 반환 딕셔너리 키(status, required_min_minutes, required_recommended_minutes, available_minutes) 다 일치
python 테스트(test_plan_generate_ignores_past_available_time)로 실제 확인했고, DailyPlan 개수가 0인 것까지 검증해서 신뢰도 높아요.
python manage.py test planner → Ran 112 tests ... OK (말씀하신 숫자와 정확히 일치)
사소한 것 하나 (블로킹 아님) _validate_task_readiness()에서 "과목에 확정 안 된 작업이 있음"과 "그 과목에 작업 자체가 하나도 없음"이 같은 메시지("학습 작업이 확정되지 않은 과목이 있습니다")로 나와요. 기능상 둘 다 막는 건 맞는데, 사용자 입장에서 "작업을 안 만든 건지 확정을 안 한 건지" 구분이 안 될 수 있어요. 급한 건 아니에요. 결론: 승인하셔도 될 것 같아요. |
관련 이슈
Closes #57
작업 내용
planner 서비스 로직(scheduler, feasibility_checker, schedule_generator)은 이미 구현·머지돼 있었지만 이를 호출하는 View/URL이 전혀 없었음. 확정된 View 연결 우선순위의 첫 단계로 계획 가능성 판정 및 초기 계획 생성 흐름을 연결한다.
planner:feasibility(GET): 시험기간 전체 가용시간·확정 작업 기준 가능성 판정 표시planner:plan_generate(POST): 가능성 재검증 후generate_schedule()호출, 실패 시 사유별 안내planner:plan_complete(GET): 생성된 DailyPlan 요약 표시검증 로직
_validate_task_readiness(): 과목이 여러 개인데 일부만 확정된 상태로 조용히 계획이 생성되는 것 방지generate_schedule()의 예외를 사유별로 안내ScheduleAlreadyExistsError→ 기존 계획으로 이동UnallocatedTasksError→ "날짜별 가능시간 제약으로 일부 작업을 배치하지 못했습니다"MismatchedExamPeriodError/DuplicateTaskAllocationError→ 일반 오류 안내정책 확정 사항 (리뷰 과정에서 정리)
ExamPeriodStatus.ACTIVE전환 로직은 제거함 —period_create()가 이미 생성 시점에 ACTIVE로 저장하므로plan_generate에서 다시 설정하는 건 의미 없는 코드였음ScheduleHasProgressError는 이 View에서 처리하지 않음 —replace_existing=False로만 호출하므로 이 경로에서는 발생하지 않음 (전체 재생성 정책이 아직 없음)AvailableTime이 exam_period 단위라 과목별 배분 정책 없이는 계산 불가 (style: #49 대시보드 화면 구현 #51 리뷰에서 확정된 동일 제약)템플릿
feasibility.html,plan_complete.html은 최소 뼈대만 구현 (base.html의{% block content %}활용). FE1이 Figma 기준 실제 디자인으로 교체 예정.테스트
python manage.py test planner→ 112개 통과 (기존 102 + 신규 10)이번 PR 범위 밖