# oldfather123/onlineexam architecture

> Architecture diagram of the GitHub repository oldfather123/onlineexam, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/oldfather123/onlineexam
- Repository: https://github.com/oldfather123/onlineexam

## Overview

This is an online examination system with teacher-facing question and paper preparation, exam administration, manual/automatic marking, and student-facing exams, results analysis, and error archives. The main visible workflow is configuring a paper from question-bank items, then conducting exams and reviewing submitted answers. The Vue router documents the broader role-based product areas; sampled views confirm paper configuration and review API usage. Backend domain apps are present, but their endpoint wiring and model interactions were not sampled, so those links are not inferred.

Main entry points: [`Frontend/src/router/index.ts`](https://github.com/oldfather123/onlineexam/blob/main/Frontend/src/router/index.ts) (Role-based routes), [`Frontend/src/views/papers/PaperConfigureView.vue`](https://github.com/oldfather123/onlineexam/blob/main/Frontend/src/views/papers/PaperConfigureView.vue) (Paper configuration), [`Frontend/src/main.ts`](https://github.com/oldfather123/onlineexam/blob/main/Frontend/src/main.ts) (Vue entry), [`Frontend/src/views/reviews/ReviewsView.vue`](https://github.com/oldfather123/onlineexam/blob/main/Frontend/src/views/reviews/ReviewsView.vue) (Marking center)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["Web application"]
  node_layout["Application layout<br/>[AppLayout.vue]"]
  node_dashboard["Dashboard<br/>[DashboardView.vue]"]
  node_login["Login<br/>[LoginView.vue]"]
  node_questions_view["Question bank<br/>[QuestionsView.vue]"]
  node_papers_view["Paper management<br/>[PapersView.vue]"]
  node_paper_config["Paper configuration"]
  node_exams_view["Exam taking<br/>[ExamTakingView.vue]"]
  node_reviews_view["Marking center<br/>[ReviewsView.vue]"]
  node_analysis_view["Score analysis<br/>[AnalysisView.vue]"]
  node_errors_view["Error archive"]
  node_users_view["User management<br/>[UsersView.vue]"]
end

subgraph group_client_api["Client API"]
  node_users_api["User API<br/>[users.ts]"]
  node_questions_api["Question API<br/>[questions.ts]"]
  node_papers_api["Paper API<br/>[papers.ts]"]
  node_exams_api["Exam API<br/>[exams.ts]"]
  node_scores_api["Score API<br/>[scores.ts]"]
  node_http["HTTP client<br/>[http.ts]"]
end

subgraph group_backend["Backend domains"]
  node_exam_backend["Exam domain<br/>[views.py]"]
  node_paper_backend["Paper domain<br/>[views.py]"]
  node_question_backend["Question domain<br/>[views.py]"]
  node_score_backend["Score domain<br/>[views.py]"]
  node_user_backend["User domain<br/>[views.py]"]
  node_exam_store[("Exam records<br/>[models.py]")]
  node_paper_store[("Paper records<br/>[models.py]")]
  node_question_store[("Question records<br/>[models.py]")]
  node_score_store[("Score records<br/>[models.py]")]
  node_user_store[("User records<br/>[models.py]")]
end

subgraph group_runtime["Application runtime"]
  node_entry["Vue entry<br/>[main.ts]"]
  node_router["Role-based routes<br/>[index.ts]"]
  node_session["Session state<br/>[session.ts]"]
end

node_user(("Teacher or student"))

node_user -->|"uses"| node_entry
node_entry -->|"installs"| node_router
node_entry -->|"restores"| node_session
node_router -->|"dispatches"| node_layout
node_router -->|"dispatches"| node_login
node_router -->|"dispatches"| node_dashboard
node_router -->|"dispatches"| node_questions_view
node_router -->|"dispatches"| node_papers_view
node_router -->|"dispatches"| node_paper_config
node_router -->|"dispatches"| node_exams_view
node_router -->|"dispatches"| node_reviews_view
node_router -->|"dispatches"| node_analysis_view
node_router -->|"dispatches"| node_errors_view
node_router -->|"dispatches"| node_users_view
node_session -->|"calls"| node_users_api
node_paper_config -->|"calls"| node_papers_api
node_paper_config -->|"calls"| node_questions_api
node_reviews_view -->|"calls"| node_scores_api

click node_entry "https://github.com/oldfather123/onlineexam/blob/main/Frontend/src/main.ts"
click node_router "https://github.com/oldfather123/onlineexam/blob/main/Frontend/src/router/index.ts"
click node_session "https://github.com/oldfather123/onlineexam/blob/main/Frontend/src/stores/session.ts"
click node_layout "https://github.com/oldfather123/onlineexam/blob/main/Frontend/src/layouts/AppLayout.vue"
click node_dashboard "https://github.com/oldfather123/onlineexam/blob/main/Frontend/src/views/DashboardView.vue"
click node_login "https://github.com/oldfather123/onlineexam/blob/main/Frontend/src/views/LoginView.vue"
click node_questions_view "https://github.com/oldfather123/onlineexam/blob/main/Frontend/src/views/questions/QuestionsView.vue"
click node_papers_view "https://github.com/oldfather123/onlineexam/blob/main/Frontend/src/views/papers/PapersView.vue"
click node_paper_config "https://github.com/oldfather123/onlineexam/blob/main/Frontend/src/views/papers/PaperConfigureView.vue"
click node_exams_view "https://github.com/oldfather123/onlineexam/blob/main/Frontend/src/views/exams/ExamTakingView.vue"
click node_reviews_view "https://github.com/oldfather123/onlineexam/blob/main/Frontend/src/views/reviews/ReviewsView.vue"
click node_analysis_view "https://github.com/oldfather123/onlineexam/blob/main/Frontend/src/views/analysis/AnalysisView.vue"
click node_errors_view "https://github.com/oldfather123/onlineexam/blob/main/Frontend/src/views/errors/ErrorArchivesView.vue"
click node_users_view "https://github.com/oldfather123/onlineexam/blob/main/Frontend/src/views/users/UsersView.vue"
click node_users_api "https://github.com/oldfather123/onlineexam/blob/main/Frontend/src/api/users.ts"
click node_questions_api "https://github.com/oldfather123/onlineexam/blob/main/Frontend/src/api/questions.ts"
click node_papers_api "https://github.com/oldfather123/onlineexam/blob/main/Frontend/src/api/papers.ts"
click node_exams_api "https://github.com/oldfather123/onlineexam/blob/main/Frontend/src/api/exams.ts"
click node_scores_api "https://github.com/oldfather123/onlineexam/blob/main/Frontend/src/api/scores.ts"
click node_http "https://github.com/oldfather123/onlineexam/blob/main/Frontend/src/api/http.ts"
click node_exam_backend "https://github.com/oldfather123/onlineexam/blob/main/Backend/src/apps/Exam/views.py"
click node_paper_backend "https://github.com/oldfather123/onlineexam/blob/main/Backend/src/apps/Paper/views.py"
click node_question_backend "https://github.com/oldfather123/onlineexam/blob/main/Backend/src/apps/Question/views.py"
click node_score_backend "https://github.com/oldfather123/onlineexam/blob/main/Backend/src/apps/Score/views.py"
click node_user_backend "https://github.com/oldfather123/onlineexam/blob/main/Backend/src/apps/User/views.py"
click node_exam_store "https://github.com/oldfather123/onlineexam/blob/main/Backend/src/apps/Exam/models.py"
click node_paper_store "https://github.com/oldfather123/onlineexam/blob/main/Backend/src/apps/Paper/models.py"
click node_question_store "https://github.com/oldfather123/onlineexam/blob/main/Backend/src/apps/Question/models.py"
click node_score_store "https://github.com/oldfather123/onlineexam/blob/main/Backend/src/apps/Score/models.py"
click node_user_store "https://github.com/oldfather123/onlineexam/blob/main/Backend/src/apps/User/models.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_layout,node_dashboard,node_login,node_questions_view,node_papers_view,node_paper_config,node_exams_view,node_reviews_view,node_analysis_view,node_errors_view,node_users_view toneBlue
class node_users_api,node_questions_api,node_papers_api,node_exams_api,node_scores_api,node_http toneAmber
class node_exam_backend,node_paper_backend,node_question_backend,node_score_backend,node_user_backend,node_exam_store,node_paper_store,node_question_store,node_score_store,node_user_store toneMint
class node_entry,node_router,node_session toneRose
class node_user toneIndigo
```

## Components

### Web application

- [Application layout](https://github.com/oldfather123/onlineexam/blob/main/Frontend/src/layouts/AppLayout.vue): `Frontend/src/layouts/AppLayout.vue`
- [Dashboard](https://github.com/oldfather123/onlineexam/blob/main/Frontend/src/views/DashboardView.vue): `Frontend/src/views/DashboardView.vue`
- [Login](https://github.com/oldfather123/onlineexam/blob/main/Frontend/src/views/LoginView.vue): `Frontend/src/views/LoginView.vue`
- [Question bank](https://github.com/oldfather123/onlineexam/blob/main/Frontend/src/views/questions/QuestionsView.vue): `Frontend/src/views/questions/QuestionsView.vue`
- [Paper management](https://github.com/oldfather123/onlineexam/blob/main/Frontend/src/views/papers/PapersView.vue): `Frontend/src/views/papers/PapersView.vue`
- [Paper configuration](https://github.com/oldfather123/onlineexam/blob/main/Frontend/src/views/papers/PaperConfigureView.vue): `Frontend/src/views/papers/PaperConfigureView.vue`
- [Exam taking](https://github.com/oldfather123/onlineexam/blob/main/Frontend/src/views/exams/ExamTakingView.vue): `Frontend/src/views/exams/ExamTakingView.vue`
- [Marking center](https://github.com/oldfather123/onlineexam/blob/main/Frontend/src/views/reviews/ReviewsView.vue): `Frontend/src/views/reviews/ReviewsView.vue`
- [Score analysis](https://github.com/oldfather123/onlineexam/blob/main/Frontend/src/views/analysis/AnalysisView.vue): `Frontend/src/views/analysis/AnalysisView.vue`
- [Error archive](https://github.com/oldfather123/onlineexam/blob/main/Frontend/src/views/errors/ErrorArchivesView.vue): `Frontend/src/views/errors/ErrorArchivesView.vue`
- [User management](https://github.com/oldfather123/onlineexam/blob/main/Frontend/src/views/users/UsersView.vue): `Frontend/src/views/users/UsersView.vue`

### Client API

- [User API](https://github.com/oldfather123/onlineexam/blob/main/Frontend/src/api/users.ts): `Frontend/src/api/users.ts`
- [Question API](https://github.com/oldfather123/onlineexam/blob/main/Frontend/src/api/questions.ts): `Frontend/src/api/questions.ts`
- [Paper API](https://github.com/oldfather123/onlineexam/blob/main/Frontend/src/api/papers.ts): `Frontend/src/api/papers.ts`
- [Exam API](https://github.com/oldfather123/onlineexam/blob/main/Frontend/src/api/exams.ts): `Frontend/src/api/exams.ts`
- [Score API](https://github.com/oldfather123/onlineexam/blob/main/Frontend/src/api/scores.ts): `Frontend/src/api/scores.ts`
- [HTTP client](https://github.com/oldfather123/onlineexam/blob/main/Frontend/src/api/http.ts): `Frontend/src/api/http.ts`

### Backend domains

- [Exam domain](https://github.com/oldfather123/onlineexam/blob/main/Backend/src/apps/Exam/views.py): `Backend/src/apps/Exam/views.py`
- [Paper domain](https://github.com/oldfather123/onlineexam/blob/main/Backend/src/apps/Paper/views.py): `Backend/src/apps/Paper/views.py`
- [Question domain](https://github.com/oldfather123/onlineexam/blob/main/Backend/src/apps/Question/views.py): `Backend/src/apps/Question/views.py`
- [Score domain](https://github.com/oldfather123/onlineexam/blob/main/Backend/src/apps/Score/views.py): `Backend/src/apps/Score/views.py`
- [User domain](https://github.com/oldfather123/onlineexam/blob/main/Backend/src/apps/User/views.py): `Backend/src/apps/User/views.py`
- [Exam records](https://github.com/oldfather123/onlineexam/blob/main/Backend/src/apps/Exam/models.py): `Backend/src/apps/Exam/models.py`
- [Paper records](https://github.com/oldfather123/onlineexam/blob/main/Backend/src/apps/Paper/models.py): `Backend/src/apps/Paper/models.py`
- [Question records](https://github.com/oldfather123/onlineexam/blob/main/Backend/src/apps/Question/models.py): `Backend/src/apps/Question/models.py`
- [Score records](https://github.com/oldfather123/onlineexam/blob/main/Backend/src/apps/Score/models.py): `Backend/src/apps/Score/models.py`
- [User records](https://github.com/oldfather123/onlineexam/blob/main/Backend/src/apps/User/models.py): `Backend/src/apps/User/models.py`

### Application runtime

- [Vue entry](https://github.com/oldfather123/onlineexam/blob/main/Frontend/src/main.ts): `Frontend/src/main.ts`
- [Role-based routes](https://github.com/oldfather123/onlineexam/blob/main/Frontend/src/router/index.ts): `Frontend/src/router/index.ts`
- [Session state](https://github.com/oldfather123/onlineexam/blob/main/Frontend/src/stores/session.ts): `Frontend/src/stores/session.ts`

### Other components

- **Teacher or student**

## Connections

- Teacher or student → Vue entry: uses
- Vue entry → Role-based routes: installs
- Vue entry → Session state: restores
- Role-based routes → Application layout: dispatches
- Role-based routes → Login: dispatches
- Role-based routes → Dashboard: dispatches
- Role-based routes → Question bank: dispatches
- Role-based routes → Paper management: dispatches
- Role-based routes → Paper configuration: dispatches
- Role-based routes → Exam taking: dispatches
- Role-based routes → Marking center: dispatches
- Role-based routes → Score analysis: dispatches
- Role-based routes → Error archive: dispatches
- Role-based routes → User management: dispatches
- Session state → User API: calls
- Paper configuration → Paper API: calls
- Paper configuration → Question API: calls
- Marking center → Score API: calls
