This document provides a complete reference for all routes, blueprints, HTTP methods, authorization levels, parameters, and behaviors in the BrainCheck web application.
- Overview & Route Conventions
- Root Routing
- Authentication Blueprint (
auth_bp) - Dashboard Blueprint (
main_bp) - Quiz Engine Blueprint (
quiz_bp) - Admin Blueprint (
admin_bp) - Error Handling & Redirect Semantics
- Session Authentication: Protected endpoints require standard session cookie generated upon successful login.
- CSRF Tokens: All
POSTendpoints must submit a validcsrf_tokenin form data. - URL Prefixes:
- Auth:
/auth - Main/Dashboard:
/dashboard - Quiz Engine:
/quiz - Admin Portal:
/admin
- Auth:
- Controller:
app.index - Access Level: Public
- Behavior: Redirects immediately to
main.dashboard(/dashboard/). - Response:
302 Found->Location: /dashboard/
- Access: Public (Redirects to
/dashboard/if already authenticated) - Description: Renders registration form.
- Response:
200 OK(Template:auth/register.html)
- Access: Public
- Description: Creates a new student account.
- Request Form Data:
Field Type Required Description fullnamestringYes Student's full name emailstringYes Unique email address passwordstringYes Minimum 6 characters confirm_passwordstringYes Must match passwordcsrf_tokenstringYes CSRF protection token - Validation:
- Checks non-empty fields.
- Verifies minimum 6-character length for password.
- Checks password match.
- Checks for duplicate email in database.
- Responses:
- Success: Flash success message ->
302 Redirectto/auth/login - Validation Failure: Flash danger alert -> Re-renders
auth/register.html
- Success: Flash success message ->
- Access: Public (Redirects to
/dashboard/if already authenticated) - Description: Renders the login form.
- Response:
200 OK(Template:auth/login.html)
- Access: Public
- Description: Authenticates user credentials and initiates session.
- Request Form Data:
Field Type Required Description emailstringYes User's registered email passwordstringYes User password rememberstringNo Checkbox for persistent cookie session csrf_tokenstringYes CSRF token - Responses:
- Admin Success:
302 Redirectto/admin/ - User Success:
302 Redirectto/dashboard/(or?next=target) - Failure: Flash danger message ->
auth/login.html
- Admin Success:
- Access: Authenticated (
@login_required) - Description: Clears user session and terminates authentication.
- Response: Flash info alert ->
302 Redirectto/auth/login
- Access: Authenticated (
@login_required) - Description: Student dashboard displaying summary analytics, category list, and historical scores.
- Template Context:
total_quizzes(int): Count of attempts bycurrent_user.avg_score(float): Average percentage score across user attempts.best_score(float): Maximum percentage score achieved.categories(list): List of dictionaries containingid,name, andquestion_count.recent_attempts(list): Last 5QuizAttemptobjects ordered bycompleted_at desc.
- Response:
200 OK(Template:main/dashboard.html)
- Access: Authenticated (
@login_required) - Description: Lists all active categories with associated question count badges.
- Response:
200 OK(Template:quiz/categories.html)
- Access: Authenticated (
@login_required) - Description: Initializes an in-memory session quiz instance.
- Session Variables Initialized:
session["quiz_category_id"] = category_id session["quiz_category_name"] = category.name session["quiz_question_ids"] = shuffled_question_ids_list session["quiz_answers"] = {} session["quiz_current"] = 0 session["quiz_time_limit"] = config_quiz_time_limit session["quiz_start_time"] = current_utc_iso_timestamp
- Responses:
- No Questions Available: Flash warning -> Redirect to
/quiz/categories - Success:
302 Redirectto/quiz/take
- No Questions Available: Flash warning -> Redirect to
- Access: Authenticated (
@login_required) - Description: Renders active question at index
session["quiz_current"]. - Template Variables:
question: CurrentQuestionobject.current: 1-based current index.total: Total questions count.selected_answer: Previously selected option key (A,B,C, orD) if any.is_first/is_last: Navigation booleans.time_limit: Duration in seconds.start_time: ISO UTC timestamp.
- Response:
200 OK(Template:quiz/quiz.html)
- Access: Authenticated (
@login_required) - Description: Records option selection and updates question index pointer.
- Request Form Data:
Field Type Required Description selected_optionstringNo A,B,C, orDactionstringYes previous,next, orsubmitcsrf_tokenstringYes CSRF token - Responses:
- Previous: Decrements index -> Redirect to
/quiz/take - Next: Increments index -> Redirect to
/quiz/take - Submit: Redirect to
/quiz/submit
- Previous: Decrements index -> Redirect to
- Access: Authenticated (
@login_required) - Description: Compares recorded answers against database correct options, inserts
QuizAttempt, clears active quiz session keys, and stores result insession["quiz_result"]. - Response:
302 Redirectto/quiz/result
- Access: Authenticated (
@login_required) - Description: Renders score summary and detailed question answer breakdown. Pops
session["quiz_result"]to prevent stale review access. - Response:
200 OK(Template:quiz/result.html)
- Access: Authenticated (
@login_required) - Description: Displays full historical table of all past attempts made by the authenticated user.
- Response:
200 OK(Template:quiz/attempts.html)
Note: All endpoints under /admin are guarded by @admin_required.
- Description: Global administration overview with metric counters and system breakdown.
- Metrics: Total Users, Total Admins, Total Categories, Total Questions, Total Attempts, Platform Average Score, Recent 10 Attempts.
- Response:
200 OK(Template:admin/dashboard.html)
- Description: Category management view listing categories with question counts and category creation form.
- Response:
200 OK(Template:admin/categories.html)
- Description: Creates a new category entity.
- Form Data:
name(string, required) - Response: Flash status ->
302 Redirectto/admin/categories
- Description: Deletes target category and all linked questions + attempt records via cascade delete.
- Response: Flash success ->
302 Redirectto/admin/categories
- Description: Browse all questions with optional category filtering (
?category_id=<int>). - Response:
200 OK(Template:admin/questions.html)
- Description: Renders question creation form.
- Response:
200 OK(Template:admin/add_question.html)
- Description: Inserts a new MCQ question.
- Form Data:
category_id(int)question(text)option_a,option_b,option_c,option_d(string)correct_option(string:A,B,C, orD)
- Response: Flash success ->
302 Redirectto/admin/questions
- Description: Renders edit form populated with current question attributes.
- Response:
200 OK(Template:admin/edit_question.html)
- Description: Updates existing question record in database.
- Response: Flash success ->
302 Redirectto/admin/questions
- Description: Permanently removes a question entity.
- Response: Flash success ->
302 Redirectto/admin/questions
- Description: Lists all registered users and timestamps.
- Response:
200 OK(Template:admin/users.html)
- Description: Displays global log of all quiz attempts across all users in descending order.
- Response:
200 OK(Template:admin/attempts.html)
| Scenario | HTTP / Application Behavior | User Feedback |
|---|---|---|
| Unauthenticated Access to Protected Route | 302 Found -> /auth/login?next=<requested_path> |
Warning flash: "Please log in to access this page." |
Non-Admin Access to /admin/* |
302 Found -> /dashboard/ |
Danger flash: "Access denied. Admin privileges required." |
Entity Not Found (404) |
404 Not Found handled by Flask |
Standard 404 response |
| Missing Quiz Session | 302 Found -> /quiz/categories |
Warning flash: "No active quiz session." |