# bantikumardas/question-service-java-backend architecture

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

- Interactive diagram: https://gitdiagram.com/bantikumardas/question-service-java-backend
- Repository: https://github.com/bantikumardas/question-service-java-backend

## Overview

Question Service is a Spring Boot REST backend for authoring question banks, creating and inviting candidates to tests, running timed exams, and executing submitted code. The main workflow is test administration through invitation and exam start; separate APIs handle authentication, question authoring, and code runs. Controllers delegate to service-layer operations, with persistence and Redis-backed exam-session caching underneath. Paths and links are grounded in the README, tree, and sampled source; implementation details for exam execution, invitations, and code running were not sampled, so their internal links are conservative.

Main entry points: [`src/main/java/com/question/service/question_service/service/impl/AuthServiceImpl.java`](https://github.com/bantikumardas/question-service-java-backend/blob/main/src/main/java/com/question/service/question_service/service/impl/AuthServiceImpl.java) (Authentication), [`src/main/java/com/question/service/question_service/repository`](https://github.com/bantikumardas/question-service-java-backend/tree/main/src/main/java/com/question/service/question_service/repository) (H2 database), [`src/main/java/com/question/service/question_service/service/impl/TestServiceImpl.java`](https://github.com/bantikumardas/question-service-java-backend/blob/main/src/main/java/com/question/service/question_service/service/impl/TestServiceImpl.java) (Test management), [`src/main/java/com/question/service/question_service/service/impl/ExamServiceImpl.java`](https://github.com/bantikumardas/question-service-java-backend/blob/main/src/main/java/com/question/service/question_service/service/impl/ExamServiceImpl.java) (Exam sessions)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["REST API"]
  node_auth_api["Auth endpoints"]
  node_test_api["Test endpoints"]
  node_question_api["Question endpoints"]
  node_exam_api["Exam endpoints"]
  node_runner_api["Code run endpoint"]
end

subgraph group_domain["Assessment Services"]
  node_test_service["Test management"]
  node_invite_dispatch["Invite dispatch"]
  node_question_service["Question authoring"]
  node_exam_service["Exam sessions"]
end

subgraph group_identity["Identity and Access"]
  node_auth_service["Authentication"]
  node_jwt["JWT security"]
  node_blacklist["Token blacklist"]
end

subgraph group_state["Persistence and Cache"]
  node_sql[("H2 database")]
  node_redis_cache["Exam session cache"]
end

subgraph group_runtime["Execution and Messaging"]
  node_code_service["Code run coordination"]
  node_code_runner["Code execution"]
end

node_candidate(("Candidate"))
node_admin(("Test administrator"))
node_mail["SMTP mail"]
node_redis[("Redis")]

node_admin -->|"register or login"| node_auth_api
node_candidate -->|"register or login"| node_auth_api
node_auth_api -->|"delegates"| node_auth_service
node_auth_service -->|"reads and writes users"| node_sql
node_auth_service -->|"creates tokens"| node_jwt
node_auth_service -->|"blacklists logout token"| node_blacklist
node_candidate -->|"accesses tests"| node_test_api
node_admin -->|"manages tests"| node_test_api
node_test_api -->|"delegates"| node_test_service
node_test_service -->|"reads and writes test data"| node_sql
node_test_service -->|"requests invitations"| node_invite_dispatch
node_invite_dispatch -.->|"sends invitations"| node_mail
node_admin -->|"authors questions"| node_question_api
node_question_api -->|"delegates"| node_question_service
node_question_service -->|"persists questions"| node_sql
node_candidate -->|"starts exam"| node_exam_api
node_exam_api -->|"delegates"| node_exam_service
node_exam_service -->|"reads and writes sessions"| node_sql
node_exam_service -->|"uses session cache"| node_redis_cache
node_redis_cache -->|"reads and writes cache"| node_redis
node_candidate -->|"submits code"| node_runner_api
node_runner_api -->|"delegates"| node_code_service
node_code_service -->|"runs submission"| node_code_runner

click node_auth_api "https://github.com/bantikumardas/question-service-java-backend/blob/main/src/main/java/com/question/service/question_service/controller/AuthController.java"
click node_test_api "https://github.com/bantikumardas/question-service-java-backend/blob/main/src/main/java/com/question/service/question_service/controller/TestController.java"
click node_question_api "https://github.com/bantikumardas/question-service-java-backend/blob/main/src/main/java/com/question/service/question_service/controller/QuestionController.java"
click node_exam_api "https://github.com/bantikumardas/question-service-java-backend/blob/main/src/main/java/com/question/service/question_service/controller/ExamController.java"
click node_runner_api "https://github.com/bantikumardas/question-service-java-backend/blob/main/src/main/java/com/question/service/question_service/controller/CodeRunnerController.java"
click node_auth_service "https://github.com/bantikumardas/question-service-java-backend/blob/main/src/main/java/com/question/service/question_service/service/impl/AuthServiceImpl.java"
click node_jwt "https://github.com/bantikumardas/question-service-java-backend/tree/main/src/main/java/com/question/service/question_service/security"
click node_blacklist "https://github.com/bantikumardas/question-service-java-backend/blob/main/src/main/java/com/question/service/question_service/service/impl/TokenBlacklistServiceImpl.java"
click node_test_service "https://github.com/bantikumardas/question-service-java-backend/blob/main/src/main/java/com/question/service/question_service/service/impl/TestServiceImpl.java"
click node_invite_dispatch "https://github.com/bantikumardas/question-service-java-backend/blob/main/src/main/java/com/question/service/question_service/service/impl/TestInviteDispatcher.java"
click node_question_service "https://github.com/bantikumardas/question-service-java-backend/blob/main/src/main/java/com/question/service/question_service/service/impl/QuestionServiceImpl.java"
click node_exam_service "https://github.com/bantikumardas/question-service-java-backend/blob/main/src/main/java/com/question/service/question_service/service/impl/ExamServiceImpl.java"
click node_code_service "https://github.com/bantikumardas/question-service-java-backend/blob/main/src/main/java/com/question/service/question_service/service/impl/CodeRunServiceImpl.java"
click node_code_runner "https://github.com/bantikumardas/question-service-java-backend/blob/main/src/main/java/com/question/service/question_service/service/impl/CodeRunnerImpl.java"
click node_sql "https://github.com/bantikumardas/question-service-java-backend/tree/main/src/main/java/com/question/service/question_service/repository"
click node_redis_cache "https://github.com/bantikumardas/question-service-java-backend/blob/main/src/main/java/com/question/service/question_service/service/impl/ExamSessionCacheServiceImpl.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_auth_api,node_test_api,node_question_api,node_exam_api,node_runner_api toneBlue
class node_test_service,node_invite_dispatch,node_question_service,node_exam_service,node_redis toneAmber
class node_auth_service,node_jwt,node_blacklist toneMint
class node_sql,node_redis_cache toneRose
class node_code_service,node_code_runner,node_candidate,node_admin,node_mail toneIndigo
```

## Components

### REST API

- [Auth endpoints](https://github.com/bantikumardas/question-service-java-backend/blob/main/src/main/java/com/question/service/question_service/controller/AuthController.java): `src/main/java/com/question/service/question_service/controller/AuthController.java`
- [Test endpoints](https://github.com/bantikumardas/question-service-java-backend/blob/main/src/main/java/com/question/service/question_service/controller/TestController.java): `src/main/java/com/question/service/question_service/controller/TestController.java`
- [Question endpoints](https://github.com/bantikumardas/question-service-java-backend/blob/main/src/main/java/com/question/service/question_service/controller/QuestionController.java): `src/main/java/com/question/service/question_service/controller/QuestionController.java`
- [Exam endpoints](https://github.com/bantikumardas/question-service-java-backend/blob/main/src/main/java/com/question/service/question_service/controller/ExamController.java): `src/main/java/com/question/service/question_service/controller/ExamController.java`
- [Code run endpoint](https://github.com/bantikumardas/question-service-java-backend/blob/main/src/main/java/com/question/service/question_service/controller/CodeRunnerController.java): `src/main/java/com/question/service/question_service/controller/CodeRunnerController.java`

### Assessment Services

- [Test management](https://github.com/bantikumardas/question-service-java-backend/blob/main/src/main/java/com/question/service/question_service/service/impl/TestServiceImpl.java): `src/main/java/com/question/service/question_service/service/impl/TestServiceImpl.java`
- [Invite dispatch](https://github.com/bantikumardas/question-service-java-backend/blob/main/src/main/java/com/question/service/question_service/service/impl/TestInviteDispatcher.java): `src/main/java/com/question/service/question_service/service/impl/TestInviteDispatcher.java`
- [Question authoring](https://github.com/bantikumardas/question-service-java-backend/blob/main/src/main/java/com/question/service/question_service/service/impl/QuestionServiceImpl.java): `src/main/java/com/question/service/question_service/service/impl/QuestionServiceImpl.java`
- [Exam sessions](https://github.com/bantikumardas/question-service-java-backend/blob/main/src/main/java/com/question/service/question_service/service/impl/ExamServiceImpl.java): `src/main/java/com/question/service/question_service/service/impl/ExamServiceImpl.java`

### Identity and Access

- [Authentication](https://github.com/bantikumardas/question-service-java-backend/blob/main/src/main/java/com/question/service/question_service/service/impl/AuthServiceImpl.java): `src/main/java/com/question/service/question_service/service/impl/AuthServiceImpl.java`
- [JWT security](https://github.com/bantikumardas/question-service-java-backend/tree/main/src/main/java/com/question/service/question_service/security): `src/main/java/com/question/service/question_service/security`
- [Token blacklist](https://github.com/bantikumardas/question-service-java-backend/blob/main/src/main/java/com/question/service/question_service/service/impl/TokenBlacklistServiceImpl.java): `src/main/java/com/question/service/question_service/service/impl/TokenBlacklistServiceImpl.java`

### Persistence and Cache

- [H2 database](https://github.com/bantikumardas/question-service-java-backend/tree/main/src/main/java/com/question/service/question_service/repository): `src/main/java/com/question/service/question_service/repository`
- [Exam session cache](https://github.com/bantikumardas/question-service-java-backend/blob/main/src/main/java/com/question/service/question_service/service/impl/ExamSessionCacheServiceImpl.java): `src/main/java/com/question/service/question_service/service/impl/ExamSessionCacheServiceImpl.java`

### Execution and Messaging

- [Code run coordination](https://github.com/bantikumardas/question-service-java-backend/blob/main/src/main/java/com/question/service/question_service/service/impl/CodeRunServiceImpl.java): `src/main/java/com/question/service/question_service/service/impl/CodeRunServiceImpl.java`
- [Code execution](https://github.com/bantikumardas/question-service-java-backend/blob/main/src/main/java/com/question/service/question_service/service/impl/CodeRunnerImpl.java): `src/main/java/com/question/service/question_service/service/impl/CodeRunnerImpl.java`

### Other components

- **Candidate**
- **Test administrator**
- **SMTP mail**
- **Redis**

## Connections

- Test administrator → Auth endpoints: register or login
- Candidate → Auth endpoints: register or login
- Auth endpoints → Authentication: delegates
- Authentication → H2 database: reads and writes users
- Authentication → JWT security: creates tokens
- Authentication → Token blacklist: blacklists logout token
- Candidate → Test endpoints: accesses tests
- Test administrator → Test endpoints: manages tests
- Test endpoints → Test management: delegates
- Test management → H2 database: reads and writes test data
- Test management → Invite dispatch: requests invitations
- Invite dispatch → SMTP mail: sends invitations
- Test administrator → Question endpoints: authors questions
- Question endpoints → Question authoring: delegates
- Question authoring → H2 database: persists questions
- Candidate → Exam endpoints: starts exam
- Exam endpoints → Exam sessions: delegates
- Exam sessions → H2 database: reads and writes sessions
- Exam sessions → Exam session cache: uses session cache
- Exam session cache → Redis: reads and writes cache
- Candidate → Code run endpoint: submits code
- Code run endpoint → Code run coordination: delegates
- Code run coordination → Code execution: runs submission
