Skip to content

feat: exams,accounts의 view 구현 및 기존 exams 모델의 name 수정 - #34

Open
h2ew0n wants to merge 2 commits into
devfrom
feature/#24-accounts,exams-view
Open

feat: exams,accounts의 view 구현 및 기존 exams 모델의 name 수정#34
h2ew0n wants to merge 2 commits into
devfrom
feature/#24-accounts,exams-view

Conversation

@h2ew0n

@h2ew0n h2ew0n commented Jul 31, 2026

Copy link
Copy Markdown
Collaborator

관련 이슈

#24

주요 변경 사항

1. exams 모델 수정 (Refactoring)

  • 과목명 필드 수정: Exam 모델 내 필드명을 최신 명세 및 AI 분석 모듈 연동 기준에 맞춰 subject_name 으로 기존 name에서 변경
  • 검증(Validation) 및 관계 정제:
    • StudyTaskestimated_min_minutesestimated_max_minutes보다 크지 않도록 검증
    • StudyTask.examStudyMaterial.exam 참조 일치 검증 로직 반영

2. accounts 앱 View & Form 구현

  • 회원가입 / 로그인 / 로그아웃 뷰 구현:
    • 이메일 기반 로그인 시스템 지원 (AuthenticationForm 커스텀)
    • 회원가입시 필수값 검증 및 Bootstrap 스타일 위젯 반영
  • Form - View 이름 불일치 수정:
    • SignupForm, LoginForm 클래스명 매핑 정리 (CustomUserCreationForm, CustomAuthenticationForm 사용 정제)

3. exams 앱 View 구현

  • 시험기간(ExamPeriod) CRUD 뷰 구현: 목록 조회, 생성, 상세 보기
  • 과목(Exam) CRUD 뷰 구현: 시험기간 내 개별 과목 추가 및 관리
  • 가용시간(AvailableTime) 입력 뷰 구현: 시험기간 내 일자별 공부 가능 시간 설정/수정 FormSet 연동
  • 학습 자료(StudyMaterial) 등록 및 상세 뷰 구현: PDF/텍스트 기반 학습 범위 업로드 및 텍스트 파싱 상태 조회 뷰 구현

🔍 테스트 및 검증 사항

  • Django Shell 및 로컬 서버(runserver)를 통한 URL 라우팅 (reverse()) 검증 완료
  • 회원가입, 로그인, 로그아웃 정상 동작 확인
  • 시험기간 생성 및 하위 과목/가용시간 정상 등록 확인
  • Exam.name 필드 수정에 따른 템플릿 및 관련 참조 코드 에러 유무 점검 완료

@wngjs8114

wngjs8114 commented Jul 31, 2026

Copy link
Copy Markdown
Collaborator

전체적인 accounts/exams View 구현과 사용자 소유권 필터링 방향은 좋습니다. 회원가입 시 username=email로 저장하도록 수정한 부분도 확인했습니다.

accounts/exams URL 연결은 PR #35에서 별도로 구현된 것을 확인하여, 이번 PR에서는 아래 사항만 수정 부탁드립니다.

  1. Exam.__str__()가 아직 self.name을 사용하고 있어 self.subject_name으로 수정이 필요합니다.

  2. 시험기간 수정 시 기간을 축소하면 수정된 범위 밖의 AvailableTime 데이터가 남을 수 있습니다. 수정된 start_dateend_date 범위를 벗어난 데이터가 정리되도록 처리 부탁드립니다.

  3. 이번 PR에서 구현하거나 수정한 범위에 대해 아래 테스트도 추가되면 좋겠습니다.

  • 서로 다른 이메일로 회원가입을 두 번 진행해도 정상적으로 생성되는지
  • 타 사용자의 시험기간, 과목 등 객체에 접근할 수 없는지
  • 시험기간 생성 및 수정이 정상적으로 동작하는지
  • 시험기간 축소 시 범위 밖의 AvailableTime이 정리되는지
  • Exam.__str__()가 정상적으로 동작하는지

study_task_confirm()에서 planner:feasibility로 이동하는 부분은 기존 URL/View 계약과 일치하므로 그대로 유지하면 될 것 같습니다. 해당 planner View와 URL은 planner 담당 작업에서 연결하겠습니다.

@wngjs8114

wngjs8114 commented Aug 2, 2026

Copy link
Copy Markdown
Collaborator

재확인했습니다.

Exam.__str__()subject_name 변경과 시험기간 축소 시 범위 밖 AvailableTime 삭제는 정상적으로 반영된 것을 확인했습니다. 서로 다른 이메일 및 중복 이메일 회원가입 테스트가 추가된 것도 확인했습니다.

다만 병합 전 아래 사항은 추가 반영이 필요합니다.

1. 로그인 리다이렉트 수정 커밋 확인

PR #35 마지막 댓글에는 기본 리다이렉트 변경과 url_has_allowed_host_and_scheme() 검증을 반영했다고 작성돼 있지만, 현재 브랜치의 accounts/views.py에는 여전히 아래 로직이 남아 있습니다.

  • 로그인된 사용자의 signup/login 접근 시 redirect('/')
  • 검증되지 않은 next_url로 바로 redirect()

로컬 수정사항이 아직 push되지 않은 것으로 보이므로, 실제 커밋을 push해주시고 관련 테스트도 추가 부탁드립니다.

2. 직접 추가한 학습 작업의 예상시간

study_task_create()에서 작업을 저장하기 전에 기존에 공유드린 아래 예상시간 계산 함수를 연결해주시기 바랍니다.

from planner.services.time_estimator import estimate_task_minutes
estimated_min, estimated_max = estimate_task_minutes(
    task_type=task.task_type,
    difficulty=task.difficulty,
    speed_factor=exam.speed_factor,
)

반환된 값을 각각 estimated_min_minutes, estimated_max_minutes에 저장하면 됩니다.

현재는 예상시간 계산 없이 저장하고 있어, 사용자가 직접 추가한 작업이 모델 기본값인 0분으로 저장되고 스케줄러 배치에서 정상적으로 처리되지 않습니다.

함수 시그니처와 호출 예시는 이전에 별도로 공유드린 내용과 동일합니다.

3. TEXT 자료의 추출 상태

StudyMaterial.status의 기본값은 PENDING인데, material_create()에서는 PDF와 TEXT를 구분하지 않고 저장하고 있습니다.

텍스트 직접 입력은 별도의 추출 과정이 필요하지 않으므로, material_type == MaterialType.TEXT인 경우 status = MaterialStatus.COMPLETED로 저장하도록 처리 부탁드립니다.

AI 분석 전 상태인 analysis_status는 기존 PENDING을 유지하면 될 것 같습니다.

4. #34와 #35의 상호 의존 문제

현재 #34에는 View와 URL reverse 테스트가 있지만 accounts/exams URL 패턴이 비어 있고, #35에는 URL 패턴이 있지만 View 구현이 포함돼 있지 않아 두 PR이 각각 독립적으로 정상 동작하지 않습니다.

#35의 URL 커밋을 이 브랜치에 반영하여 하나의 정상 동작하는 PR로 병합하는 방식을 권장합니다.

별도 PR로 유지할 경우에는 #34 병합 후 #35를 최신 dev 기준으로 rebase하고, 전체 URL 및 테스트가 정상 동작하는 것을 확인 부탁드립니다.

5. exams 테스트 추가

accounts 회원가입 테스트 2개는 확인했습니다. 다만 exams/tests.py는 아직 비어 있으므로 최소한 아래 동작에 대한 테스트를 추가 부탁드립니다.

  • 타 사용자의 시험기간·과목·학습자료 접근 차단
  • 시험기간 생성 및 수정
  • 시험기간 축소 시 범위 밖 AvailableTime 삭제
  • Exam.str() 동작
  • TEXT 자료 생성 시 추출 상태가 COMPLETED인지
  • 직접 추가한 작업의 예상시간이 0보다 큰지

수정 후 아래 명령 실행 결과도 PR에 남겨주세요.

python manage.py check
python manage.py makemigrations --check
python manage.py test accounts exams

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.

2 participants