# maxkepter/mini-project architecture

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

- Interactive diagram: https://gitdiagram.com/maxkepter/mini-project
- Repository: https://github.com/maxkepter/mini-project

## Overview

This is a full-stack exam-management application: users authenticate, browse exams, take them, save answers, submit work, and review history/results; administrators manage users, exams, and questions. NestJS controllers delegate to feature services, with domain entities and repositories representing persistence. The README documents additional capabilities such as analytics, bulk operations, and question categorization, but sampled implementation excerpts do not establish their internal wiring. Frontend-to-API connections are represented by feature correspondence; frontend service implementations were not sampled.

Main entry points: [`frontend/services/exam.service.js`](https://github.com/maxkepter/mini-project/blob/main/frontend/services/exam.service.js) (Exam client), [`frontend/pages/admin`](https://github.com/maxkepter/mini-project/tree/main/frontend/pages/admin) (Admin pages), [`backend/mini-project/src/modules/auth/auth.controller.ts`](https://github.com/maxkepter/mini-project/blob/main/backend/mini-project/src/modules/auth/auth.controller.ts) (Auth endpoints), [`backend/mini-project/src/modules/auth/auth.service.ts`](https://github.com/maxkepter/mini-project/blob/main/backend/mini-project/src/modules/auth/auth.service.ts) (Auth service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["Nuxt application"]
  node_auth_pages["Login and registration"]
  node_exam_pages["Exam browsing"]
  node_take_page["Take exam<br/>[_examId.vue]"]
  node_history_pages["Exam history"]
  node_admin_pages["Admin pages"]
  node_auth_client["Auth client<br/>[auth.service.js]"]
  node_exam_client["Exam client<br/>[exam.service.js]"]
  node_student_client["Student exam client"]
  node_user_client["User client<br/>[user.service.js]"]
end

subgraph group_auth["Identity and access"]
  node_auth_controller["Auth endpoints<br/>[auth.controller.ts]"]
  node_auth_service["Auth service<br/>[auth.service.ts]"]
  node_token_service["Token service<br/>[token.service.ts]"]
end

subgraph group_management["Exam authoring"]
  node_user_controller["User endpoints<br/>[user.controller.ts]"]
  node_admin_user_controller["Admin user endpoints"]
  node_user_service["User service<br/>[user.service.ts]"]
  node_admin_exam_controller["Admin exam endpoints"]
  node_user_exam_controller["Exam browsing endpoints"]
  node_exam_service["Exam service<br/>[exam.service.ts]"]
  node_question_controller["Question endpoints"]
  node_question_service["Question service"]
end

subgraph group_participation["Student exams"]
  node_student_controller["Student exam endpoints"]
  node_student_service["Student exam service"]
end

subgraph group_domain["Domain persistence"]
  node_entities["Exam and user entities"]
  node_repositories["Domain repositories"]
  node_database[("MSSQL database")]
end

node_user(("Student or admin"))

node_user -->|"starts session"| node_auth_pages
node_user -->|"browses exams"| node_exam_pages
node_user -->|"takes exam"| node_take_page
node_user -->|"reviews history"| node_history_pages
node_user -->|"manages system"| node_admin_pages
node_auth_pages -->|"uses auth"| node_auth_client
node_exam_pages -->|"requests exams"| node_exam_client
node_take_page -->|"sends answers"| node_student_client
node_history_pages -->|"requests history"| node_student_client
node_admin_pages -->|"manages exams"| node_exam_client
node_admin_pages -->|"manages users"| node_user_client
node_auth_client -->|"calls auth API"| node_auth_controller
node_exam_client -->|"calls exam API"| node_user_exam_controller
node_exam_client -->|"calls admin API"| node_admin_exam_controller
node_student_client -->|"calls student API"| node_student_controller
node_user_client -->|"calls user API"| node_user_controller
node_auth_controller -->|"delegates auth"| node_auth_service
node_auth_controller -->|"refreshes token"| node_token_service
node_auth_service -->|"issues tokens"| node_token_service
node_auth_service -->|"uses user repository"| node_repositories
node_admin_user_controller -->|"delegates user tasks"| node_user_service
node_user_controller -->|"delegates profile"| node_user_service
node_admin_exam_controller -->|"delegates exam tasks"| node_exam_service
node_user_exam_controller -->|"delegates exam queries"| node_exam_service
node_question_controller -->|"delegates questions"| node_question_service
node_student_controller -->|"delegates exam actions"| node_student_service

click node_auth_pages "https://github.com/maxkepter/mini-project/tree/main/frontend/pages/auth"
click node_exam_pages "https://github.com/maxkepter/mini-project/tree/main/frontend/pages/exam"
click node_take_page "https://github.com/maxkepter/mini-project/blob/main/frontend/pages/exam/take/_examId.vue"
click node_history_pages "https://github.com/maxkepter/mini-project/tree/main/frontend/pages/exam/history"
click node_admin_pages "https://github.com/maxkepter/mini-project/tree/main/frontend/pages/admin"
click node_auth_client "https://github.com/maxkepter/mini-project/blob/main/frontend/services/auth.service.js"
click node_exam_client "https://github.com/maxkepter/mini-project/blob/main/frontend/services/exam.service.js"
click node_student_client "https://github.com/maxkepter/mini-project/blob/main/frontend/services/student-exam.service.js"
click node_user_client "https://github.com/maxkepter/mini-project/blob/main/frontend/services/user.service.js"
click node_auth_controller "https://github.com/maxkepter/mini-project/blob/main/backend/mini-project/src/modules/auth/auth.controller.ts"
click node_auth_service "https://github.com/maxkepter/mini-project/blob/main/backend/mini-project/src/modules/auth/auth.service.ts"
click node_token_service "https://github.com/maxkepter/mini-project/blob/main/backend/mini-project/src/modules/auth/token.service.ts"
click node_user_controller "https://github.com/maxkepter/mini-project/blob/main/backend/mini-project/src/modules/user/user.controller.ts"
click node_admin_user_controller "https://github.com/maxkepter/mini-project/blob/main/backend/mini-project/src/modules/user/admin.user.controller.ts"
click node_user_service "https://github.com/maxkepter/mini-project/blob/main/backend/mini-project/src/modules/user/user.service.ts"
click node_admin_exam_controller "https://github.com/maxkepter/mini-project/blob/main/backend/mini-project/src/modules/exam/admin-exam.controller.ts"
click node_user_exam_controller "https://github.com/maxkepter/mini-project/blob/main/backend/mini-project/src/modules/exam/user-exam.controller.ts"
click node_exam_service "https://github.com/maxkepter/mini-project/blob/main/backend/mini-project/src/modules/exam/exam.service.ts"
click node_question_controller "https://github.com/maxkepter/mini-project/blob/main/backend/mini-project/src/modules/quesiton/admin.question.controller.ts"
click node_question_service "https://github.com/maxkepter/mini-project/blob/main/backend/mini-project/src/modules/quesiton/question.service.ts"
click node_student_controller "https://github.com/maxkepter/mini-project/blob/main/backend/mini-project/src/modules/student-exam/student-exam.controller.ts"
click node_student_service "https://github.com/maxkepter/mini-project/blob/main/backend/mini-project/src/modules/student-exam/student-exam.service.ts"
click node_entities "https://github.com/maxkepter/mini-project/tree/main/backend/mini-project/src/domain/entities"
click node_repositories "https://github.com/maxkepter/mini-project/tree/main/backend/mini-project/src/domain/repository"

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_auth_pages,node_exam_pages,node_take_page,node_history_pages,node_admin_pages,node_auth_client,node_exam_client,node_student_client,node_user_client toneBlue
class node_auth_controller,node_auth_service,node_token_service toneAmber
class node_user_controller,node_admin_user_controller,node_user_service,node_admin_exam_controller,node_user_exam_controller,node_exam_service,node_question_controller,node_question_service toneMint
class node_student_controller,node_student_service toneRose
class node_entities,node_repositories,node_database,node_user toneIndigo
```

## Components

### Nuxt application

- [Login and registration](https://github.com/maxkepter/mini-project/tree/main/frontend/pages/auth): `frontend/pages/auth`
- [Exam browsing](https://github.com/maxkepter/mini-project/tree/main/frontend/pages/exam): `frontend/pages/exam`
- [Take exam](https://github.com/maxkepter/mini-project/blob/main/frontend/pages/exam/take/_examId.vue): `frontend/pages/exam/take/_examId.vue`
- [Exam history](https://github.com/maxkepter/mini-project/tree/main/frontend/pages/exam/history): `frontend/pages/exam/history`
- [Admin pages](https://github.com/maxkepter/mini-project/tree/main/frontend/pages/admin): `frontend/pages/admin`
- [Auth client](https://github.com/maxkepter/mini-project/blob/main/frontend/services/auth.service.js): `frontend/services/auth.service.js`
- [Exam client](https://github.com/maxkepter/mini-project/blob/main/frontend/services/exam.service.js): `frontend/services/exam.service.js`
- [Student exam client](https://github.com/maxkepter/mini-project/blob/main/frontend/services/student-exam.service.js): `frontend/services/student-exam.service.js`
- [User client](https://github.com/maxkepter/mini-project/blob/main/frontend/services/user.service.js): `frontend/services/user.service.js`

### Identity and access

- [Auth endpoints](https://github.com/maxkepter/mini-project/blob/main/backend/mini-project/src/modules/auth/auth.controller.ts): `backend/mini-project/src/modules/auth/auth.controller.ts`
- [Auth service](https://github.com/maxkepter/mini-project/blob/main/backend/mini-project/src/modules/auth/auth.service.ts): `backend/mini-project/src/modules/auth/auth.service.ts`
- [Token service](https://github.com/maxkepter/mini-project/blob/main/backend/mini-project/src/modules/auth/token.service.ts): `backend/mini-project/src/modules/auth/token.service.ts`

### Exam authoring

- [User endpoints](https://github.com/maxkepter/mini-project/blob/main/backend/mini-project/src/modules/user/user.controller.ts): `backend/mini-project/src/modules/user/user.controller.ts`
- [Admin user endpoints](https://github.com/maxkepter/mini-project/blob/main/backend/mini-project/src/modules/user/admin.user.controller.ts): `backend/mini-project/src/modules/user/admin.user.controller.ts`
- [User service](https://github.com/maxkepter/mini-project/blob/main/backend/mini-project/src/modules/user/user.service.ts): `backend/mini-project/src/modules/user/user.service.ts`
- [Admin exam endpoints](https://github.com/maxkepter/mini-project/blob/main/backend/mini-project/src/modules/exam/admin-exam.controller.ts): `backend/mini-project/src/modules/exam/admin-exam.controller.ts`
- [Exam browsing endpoints](https://github.com/maxkepter/mini-project/blob/main/backend/mini-project/src/modules/exam/user-exam.controller.ts): `backend/mini-project/src/modules/exam/user-exam.controller.ts`
- [Exam service](https://github.com/maxkepter/mini-project/blob/main/backend/mini-project/src/modules/exam/exam.service.ts): `backend/mini-project/src/modules/exam/exam.service.ts`
- [Question endpoints](https://github.com/maxkepter/mini-project/blob/main/backend/mini-project/src/modules/quesiton/admin.question.controller.ts): `backend/mini-project/src/modules/quesiton/admin.question.controller.ts`
- [Question service](https://github.com/maxkepter/mini-project/blob/main/backend/mini-project/src/modules/quesiton/question.service.ts): `backend/mini-project/src/modules/quesiton/question.service.ts`

### Student exams

- [Student exam endpoints](https://github.com/maxkepter/mini-project/blob/main/backend/mini-project/src/modules/student-exam/student-exam.controller.ts): `backend/mini-project/src/modules/student-exam/student-exam.controller.ts`
- [Student exam service](https://github.com/maxkepter/mini-project/blob/main/backend/mini-project/src/modules/student-exam/student-exam.service.ts): `backend/mini-project/src/modules/student-exam/student-exam.service.ts`

### Domain persistence

- [Exam and user entities](https://github.com/maxkepter/mini-project/tree/main/backend/mini-project/src/domain/entities): `backend/mini-project/src/domain/entities`
- [Domain repositories](https://github.com/maxkepter/mini-project/tree/main/backend/mini-project/src/domain/repository): `backend/mini-project/src/domain/repository`
- **MSSQL database**

### Other components

- **Student or admin**

## Connections

- Student or admin → Login and registration: starts session
- Student or admin → Exam browsing: browses exams
- Student or admin → Take exam: takes exam
- Student or admin → Exam history: reviews history
- Student or admin → Admin pages: manages system
- Login and registration → Auth client: uses auth
- Exam browsing → Exam client: requests exams
- Take exam → Student exam client: sends answers
- Exam history → Student exam client: requests history
- Admin pages → Exam client: manages exams
- Admin pages → User client: manages users
- Auth client → Auth endpoints: calls auth API
- Exam client → Exam browsing endpoints: calls exam API
- Exam client → Admin exam endpoints: calls admin API
- Student exam client → Student exam endpoints: calls student API
- User client → User endpoints: calls user API
- Auth endpoints → Auth service: delegates auth
- Auth endpoints → Token service: refreshes token
- Auth service → Token service: issues tokens
- Auth service → Domain repositories: uses user repository
- Admin user endpoints → User service: delegates user tasks
- User endpoints → User service: delegates profile
- Admin exam endpoints → Exam service: delegates exam tasks
- Exam browsing endpoints → Exam service: delegates exam queries
- Question endpoints → Question service: delegates questions
- Student exam endpoints → Student exam service: delegates exam actions
