# ananyo-sen-b2530066/quiz_platform architecture

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

- Interactive diagram: https://gitdiagram.com/ananyo-sen-b2530066/quiz_platform
- Repository: https://github.com/ananyo-sen-b2530066/quiz_platform

## Overview

Quiz Platform supports creator signup/login, quiz authoring and sharing, public timed quiz attempts, and creator-facing results. The runtime routes requests to controllers, which use MongoDB models; quiz authoring can upload media to Cloudinary. The README also documents analytics and multiple question types. Frontend pages and some controller behavior were not sampled, so links beyond those shown in the server and route wiring are omitted.

Main entry points: [`src/server.js`](https://github.com/ananyo-sen-b2530066/quiz_platform/blob/main/src/server.js) (HTTP server), [`src/routes/quiz.js`](https://github.com/ananyo-sen-b2530066/quiz_platform/blob/main/src/routes/quiz.js) (Quiz routes), [`src/middleware/auth.js`](https://github.com/ananyo-sen-b2530066/quiz_platform/blob/main/src/middleware/auth.js) (JWT auth), [`src/routes/auth.js`](https://github.com/ananyo-sen-b2530066/quiz_platform/blob/main/src/routes/auth.js) (Auth routes)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["Web entry"]
  node_web["Web pages"]
  node_server["HTTP server<br/>[server.js]"]
end

subgraph group_identity["Identity"]
  node_authroutes["Auth routes<br/>[auth.js]"]
  node_authmw["JWT auth<br/>[auth.js]"]
  node_authctl["Account service<br/>[authController.js]"]
end

subgraph group_authoring["Quiz authoring"]
  node_quizroutes["Quiz routes<br/>[quiz.js]"]
  node_quizctl["Quiz management<br/>[quizController.js]"]
  node_uploadmw["Media upload<br/>[upload.js]"]
end

subgraph group_taking["Quiz taking"]
  node_attemptpages["Taking and results pages"]
  node_attemptroutes["Attempt routes<br/>[attempt.js]"]
  node_attemptctl["Attempt scoring and results"]
end

subgraph group_persistence["Persistence and media"]
  node_users[("User records<br/>[User.js]")]
  node_quiz[("Quiz records<br/>[Quiz.js]")]
  node_cloudinaryconfig["Cloudinary client<br/>[cloudinary.js]"]
  node_attempts[("Attempt records<br/>[Attempt.js]")]
end

node_creator(("Creator"))
node_taker(("Quiz taker"))
node_cloudinary[("Cloudinary")]

node_creator -.->|"uses"| node_web
node_taker -.->|"uses"| node_attemptpages
node_web -.->|"requests"| node_server
node_server -->|"mounts"| node_authroutes
node_server -->|"mounts"| node_quizroutes
node_server -->|"mounts"| node_attemptroutes
node_server -->|"serves"| node_web
node_authroutes -->|"dispatches"| node_authctl
node_authroutes -->|"guards profile"| node_authmw
node_authctl -->|"reads and writes"| node_users
node_authmw -->|"loads user"| node_users
node_quizroutes -->|"guards routes"| node_authmw
node_quizroutes -->|"accepts media"| node_uploadmw
node_quizroutes -->|"dispatches"| node_quizctl
node_quizctl -->|"reads and writes"| node_quiz
node_quizctl -->|"uploads via"| node_cloudinaryconfig
node_cloudinaryconfig -.->|"configures client"| node_cloudinary
node_attemptpages -.->|"requests"| node_server
node_attemptroutes -->|"dispatches"| node_attemptctl
node_attemptroutes -->|"guards creator routes"| node_authmw
node_attemptctl -->|"reads quiz"| node_quiz
node_attemptctl -->|"reads and writes"| node_attempts

click node_web "https://github.com/ananyo-sen-b2530066/quiz_platform/tree/main/public"
click node_server "https://github.com/ananyo-sen-b2530066/quiz_platform/blob/main/src/server.js"
click node_authroutes "https://github.com/ananyo-sen-b2530066/quiz_platform/blob/main/src/routes/auth.js"
click node_authmw "https://github.com/ananyo-sen-b2530066/quiz_platform/blob/main/src/middleware/auth.js"
click node_authctl "https://github.com/ananyo-sen-b2530066/quiz_platform/blob/main/src/controllers/authController.js"
click node_users "https://github.com/ananyo-sen-b2530066/quiz_platform/blob/main/src/models/User.js"
click node_quizroutes "https://github.com/ananyo-sen-b2530066/quiz_platform/blob/main/src/routes/quiz.js"
click node_quizctl "https://github.com/ananyo-sen-b2530066/quiz_platform/blob/main/src/controllers/quizController.js"
click node_uploadmw "https://github.com/ananyo-sen-b2530066/quiz_platform/blob/main/src/middleware/upload.js"
click node_quiz "https://github.com/ananyo-sen-b2530066/quiz_platform/blob/main/src/models/Quiz.js"
click node_cloudinaryconfig "https://github.com/ananyo-sen-b2530066/quiz_platform/blob/main/src/config/cloudinary.js"
click node_attemptpages "https://github.com/ananyo-sen-b2530066/quiz_platform/tree/main/public"
click node_attemptroutes "https://github.com/ananyo-sen-b2530066/quiz_platform/blob/main/src/routes/attempt.js"
click node_attemptctl "https://github.com/ananyo-sen-b2530066/quiz_platform/blob/main/src/controllers/attemptController.js"
click node_attempts "https://github.com/ananyo-sen-b2530066/quiz_platform/blob/main/src/models/Attempt.js"

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_web,node_server toneBlue
class node_authroutes,node_authmw,node_authctl,node_cloudinary toneAmber
class node_quizroutes,node_quizctl,node_uploadmw toneMint
class node_attemptpages,node_attemptroutes,node_attemptctl toneRose
class node_users,node_quiz,node_cloudinaryconfig,node_attempts,node_creator,node_taker toneIndigo
```

## Components

### Web entry

- [Web pages](https://github.com/ananyo-sen-b2530066/quiz_platform/tree/main/public): `public`
- [HTTP server](https://github.com/ananyo-sen-b2530066/quiz_platform/blob/main/src/server.js): `src/server.js`

### Identity

- [Auth routes](https://github.com/ananyo-sen-b2530066/quiz_platform/blob/main/src/routes/auth.js): `src/routes/auth.js`
- [JWT auth](https://github.com/ananyo-sen-b2530066/quiz_platform/blob/main/src/middleware/auth.js): `src/middleware/auth.js`
- [Account service](https://github.com/ananyo-sen-b2530066/quiz_platform/blob/main/src/controllers/authController.js): `src/controllers/authController.js`

### Quiz authoring

- [Quiz routes](https://github.com/ananyo-sen-b2530066/quiz_platform/blob/main/src/routes/quiz.js): `src/routes/quiz.js`
- [Quiz management](https://github.com/ananyo-sen-b2530066/quiz_platform/blob/main/src/controllers/quizController.js): `src/controllers/quizController.js`
- [Media upload](https://github.com/ananyo-sen-b2530066/quiz_platform/blob/main/src/middleware/upload.js): `src/middleware/upload.js`

### Quiz taking

- [Taking and results pages](https://github.com/ananyo-sen-b2530066/quiz_platform/tree/main/public): `public`
- [Attempt routes](https://github.com/ananyo-sen-b2530066/quiz_platform/blob/main/src/routes/attempt.js): `src/routes/attempt.js`
- [Attempt scoring and results](https://github.com/ananyo-sen-b2530066/quiz_platform/blob/main/src/controllers/attemptController.js): `src/controllers/attemptController.js`

### Persistence and media

- [User records](https://github.com/ananyo-sen-b2530066/quiz_platform/blob/main/src/models/User.js): `src/models/User.js`
- [Quiz records](https://github.com/ananyo-sen-b2530066/quiz_platform/blob/main/src/models/Quiz.js): `src/models/Quiz.js`
- [Cloudinary client](https://github.com/ananyo-sen-b2530066/quiz_platform/blob/main/src/config/cloudinary.js): `src/config/cloudinary.js`
- [Attempt records](https://github.com/ananyo-sen-b2530066/quiz_platform/blob/main/src/models/Attempt.js): `src/models/Attempt.js`

### Other components

- **Creator**
- **Quiz taker**
- **Cloudinary**

## Connections

- Creator → Web pages: uses
- Quiz taker → Taking and results pages: uses
- Web pages → HTTP server: requests
- HTTP server → Auth routes: mounts (evidence: `src/server.js`)
- HTTP server → Quiz routes: mounts (evidence: `src/server.js`)
- HTTP server → Attempt routes: mounts (evidence: `src/server.js`)
- HTTP server → Web pages: serves (evidence: `src/server.js`)
- Auth routes → Account service: dispatches (evidence: `src/routes/auth.js`)
- Auth routes → JWT auth: guards profile (evidence: `src/routes/auth.js`)
- Account service → User records: reads and writes (evidence: `src/controllers/authController.js`)
- JWT auth → User records: loads user (evidence: `src/middleware/auth.js`)
- Quiz routes → JWT auth: guards routes (evidence: `src/routes/quiz.js`)
- Quiz routes → Media upload: accepts media (evidence: `src/routes/quiz.js`)
- Quiz routes → Quiz management: dispatches (evidence: `src/routes/quiz.js`)
- Quiz management → Quiz records: reads and writes (evidence: `src/controllers/quizController.js`)
- Quiz management → Cloudinary client: uploads via (evidence: `src/controllers/quizController.js`)
- Cloudinary client → Cloudinary: configures client
- Taking and results pages → HTTP server: requests
- Attempt routes → Attempt scoring and results: dispatches (evidence: `src/routes/attempt.js`)
- Attempt routes → JWT auth: guards creator routes (evidence: `src/routes/attempt.js`)
- Attempt scoring and results → Quiz records: reads quiz (evidence: `src/controllers/attemptController.js`)
- Attempt scoring and results → Attempt records: reads and writes (evidence: `src/controllers/attemptController.js`)
