- Backend: AI generation fallbacks when OpenAI not configured, full exam submission saving all params (difficulty, rubric, entity, grading system, approval workflow) and creating linked question records per section - Backend: new exam session controller with get_session, autosave, submit, status, and results endpoints; student attempt/answer/score models - Backend: new controllers for entities, approval workflows, exam schedules - Frontend: exam session split-layout with passage panel, question types (MCQ, T/F/NG, gap-fill, writing, speaking), timer, and review dialog - Frontend: results page with percentage score, per-answer breakdown table - Frontend: generation page dynamic dropdowns, full payload submission - Frontend: updated types for ExamSessionSection, ExamQuestion options Made-with: Cursor
1.8 KiB
1.8 KiB
| 1 | id | name | model_id:id | group_id:id | perm_read | perm_write | perm_create | perm_unlink |
|---|---|---|---|---|---|---|---|---|
| 2 | access_encoach_exam_template_user | encoach.exam.template.user | model_encoach_exam_template | base.group_user | 1 | 1 | 1 | 1 |
| 3 | access_encoach_passage_user | encoach.passage.user | model_encoach_passage | base.group_user | 1 | 1 | 1 | 1 |
| 4 | access_encoach_audio_file_user | encoach.audio.file.user | model_encoach_audio_file | base.group_user | 1 | 1 | 1 | 1 |
| 5 | access_encoach_question_user | encoach.question.user | model_encoach_question | base.group_user | 1 | 1 | 1 | 1 |
| 6 | access_encoach_writing_prompt_user | encoach.writing.prompt.user | model_encoach_writing_prompt | base.group_user | 1 | 1 | 1 | 1 |
| 7 | access_encoach_speaking_card_user | encoach.speaking.card.user | model_encoach_speaking_card | base.group_user | 1 | 1 | 1 | 1 |
| 8 | access_encoach_rubric_user | encoach.rubric.user | model_encoach_rubric | base.group_user | 1 | 1 | 1 | 1 |
| 9 | access_encoach_rubric_group_user | encoach.rubric.group.user | model_encoach_rubric_group | base.group_user | 1 | 1 | 1 | 1 |
| 10 | access_encoach_exam_custom_user | encoach.exam.custom.user | model_encoach_exam_custom | base.group_user | 1 | 1 | 1 | 1 |
| 11 | access_encoach_exam_custom_section_user | encoach.exam.custom.section.user | model_encoach_exam_custom_section | base.group_user | 1 | 1 | 1 | 1 |
| 12 | access_encoach_exam_assignment_user | encoach.exam.assignment.user | model_encoach_exam_assignment | base.group_user | 1 | 1 | 1 | 1 |
| 13 | access_encoach_exam_schedule_user | encoach.exam.schedule.user | model_encoach_exam_schedule | base.group_user | 1 | 1 | 1 | 1 |
| 14 | access_encoach_exam_structure_user | encoach.exam.structure.user | model_encoach_exam_structure | base.group_user | 1 | 1 | 1 | 1 |
| 15 | access_encoach_student_attempt_user | encoach.student.attempt.user | model_encoach_student_attempt | base.group_user | 1 | 1 | 1 | 1 |
| 16 | access_encoach_student_answer_user | encoach.student.answer.user | model_encoach_student_answer | base.group_user | 1 | 1 | 1 | 1 |
| 17 | access_encoach_student_score_user | encoach.student.score.user | model_encoach_student_score | base.group_user | 1 | 1 | 1 | 1 |