# chaitanyakrishnaeedara/quiz-app architecture

> Architecture diagram of the GitHub repository chaitanyakrishnaeedara/quiz-app, 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/chaitanyakrishnaeedara/quiz-app
- Repository: https://github.com/chaitanyakrishnaeedara/quiz-app

## Overview

QuizApp is a console-based quiz and administration application. A user enters through the menu, registers or logs in, and is routed by role. Players select a category, answer shuffled questions, and receive a calculated, timestamped score that can be reviewed or ranked on the leaderboard. Admins manage questions, users, and score records. Services coordinate the workflows, repositories persist serialized data locally, and model classes represent the principal records. The workflow is supported by the README and sampled services; unsampled menu details are not expanded beyond documented capabilities.

Main entry points: [`src/service/MenuService.java`](https://github.com/chaitanyakrishnaeedara/quiz-app/blob/main/src/service/MenuService.java) (Console menus), [`src/service/UserService.java`](https://github.com/chaitanyakrishnaeedara/quiz-app/blob/main/src/service/UserService.java) (User operations), [`src/service/QuizService.java`](https://github.com/chaitanyakrishnaeedara/quiz-app/blob/main/src/service/QuizService.java) (Quiz workflow), [`src/app/Main.java`](https://github.com/chaitanyakrishnaeedara/quiz-app/blob/main/src/app/Main.java) (Application entry)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["Console entry"]
  node_main["Application entry<br/>[Main.java]"]
  node_menu["Console menus<br/>[MenuService.java]"]
end

subgraph group_identity["Identity and roles"]
  node_auth["Authentication<br/>[AuthService.java]"]
  node_user_service["User operations<br/>[UserService.java]"]
  node_user_model["User record<br/>[User.java]"]
  node_role_model["Access roles<br/>[Role.java]"]
end

subgraph group_quiz["Quiz and results"]
  node_quiz_service["Quiz workflow<br/>[QuizService.java]"]
  node_question_service["Question operations"]
  node_question_model["Question record<br/>[Question.java]"]
  node_score_service["Score operations<br/>[ScoreService.java]"]
  node_score_model["Score record<br/>[Score.java]"]
end

subgraph group_admin["Administration"]
end

subgraph group_persistence["Local persistence"]
  node_question_repo["Question repository<br/>[QuestionRepo.java]"]
  node_user_repo["User repository<br/>[UserRepo.java]"]
  node_score_repo["Score repository<br/>[ScoreRepo.java]"]
  node_questions_file[("Question data<br/>[questions.dat]")]
  node_users_file[("User data<br/>[users.dat]")]
  node_scores_file[("Score data<br/>[scores.dat]")]
end

node_player(("Player"))
node_administrator(("Administrator"))

node_player -->|"starts app"| node_main
node_administrator -->|"starts app"| node_main
node_main -->|"starts session"| node_menu
node_menu -->|"authenticates"| node_auth
node_auth -->|"checks users"| node_user_service
node_menu -->|"registers users"| node_user_service
node_menu -->|"manages users"| node_user_service
node_menu -->|"starts quiz"| node_quiz_service
node_menu -->|"manages questions"| node_question_service
node_menu -->|"reads scores"| node_score_service
node_quiz_service -->|"loads questions"| node_question_service
node_quiz_service -->|"saves result"| node_score_service
node_question_service -->|"delegates CRUD"| node_question_repo
node_user_service -->|"delegates users"| node_user_repo
node_score_service -->|"delegates scores"| node_score_repo
node_question_repo -->|"serializes questions"| node_questions_file
node_user_repo -->|"serializes users"| node_users_file
node_score_repo -->|"serializes scores"| node_scores_file

click node_main "https://github.com/chaitanyakrishnaeedara/quiz-app/blob/main/src/app/Main.java"
click node_menu "https://github.com/chaitanyakrishnaeedara/quiz-app/blob/main/src/service/MenuService.java"
click node_auth "https://github.com/chaitanyakrishnaeedara/quiz-app/blob/main/src/service/AuthService.java"
click node_user_service "https://github.com/chaitanyakrishnaeedara/quiz-app/blob/main/src/service/UserService.java"
click node_user_model "https://github.com/chaitanyakrishnaeedara/quiz-app/blob/main/src/model/User.java"
click node_role_model "https://github.com/chaitanyakrishnaeedara/quiz-app/blob/main/src/model/Role.java"
click node_quiz_service "https://github.com/chaitanyakrishnaeedara/quiz-app/blob/main/src/service/QuizService.java"
click node_question_service "https://github.com/chaitanyakrishnaeedara/quiz-app/blob/main/src/service/QuestionService.java"
click node_question_model "https://github.com/chaitanyakrishnaeedara/quiz-app/blob/main/src/model/Question.java"
click node_score_service "https://github.com/chaitanyakrishnaeedara/quiz-app/blob/main/src/service/ScoreService.java"
click node_score_model "https://github.com/chaitanyakrishnaeedara/quiz-app/blob/main/src/model/Score.java"
click node_question_repo "https://github.com/chaitanyakrishnaeedara/quiz-app/blob/main/src/repository/QuestionRepo.java"
click node_user_repo "https://github.com/chaitanyakrishnaeedara/quiz-app/blob/main/src/repository/UserRepo.java"
click node_score_repo "https://github.com/chaitanyakrishnaeedara/quiz-app/blob/main/src/repository/ScoreRepo.java"
click node_questions_file "https://github.com/chaitanyakrishnaeedara/quiz-app/blob/main/questions.dat"
click node_users_file "https://github.com/chaitanyakrishnaeedara/quiz-app/blob/main/users.dat"
click node_scores_file "https://github.com/chaitanyakrishnaeedara/quiz-app/blob/main/scores.dat"

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_main,node_menu toneBlue
class node_auth,node_user_service,node_user_model,node_role_model toneAmber
class node_quiz_service,node_question_service,node_question_model,node_score_service,node_score_model toneMint
class node_question_repo,node_user_repo,node_score_repo,node_questions_file,node_users_file,node_scores_file,node_player,node_administrator toneIndigo
```

## Components

### Console entry

- [Application entry](https://github.com/chaitanyakrishnaeedara/quiz-app/blob/main/src/app/Main.java): `src/app/Main.java`
- [Console menus](https://github.com/chaitanyakrishnaeedara/quiz-app/blob/main/src/service/MenuService.java): `src/service/MenuService.java`

### Identity and roles

- [Authentication](https://github.com/chaitanyakrishnaeedara/quiz-app/blob/main/src/service/AuthService.java): `src/service/AuthService.java`
- [User operations](https://github.com/chaitanyakrishnaeedara/quiz-app/blob/main/src/service/UserService.java): `src/service/UserService.java`
- [User record](https://github.com/chaitanyakrishnaeedara/quiz-app/blob/main/src/model/User.java): `src/model/User.java`
- [Access roles](https://github.com/chaitanyakrishnaeedara/quiz-app/blob/main/src/model/Role.java): `src/model/Role.java`

### Quiz and results

- [Quiz workflow](https://github.com/chaitanyakrishnaeedara/quiz-app/blob/main/src/service/QuizService.java): `src/service/QuizService.java`
- [Question operations](https://github.com/chaitanyakrishnaeedara/quiz-app/blob/main/src/service/QuestionService.java): `src/service/QuestionService.java`
- [Question record](https://github.com/chaitanyakrishnaeedara/quiz-app/blob/main/src/model/Question.java): `src/model/Question.java`
- [Score operations](https://github.com/chaitanyakrishnaeedara/quiz-app/blob/main/src/service/ScoreService.java): `src/service/ScoreService.java`
- [Score record](https://github.com/chaitanyakrishnaeedara/quiz-app/blob/main/src/model/Score.java): `src/model/Score.java`

### Local persistence

- [Question repository](https://github.com/chaitanyakrishnaeedara/quiz-app/blob/main/src/repository/QuestionRepo.java): `src/repository/QuestionRepo.java`
- [User repository](https://github.com/chaitanyakrishnaeedara/quiz-app/blob/main/src/repository/UserRepo.java): `src/repository/UserRepo.java`
- [Score repository](https://github.com/chaitanyakrishnaeedara/quiz-app/blob/main/src/repository/ScoreRepo.java): `src/repository/ScoreRepo.java`
- [Question data](https://github.com/chaitanyakrishnaeedara/quiz-app/blob/main/questions.dat): `questions.dat`
- [User data](https://github.com/chaitanyakrishnaeedara/quiz-app/blob/main/users.dat): `users.dat`
- [Score data](https://github.com/chaitanyakrishnaeedara/quiz-app/blob/main/scores.dat): `scores.dat`

### Other components

- **Player**
- **Administrator**

## Connections

- Player → Application entry: starts app
- Administrator → Application entry: starts app
- Application entry → Console menus: starts session
- Console menus → Authentication: authenticates
- Authentication → User operations: checks users
- Console menus → User operations: registers users
- Console menus → User operations: manages users
- Console menus → Quiz workflow: starts quiz
- Console menus → Question operations: manages questions
- Console menus → Score operations: reads scores
- Quiz workflow → Question operations: loads questions
- Quiz workflow → Score operations: saves result
- Question operations → Question repository: delegates CRUD
- User operations → User repository: delegates users
- Score operations → Score repository: delegates scores
- Question repository → Question data: serializes questions
- User repository → User data: serializes users
- Score repository → Score data: serializes scores
