# online-quiz-cs31a/quiz-backend architecture

> Architecture diagram of the GitHub repository online-quiz-cs31a/quiz-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/online-quiz-cs31a/quiz-backend
- Repository: https://github.com/online-quiz-cs31a/quiz-backend

## Overview

OnlineQuiz is an ASP.NET API for quiz-based learning, with account and role handling, course enrollment, assessments and attempts, grading, analytics, and supporting biometric, notification, and administration features. The main user flow is an API request entering a controller, passing through a domain service, and (where applicable) reaching repository-backed Supabase data. The sampled code confirms authentication and enrollment calls, and enrollment activity logging. Other feature branches are represented from the file tree; their internal wiring was not sampled, so uncertain connections are omitted.

Main entry points: [`OnlineQuiz/Controllers`](https://github.com/online-quiz-cs31a/quiz-backend/tree/develop/OnlineQuiz/Controllers) (API controllers), [`OnlineQuiz/Services/AuthService.cs`](https://github.com/online-quiz-cs31a/quiz-backend/blob/develop/OnlineQuiz/Services/AuthService.cs) (Authentication), [`OnlineQuiz/Controllers/EnrollmentController.cs`](https://github.com/online-quiz-cs31a/quiz-backend/blob/develop/OnlineQuiz/Controllers/EnrollmentController.cs) (Enrollment API), [`OnlineQuiz/Services/SupabaseService.cs`](https://github.com/online-quiz-cs31a/quiz-backend/blob/develop/OnlineQuiz/Services/SupabaseService.cs) (Supabase service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_access["Identity and users"]
  node_api["API controllers"]
  node_auth["Authentication<br/>[AuthService.cs]"]
  node_users["User management<br/>[UserService.cs]"]
end

subgraph group_learning["Learning and assessment"]
  node_courses["Course service<br/>[CourseService.cs]"]
  node_enrollment["Enrollment API"]
  node_quizzes["Quiz service<br/>[QuizService.cs]"]
  node_attempts["Attempt service<br/>[AttemptService.cs]"]
  node_answers["Answer service<br/>[AnswerService.cs]"]
  node_grading["Manual grading"]
end

subgraph group_operations["Insights and administration"]
  node_analytics["Analytics"]
  node_activity["Activity logging"]
  node_exportlog["Export/import logs"]
end

subgraph group_integrations["Biometrics and notifications"]
  node_biometric["Biometric service"]
  node_biometric_hub["Biometric hub<br/>[BiometricHub.cs]"]
  node_esp32["ESP32 integration"]
  node_notifications["Notifications"]
end

subgraph group_data["Data access"]
  node_authrepo["Auth repository<br/>[AuthRepository.cs]"]
  node_repo["Domain repositories"]
  node_enrollment_repo["Enrollment repository"]
  node_supabase["Supabase service<br/>[SupabaseService.cs]"]
end

node_learner(("Learner / staff"))
node_store[("Supabase data")]
node_device["ESP32 device"]

node_learner -->|"sends requests"| node_api
node_api -->|"login calls"| node_auth
node_auth -->|"verifies credentials"| node_authrepo
node_auth -->|"loads current user"| node_users
node_api -->|"routes enrollment"| node_enrollment
node_enrollment -->|"enrolls and queries"| node_courses
node_enrollment -->|"logs actions"| node_activity
node_authrepo -->|"loads user records"| node_repo
node_repo -->|"uses client"| node_supabase
node_enrollment_repo -->|"queries enrollment"| node_supabase
node_supabase -->|"reads and writes"| node_store
node_device -.->|"sends device data"| node_esp32

click node_api "https://github.com/online-quiz-cs31a/quiz-backend/tree/develop/OnlineQuiz/Controllers"
click node_auth "https://github.com/online-quiz-cs31a/quiz-backend/blob/develop/OnlineQuiz/Services/AuthService.cs"
click node_authrepo "https://github.com/online-quiz-cs31a/quiz-backend/blob/develop/OnlineQuiz/Repository/AuthRepository.cs"
click node_users "https://github.com/online-quiz-cs31a/quiz-backend/blob/develop/OnlineQuiz/Services/UserService.cs"
click node_courses "https://github.com/online-quiz-cs31a/quiz-backend/blob/develop/OnlineQuiz/Services/CourseService.cs"
click node_enrollment "https://github.com/online-quiz-cs31a/quiz-backend/blob/develop/OnlineQuiz/Controllers/EnrollmentController.cs"
click node_quizzes "https://github.com/online-quiz-cs31a/quiz-backend/blob/develop/OnlineQuiz/Services/QuizService.cs"
click node_attempts "https://github.com/online-quiz-cs31a/quiz-backend/blob/develop/OnlineQuiz/Services/AttemptService.cs"
click node_answers "https://github.com/online-quiz-cs31a/quiz-backend/blob/develop/OnlineQuiz/Services/AnswerService.cs"
click node_grading "https://github.com/online-quiz-cs31a/quiz-backend/blob/develop/OnlineQuiz/Services/ManualGradingService.cs"
click node_analytics "https://github.com/online-quiz-cs31a/quiz-backend/blob/develop/OnlineQuiz/Services/AnalyticsService.cs"
click node_activity "https://github.com/online-quiz-cs31a/quiz-backend/blob/develop/OnlineQuiz/Services/ActivityLogService.cs"
click node_exportlog "https://github.com/online-quiz-cs31a/quiz-backend/blob/develop/OnlineQuiz/Services/ExportImportLogService.cs"
click node_biometric "https://github.com/online-quiz-cs31a/quiz-backend/blob/develop/OnlineQuiz/Services/BiometricService.cs"
click node_biometric_hub "https://github.com/online-quiz-cs31a/quiz-backend/blob/develop/OnlineQuiz/Hubs/BiometricHub.cs"
click node_esp32 "https://github.com/online-quiz-cs31a/quiz-backend/blob/develop/OnlineQuiz/Services/HttpESP32Service.cs"
click node_notifications "https://github.com/online-quiz-cs31a/quiz-backend/blob/develop/OnlineQuiz/Services/NotificationService.cs"
click node_repo "https://github.com/online-quiz-cs31a/quiz-backend/tree/develop/OnlineQuiz/Repository"
click node_enrollment_repo "https://github.com/online-quiz-cs31a/quiz-backend/blob/develop/OnlineQuiz/Repository/EnrollmentRepository.cs"
click node_supabase "https://github.com/online-quiz-cs31a/quiz-backend/blob/develop/OnlineQuiz/Services/SupabaseService.cs"

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_api,node_auth,node_users toneBlue
class node_courses,node_enrollment,node_quizzes,node_attempts,node_answers,node_grading,node_store toneAmber
class node_analytics,node_activity,node_exportlog toneMint
class node_biometric,node_biometric_hub,node_esp32,node_notifications toneRose
class node_authrepo,node_repo,node_enrollment_repo,node_supabase,node_learner,node_device toneIndigo
```

## Components

### Identity and users

- [API controllers](https://github.com/online-quiz-cs31a/quiz-backend/tree/develop/OnlineQuiz/Controllers): `OnlineQuiz/Controllers`
- [Authentication](https://github.com/online-quiz-cs31a/quiz-backend/blob/develop/OnlineQuiz/Services/AuthService.cs): `OnlineQuiz/Services/AuthService.cs`
- [User management](https://github.com/online-quiz-cs31a/quiz-backend/blob/develop/OnlineQuiz/Services/UserService.cs): `OnlineQuiz/Services/UserService.cs`

### Learning and assessment

- [Course service](https://github.com/online-quiz-cs31a/quiz-backend/blob/develop/OnlineQuiz/Services/CourseService.cs): `OnlineQuiz/Services/CourseService.cs`
- [Enrollment API](https://github.com/online-quiz-cs31a/quiz-backend/blob/develop/OnlineQuiz/Controllers/EnrollmentController.cs): `OnlineQuiz/Controllers/EnrollmentController.cs`
- [Quiz service](https://github.com/online-quiz-cs31a/quiz-backend/blob/develop/OnlineQuiz/Services/QuizService.cs): `OnlineQuiz/Services/QuizService.cs`
- [Attempt service](https://github.com/online-quiz-cs31a/quiz-backend/blob/develop/OnlineQuiz/Services/AttemptService.cs): `OnlineQuiz/Services/AttemptService.cs`
- [Answer service](https://github.com/online-quiz-cs31a/quiz-backend/blob/develop/OnlineQuiz/Services/AnswerService.cs): `OnlineQuiz/Services/AnswerService.cs`
- [Manual grading](https://github.com/online-quiz-cs31a/quiz-backend/blob/develop/OnlineQuiz/Services/ManualGradingService.cs): `OnlineQuiz/Services/ManualGradingService.cs`

### Insights and administration

- [Analytics](https://github.com/online-quiz-cs31a/quiz-backend/blob/develop/OnlineQuiz/Services/AnalyticsService.cs): `OnlineQuiz/Services/AnalyticsService.cs`
- [Activity logging](https://github.com/online-quiz-cs31a/quiz-backend/blob/develop/OnlineQuiz/Services/ActivityLogService.cs): `OnlineQuiz/Services/ActivityLogService.cs`
- [Export/import logs](https://github.com/online-quiz-cs31a/quiz-backend/blob/develop/OnlineQuiz/Services/ExportImportLogService.cs): `OnlineQuiz/Services/ExportImportLogService.cs`

### Biometrics and notifications

- [Biometric service](https://github.com/online-quiz-cs31a/quiz-backend/blob/develop/OnlineQuiz/Services/BiometricService.cs): `OnlineQuiz/Services/BiometricService.cs`
- [Biometric hub](https://github.com/online-quiz-cs31a/quiz-backend/blob/develop/OnlineQuiz/Hubs/BiometricHub.cs): `OnlineQuiz/Hubs/BiometricHub.cs`
- [ESP32 integration](https://github.com/online-quiz-cs31a/quiz-backend/blob/develop/OnlineQuiz/Services/HttpESP32Service.cs): `OnlineQuiz/Services/HttpESP32Service.cs`
- [Notifications](https://github.com/online-quiz-cs31a/quiz-backend/blob/develop/OnlineQuiz/Services/NotificationService.cs): `OnlineQuiz/Services/NotificationService.cs`

### Data access

- [Auth repository](https://github.com/online-quiz-cs31a/quiz-backend/blob/develop/OnlineQuiz/Repository/AuthRepository.cs): `OnlineQuiz/Repository/AuthRepository.cs`
- [Domain repositories](https://github.com/online-quiz-cs31a/quiz-backend/tree/develop/OnlineQuiz/Repository): `OnlineQuiz/Repository`
- [Enrollment repository](https://github.com/online-quiz-cs31a/quiz-backend/blob/develop/OnlineQuiz/Repository/EnrollmentRepository.cs): `OnlineQuiz/Repository/EnrollmentRepository.cs`
- [Supabase service](https://github.com/online-quiz-cs31a/quiz-backend/blob/develop/OnlineQuiz/Services/SupabaseService.cs): `OnlineQuiz/Services/SupabaseService.cs`

### Other components

- **Learner / staff**
- **Supabase data**
- **ESP32 device**

## Connections

- Learner / staff → API controllers: sends requests
- API controllers → Authentication: login calls
- Authentication → Auth repository: verifies credentials
- Authentication → User management: loads current user
- API controllers → Enrollment API: routes enrollment
- Enrollment API → Course service: enrolls and queries
- Enrollment API → Activity logging: logs actions
- Auth repository → Domain repositories: loads user records
- Domain repositories → Supabase service: uses client
- Enrollment repository → Supabase service: queries enrollment
- Supabase service → Supabase data: reads and writes
- ESP32 device → ESP32 integration: sends device data
