# mylapalliramya147-ux/quiz_app architecture

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

- Interactive diagram: https://gitdiagram.com/mylapalliramya147-ux/quiz_app
- Repository: https://github.com/mylapalliramya147-ux/quiz_app

## Overview

This is a browser-based quiz application with a Spring backend. The main workflow is choosing quiz settings, generating questions, answering them in a session, then calculating and saving a result with a wrong-answer review. The sampled code confirms session orchestration, in-memory configuration and session state, scoring, and result persistence. The tree shows additional AI question-generation and UI stages; their internal wiring is not fully sampled, so uncertain links are omitted.

Main entry points: [`src/main/java/com/quizapp/quiz/controller/QuizSessionController.java`](https://github.com/mylapalliramya147-ux/quiz_app/blob/main/src/main/java/com/quizapp/quiz/controller/QuizSessionController.java) (Session endpoints), [`src/main/resources/static/js/app.js`](https://github.com/mylapalliramya147-ux/quiz_app/blob/main/src/main/resources/static/js/app.js) (Page routing), [`src/main/resources/static/js/api.js`](https://github.com/mylapalliramya147-ux/quiz_app/blob/main/src/main/resources/static/js/api.js) (API client), [`src/main/resources/static/js/pages/quiz.js`](https://github.com/mylapalliramya147-ux/quiz_app/blob/main/src/main/resources/static/js/pages/quiz.js) (Answer quiz)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_browser["Browser experience"]
  node_index["Quiz page<br/>[index.html]"]
  node_router["Page routing<br/>[app.js]"]
  node_setup["Quiz setup"]
  node_quizui["Answer quiz<br/>[quiz.js]"]
  node_resultui["Result view<br/>[result.js]"]
  node_clientapi["API client<br/>[api.js]"]
end

subgraph group_api["Quiz API"]
  node_configcontroller["Configuration endpoints"]
  node_questioncontroller["Question endpoint"]
  node_sessioncontroller["Session endpoints"]
end

subgraph group_domain["Quiz services"]
  node_configservice["Current configuration"]
  node_generator["Question generation"]
  node_gemini["Gemini generator"]
  node_fallback["Fallback questions"]
  node_sessionservice["Session state"]
  node_score["Score calculation"]
end

subgraph group_persistence["Result persistence"]
  node_persistservice["Result persistence"]
  node_repository[("Result repository")]
  node_resultentity[("Stored result")]
end

node_user(("Quiz taker"))

node_user -->|"opens"| node_index
node_index -->|"loads"| node_router
node_router -->|"renders"| node_setup
node_router -->|"renders"| node_quizui
node_router -->|"renders"| node_resultui
node_setup -->|"uses"| node_clientapi
node_quizui -->|"uses"| node_clientapi
node_clientapi -->|"requests config"| node_configcontroller
node_clientapi -->|"requests sessions"| node_sessioncontroller
node_configcontroller -->|"reads and saves"| node_configservice
node_questioncontroller -->|"reads config"| node_configservice
node_questioncontroller -->|"generates"| node_generator
node_sessioncontroller -->|"reads config"| node_configservice
node_sessioncontroller -->|"generates"| node_generator
node_sessioncontroller -->|"falls back"| node_fallback
node_sessioncontroller -->|"manages session"| node_sessionservice
node_sessioncontroller -->|"calculates"| node_score
node_sessioncontroller -->|"saves result"| node_persistservice
node_persistservice -->|"saves entity"| node_repository
node_repository -->|"stores"| node_resultentity
node_sessioncontroller -->|"returns quiz data"| node_quizui
node_sessioncontroller -->|"returns result data"| node_resultui

click node_index "https://github.com/mylapalliramya147-ux/quiz_app/blob/main/src/main/resources/static/index.html"
click node_router "https://github.com/mylapalliramya147-ux/quiz_app/blob/main/src/main/resources/static/js/app.js"
click node_setup "https://github.com/mylapalliramya147-ux/quiz_app/tree/main/src/main/resources/static/js/pages"
click node_quizui "https://github.com/mylapalliramya147-ux/quiz_app/blob/main/src/main/resources/static/js/pages/quiz.js"
click node_resultui "https://github.com/mylapalliramya147-ux/quiz_app/blob/main/src/main/resources/static/js/pages/result.js"
click node_clientapi "https://github.com/mylapalliramya147-ux/quiz_app/blob/main/src/main/resources/static/js/api.js"
click node_configcontroller "https://github.com/mylapalliramya147-ux/quiz_app/blob/main/src/main/java/com/quizapp/quiz/controller/QuizConfigController.java"
click node_questioncontroller "https://github.com/mylapalliramya147-ux/quiz_app/blob/main/src/main/java/com/quizapp/quiz/controller/QuestionController.java"
click node_sessioncontroller "https://github.com/mylapalliramya147-ux/quiz_app/blob/main/src/main/java/com/quizapp/quiz/controller/QuizSessionController.java"
click node_configservice "https://github.com/mylapalliramya147-ux/quiz_app/blob/main/src/main/java/com/quizapp/quiz/service/QuizConfigService.java"
click node_generator "https://github.com/mylapalliramya147-ux/quiz_app/blob/main/src/main/java/com/quizapp/quiz/service/QuestionGenerator.java"
click node_gemini "https://github.com/mylapalliramya147-ux/quiz_app/blob/main/src/main/java/com/quizapp/quiz/service/GeminiQuestionGenerator.java"
click node_fallback "https://github.com/mylapalliramya147-ux/quiz_app/blob/main/src/main/java/com/quizapp/quiz/service/FallbackQuestionGenerator.java"
click node_sessionservice "https://github.com/mylapalliramya147-ux/quiz_app/blob/main/src/main/java/com/quizapp/quiz/service/QuizSessionService.java"
click node_score "https://github.com/mylapalliramya147-ux/quiz_app/blob/main/src/main/java/com/quizapp/quiz/service/QuizScoreService.java"
click node_persistservice "https://github.com/mylapalliramya147-ux/quiz_app/blob/main/src/main/java/com/quizapp/quiz/service/QuizResultPersistenceService.java"
click node_repository "https://github.com/mylapalliramya147-ux/quiz_app/blob/main/src/main/java/com/quizapp/quiz/repository/QuizResultRepository.java"
click node_resultentity "https://github.com/mylapalliramya147-ux/quiz_app/blob/main/src/main/java/com/quizapp/quiz/model/QuizResultEntity.java"

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_index,node_router,node_setup,node_quizui,node_resultui,node_clientapi toneBlue
class node_configcontroller,node_questioncontroller,node_sessioncontroller toneAmber
class node_configservice,node_generator,node_gemini,node_fallback,node_sessionservice,node_score toneMint
class node_persistservice,node_repository,node_resultentity toneRose
class node_user toneIndigo
```

## Components

### Browser experience

- [Quiz page](https://github.com/mylapalliramya147-ux/quiz_app/blob/main/src/main/resources/static/index.html): `src/main/resources/static/index.html`
- [Page routing](https://github.com/mylapalliramya147-ux/quiz_app/blob/main/src/main/resources/static/js/app.js): `src/main/resources/static/js/app.js`
- [Quiz setup](https://github.com/mylapalliramya147-ux/quiz_app/tree/main/src/main/resources/static/js/pages): `src/main/resources/static/js/pages`
- [Answer quiz](https://github.com/mylapalliramya147-ux/quiz_app/blob/main/src/main/resources/static/js/pages/quiz.js): `src/main/resources/static/js/pages/quiz.js`
- [Result view](https://github.com/mylapalliramya147-ux/quiz_app/blob/main/src/main/resources/static/js/pages/result.js): `src/main/resources/static/js/pages/result.js`
- [API client](https://github.com/mylapalliramya147-ux/quiz_app/blob/main/src/main/resources/static/js/api.js): `src/main/resources/static/js/api.js`

### Quiz API

- [Configuration endpoints](https://github.com/mylapalliramya147-ux/quiz_app/blob/main/src/main/java/com/quizapp/quiz/controller/QuizConfigController.java): `src/main/java/com/quizapp/quiz/controller/QuizConfigController.java`
- [Question endpoint](https://github.com/mylapalliramya147-ux/quiz_app/blob/main/src/main/java/com/quizapp/quiz/controller/QuestionController.java): `src/main/java/com/quizapp/quiz/controller/QuestionController.java`
- [Session endpoints](https://github.com/mylapalliramya147-ux/quiz_app/blob/main/src/main/java/com/quizapp/quiz/controller/QuizSessionController.java): `src/main/java/com/quizapp/quiz/controller/QuizSessionController.java`

### Quiz services

- [Current configuration](https://github.com/mylapalliramya147-ux/quiz_app/blob/main/src/main/java/com/quizapp/quiz/service/QuizConfigService.java): `src/main/java/com/quizapp/quiz/service/QuizConfigService.java`
- [Question generation](https://github.com/mylapalliramya147-ux/quiz_app/blob/main/src/main/java/com/quizapp/quiz/service/QuestionGenerator.java): `src/main/java/com/quizapp/quiz/service/QuestionGenerator.java`
- [Gemini generator](https://github.com/mylapalliramya147-ux/quiz_app/blob/main/src/main/java/com/quizapp/quiz/service/GeminiQuestionGenerator.java): `src/main/java/com/quizapp/quiz/service/GeminiQuestionGenerator.java`
- [Fallback questions](https://github.com/mylapalliramya147-ux/quiz_app/blob/main/src/main/java/com/quizapp/quiz/service/FallbackQuestionGenerator.java): `src/main/java/com/quizapp/quiz/service/FallbackQuestionGenerator.java`
- [Session state](https://github.com/mylapalliramya147-ux/quiz_app/blob/main/src/main/java/com/quizapp/quiz/service/QuizSessionService.java): `src/main/java/com/quizapp/quiz/service/QuizSessionService.java`
- [Score calculation](https://github.com/mylapalliramya147-ux/quiz_app/blob/main/src/main/java/com/quizapp/quiz/service/QuizScoreService.java): `src/main/java/com/quizapp/quiz/service/QuizScoreService.java`

### Result persistence

- [Result persistence](https://github.com/mylapalliramya147-ux/quiz_app/blob/main/src/main/java/com/quizapp/quiz/service/QuizResultPersistenceService.java): `src/main/java/com/quizapp/quiz/service/QuizResultPersistenceService.java`
- [Result repository](https://github.com/mylapalliramya147-ux/quiz_app/blob/main/src/main/java/com/quizapp/quiz/repository/QuizResultRepository.java): `src/main/java/com/quizapp/quiz/repository/QuizResultRepository.java`
- [Stored result](https://github.com/mylapalliramya147-ux/quiz_app/blob/main/src/main/java/com/quizapp/quiz/model/QuizResultEntity.java): `src/main/java/com/quizapp/quiz/model/QuizResultEntity.java`

### Other components

- **Quiz taker**

## Connections

- Quiz taker → Quiz page: opens
- Quiz page → Page routing: loads
- Page routing → Quiz setup: renders
- Page routing → Answer quiz: renders
- Page routing → Result view: renders
- Quiz setup → API client: uses
- Answer quiz → API client: uses
- API client → Configuration endpoints: requests config
- API client → Session endpoints: requests sessions
- Configuration endpoints → Current configuration: reads and saves
- Question endpoint → Current configuration: reads config
- Question endpoint → Question generation: generates
- Session endpoints → Current configuration: reads config
- Session endpoints → Question generation: generates
- Session endpoints → Fallback questions: falls back
- Session endpoints → Session state: manages session
- Session endpoints → Score calculation: calculates
- Session endpoints → Result persistence: saves result
- Result persistence → Result repository: saves entity
- Result repository → Stored result: stores
- Session endpoints → Answer quiz: returns quiz data
- Session endpoints → Result view: returns result data
