# daniel-joseph-web/backend-lasustech architecture

> Architecture diagram of the GitHub repository daniel-joseph-web/backend-lasustech, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-10). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/daniel-joseph-web/backend-lasustech
- Repository: https://github.com/daniel-joseph-web/backend-lasustech

## Overview

This repository implements an institutional computer-based testing platform: students authenticate, take timed exams, and submit answers for scoring, while lecturers author and import exam content and administrators manage scheduling, results, and operations. The sampled sources show API routing, attempt scoring, media persistence, import processing, and shared database access. Other listed capabilities are represented at subsystem level where source was not sampled; relationships are included only where the index or excerpts support them.

Main entry points: [`packages/db/src/index.ts`](https://github.com/daniel-joseph-web/backend-lasustech/blob/main/packages/db/src/index.ts) (Application Database), [`apps/api/src/main.ts`](https://github.com/daniel-joseph-web/backend-lasustech/blob/main/apps/api/src/main.ts) (HTTP API), [`apps/api/src/modules/admin/schedule.controller.ts`](https://github.com/daniel-joseph-web/backend-lasustech/blob/main/apps/api/src/modules/admin/schedule.controller.ts) (Scheduling), [`apps/worker/src/modules/import/import.processor.ts`](https://github.com/daniel-joseph-web/backend-lasustech/blob/main/apps/worker/src/modules/import/import.processor.ts) (Import Processing)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_identity["Identity and Access"]
  node_auth["Authentication<br/>[auth.service.ts]"]
  node_authmw["Auth Middleware<br/>[auth.middleware.ts]"]
  node_tokens["Session Tokens<br/>[tokens.ts]"]
end

subgraph group_exam["Exam Delivery"]
  node_studentops["Student Services<br/>[student.service.ts]"]
  node_publicexam["Exam Attempts"]
  node_scoring["Attempt Scoring<br/>[scoring.ts]"]
end

subgraph group_authoring["Authoring and Import"]
  node_lectexam["Exam Authoring"]
  node_questions["Question Authoring"]
  node_importapi["Import API"]
  node_importworker["Import Processing"]
  node_docparser["Document Parsing<br/>[docx.parser.ts]"]
  node_pdfparser["PDF Parsing<br/>[pdf.parser.ts]"]
  node_sheetparser["Spreadsheet Parsing"]
  node_ai["AI Extraction"]
  node_mediaworker["Import Media Storage"]
end

subgraph group_operations["Administration and Operations"]
  node_adminops["Admin Operations<br/>[admin.routes.ts]"]
  node_schedule["Scheduling"]
  node_results["Results Management"]
end

subgraph group_platform["Platform Services"]
  node_api["HTTP API<br/>[main.ts]"]
  node_media["Media Storage<br/>[media.ts]"]
  node_notifications["Notifications"]
  node_realtime["Realtime Monitoring<br/>[socket.ts]"]
  node_audit["Audit Trail<br/>[audit.ts]"]
  node_settings["Platform Settings<br/>[settings.ts]"]
  node_database[("Application Database<br/>[index.ts]")]
end

node_student(("Student"))
node_lecturer(("Lecturer"))
node_admin(("Administrator"))

node_student -->|"uses"| node_api
node_lecturer -->|"uses"| node_api
node_admin -->|"uses"| node_api
node_api -->|"routes auth"| node_auth
node_api -->|"routes requests"| node_studentops
node_api -->|"routes attempts"| node_publicexam
node_api -->|"routes admin"| node_adminops
node_api -->|"initializes client"| node_database
node_auth -->|"creates tokens"| node_tokens
node_auth -->|"reads policy"| node_settings
node_auth -->|"reads and writes"| node_database
node_authmw -->|"verifies tokens"| node_tokens
node_authmw -->|"reads policy"| node_settings
node_studentops -->|"uses scoring"| node_scoring
node_studentops -->|"reads and writes"| node_database
node_publicexam -->|"scores attempts"| node_scoring
node_publicexam -->|"resolves media"| node_media
node_publicexam -->|"reads and writes"| node_database
node_lectexam -->|"resolves media"| node_media
node_lectexam -->|"reads and writes"| node_database
node_questions -->|"uses media"| node_media
node_questions -->|"reads and writes"| node_database
node_importworker -->|"parses DOCX"| node_docparser
node_importworker -->|"parses PDF"| node_pdfparser
node_importworker -->|"parses spreadsheets"| node_sheetparser
node_importworker -->|"extracts content"| node_ai
node_importworker -->|"persists figures"| node_mediaworker
node_mediaworker -->|"reuses storage"| node_media
node_mediaworker -->|"stores metadata"| node_database
node_adminops -.->|"routes scheduling"| node_schedule
node_adminops -.->|"routes results"| node_results
node_schedule -->|"reads and writes"| node_database
node_schedule -->|"reads settings"| node_settings
node_schedule -->|"notifies users"| node_notifications
node_schedule -->|"publishes updates"| node_realtime
node_schedule -->|"uses student logic"| node_studentops
node_notifications -->|"reads notifications"| node_database
node_audit -->|"stores audit chain"| node_database
node_admin -.->|"administrates audit"| node_audit

click node_api "https://github.com/daniel-joseph-web/backend-lasustech/blob/main/apps/api/src/main.ts"
click node_auth "https://github.com/daniel-joseph-web/backend-lasustech/blob/main/apps/api/src/modules/auth/auth.service.ts"
click node_authmw "https://github.com/daniel-joseph-web/backend-lasustech/blob/main/apps/api/src/modules/auth/auth.middleware.ts"
click node_tokens "https://github.com/daniel-joseph-web/backend-lasustech/blob/main/apps/api/src/modules/auth/tokens.ts"
click node_studentops "https://github.com/daniel-joseph-web/backend-lasustech/blob/main/apps/api/src/modules/student/student.service.ts"
click node_publicexam "https://github.com/daniel-joseph-web/backend-lasustech/blob/main/apps/api/src/modules/public-exams/public-exams.controller.ts"
click node_scoring "https://github.com/daniel-joseph-web/backend-lasustech/blob/main/apps/api/src/modules/public-exams/scoring.ts"
click node_lectexam "https://github.com/daniel-joseph-web/backend-lasustech/blob/main/apps/api/src/modules/lecturer/exams.controller.ts"
click node_questions "https://github.com/daniel-joseph-web/backend-lasustech/blob/main/apps/api/src/modules/lecturer/questions.controller.ts"
click node_importapi "https://github.com/daniel-joseph-web/backend-lasustech/blob/main/apps/api/src/modules/lecturer/import.controller.ts"
click node_importworker "https://github.com/daniel-joseph-web/backend-lasustech/blob/main/apps/worker/src/modules/import/import.processor.ts"
click node_docparser "https://github.com/daniel-joseph-web/backend-lasustech/blob/main/apps/worker/src/modules/import/parsers/docx.parser.ts"
click node_pdfparser "https://github.com/daniel-joseph-web/backend-lasustech/blob/main/apps/worker/src/modules/import/parsers/pdf.parser.ts"
click node_sheetparser "https://github.com/daniel-joseph-web/backend-lasustech/blob/main/apps/worker/src/modules/import/parsers/spreadsheet.parser.ts"
click node_ai "https://github.com/daniel-joseph-web/backend-lasustech/blob/main/apps/worker/src/modules/import/services/cloudflare-ai.service.ts"
click node_media "https://github.com/daniel-joseph-web/backend-lasustech/blob/main/apps/api/src/lib/media.ts"
click node_mediaworker "https://github.com/daniel-joseph-web/backend-lasustech/blob/main/apps/worker/src/modules/import/services/media-storage.service.ts"
click node_adminops "https://github.com/daniel-joseph-web/backend-lasustech/blob/main/apps/api/src/modules/admin/admin.routes.ts"
click node_schedule "https://github.com/daniel-joseph-web/backend-lasustech/blob/main/apps/api/src/modules/admin/schedule.controller.ts"
click node_results "https://github.com/daniel-joseph-web/backend-lasustech/blob/main/apps/api/src/modules/admin/results.controller.ts"
click node_notifications "https://github.com/daniel-joseph-web/backend-lasustech/blob/main/apps/api/src/modules/notifications/notifications.controller.ts"
click node_realtime "https://github.com/daniel-joseph-web/backend-lasustech/blob/main/apps/realtime/src/modules/monitoring/socket.ts"
click node_audit "https://github.com/daniel-joseph-web/backend-lasustech/blob/main/apps/api/src/lib/audit.ts"
click node_settings "https://github.com/daniel-joseph-web/backend-lasustech/blob/main/apps/api/src/lib/settings.ts"
click node_database "https://github.com/daniel-joseph-web/backend-lasustech/blob/main/packages/db/src/index.ts"

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,node_authmw,node_tokens toneBlue
class node_studentops,node_publicexam,node_scoring toneAmber
class node_lectexam,node_questions,node_importapi,node_importworker,node_docparser,node_pdfparser,node_sheetparser,node_ai,node_mediaworker toneMint
class node_adminops,node_schedule,node_results toneRose
class node_api,node_media,node_notifications,node_realtime,node_audit,node_settings,node_database,node_student,node_lecturer,node_admin toneIndigo
```

## Components

### Identity and Access

- [Authentication](https://github.com/daniel-joseph-web/backend-lasustech/blob/main/apps/api/src/modules/auth/auth.service.ts): `apps/api/src/modules/auth/auth.service.ts`
- [Auth Middleware](https://github.com/daniel-joseph-web/backend-lasustech/blob/main/apps/api/src/modules/auth/auth.middleware.ts): `apps/api/src/modules/auth/auth.middleware.ts`
- [Session Tokens](https://github.com/daniel-joseph-web/backend-lasustech/blob/main/apps/api/src/modules/auth/tokens.ts): `apps/api/src/modules/auth/tokens.ts`

### Exam Delivery

- [Student Services](https://github.com/daniel-joseph-web/backend-lasustech/blob/main/apps/api/src/modules/student/student.service.ts): `apps/api/src/modules/student/student.service.ts`
- [Exam Attempts](https://github.com/daniel-joseph-web/backend-lasustech/blob/main/apps/api/src/modules/public-exams/public-exams.controller.ts): `apps/api/src/modules/public-exams/public-exams.controller.ts`
- [Attempt Scoring](https://github.com/daniel-joseph-web/backend-lasustech/blob/main/apps/api/src/modules/public-exams/scoring.ts): `apps/api/src/modules/public-exams/scoring.ts`

### Authoring and Import

- [Exam Authoring](https://github.com/daniel-joseph-web/backend-lasustech/blob/main/apps/api/src/modules/lecturer/exams.controller.ts): `apps/api/src/modules/lecturer/exams.controller.ts`
- [Question Authoring](https://github.com/daniel-joseph-web/backend-lasustech/blob/main/apps/api/src/modules/lecturer/questions.controller.ts): `apps/api/src/modules/lecturer/questions.controller.ts`
- [Import API](https://github.com/daniel-joseph-web/backend-lasustech/blob/main/apps/api/src/modules/lecturer/import.controller.ts): `apps/api/src/modules/lecturer/import.controller.ts`
- [Import Processing](https://github.com/daniel-joseph-web/backend-lasustech/blob/main/apps/worker/src/modules/import/import.processor.ts): `apps/worker/src/modules/import/import.processor.ts`
- [Document Parsing](https://github.com/daniel-joseph-web/backend-lasustech/blob/main/apps/worker/src/modules/import/parsers/docx.parser.ts): `apps/worker/src/modules/import/parsers/docx.parser.ts`
- [PDF Parsing](https://github.com/daniel-joseph-web/backend-lasustech/blob/main/apps/worker/src/modules/import/parsers/pdf.parser.ts): `apps/worker/src/modules/import/parsers/pdf.parser.ts`
- [Spreadsheet Parsing](https://github.com/daniel-joseph-web/backend-lasustech/blob/main/apps/worker/src/modules/import/parsers/spreadsheet.parser.ts): `apps/worker/src/modules/import/parsers/spreadsheet.parser.ts`
- [AI Extraction](https://github.com/daniel-joseph-web/backend-lasustech/blob/main/apps/worker/src/modules/import/services/cloudflare-ai.service.ts): `apps/worker/src/modules/import/services/cloudflare-ai.service.ts`
- [Import Media Storage](https://github.com/daniel-joseph-web/backend-lasustech/blob/main/apps/worker/src/modules/import/services/media-storage.service.ts): `apps/worker/src/modules/import/services/media-storage.service.ts`

### Administration and Operations

- [Admin Operations](https://github.com/daniel-joseph-web/backend-lasustech/blob/main/apps/api/src/modules/admin/admin.routes.ts): `apps/api/src/modules/admin/admin.routes.ts`
- [Scheduling](https://github.com/daniel-joseph-web/backend-lasustech/blob/main/apps/api/src/modules/admin/schedule.controller.ts): `apps/api/src/modules/admin/schedule.controller.ts`
- [Results Management](https://github.com/daniel-joseph-web/backend-lasustech/blob/main/apps/api/src/modules/admin/results.controller.ts): `apps/api/src/modules/admin/results.controller.ts`

### Platform Services

- [HTTP API](https://github.com/daniel-joseph-web/backend-lasustech/blob/main/apps/api/src/main.ts): `apps/api/src/main.ts`
- [Media Storage](https://github.com/daniel-joseph-web/backend-lasustech/blob/main/apps/api/src/lib/media.ts): `apps/api/src/lib/media.ts`
- [Notifications](https://github.com/daniel-joseph-web/backend-lasustech/blob/main/apps/api/src/modules/notifications/notifications.controller.ts): `apps/api/src/modules/notifications/notifications.controller.ts`
- [Realtime Monitoring](https://github.com/daniel-joseph-web/backend-lasustech/blob/main/apps/realtime/src/modules/monitoring/socket.ts): `apps/realtime/src/modules/monitoring/socket.ts`
- [Audit Trail](https://github.com/daniel-joseph-web/backend-lasustech/blob/main/apps/api/src/lib/audit.ts): `apps/api/src/lib/audit.ts`
- [Platform Settings](https://github.com/daniel-joseph-web/backend-lasustech/blob/main/apps/api/src/lib/settings.ts): `apps/api/src/lib/settings.ts`
- [Application Database](https://github.com/daniel-joseph-web/backend-lasustech/blob/main/packages/db/src/index.ts): `packages/db/src/index.ts`

### Other components

- **Student**
- **Lecturer**
- **Administrator**

## Connections

- Student → HTTP API: uses
- Lecturer → HTTP API: uses
- Administrator → HTTP API: uses
- HTTP API → Authentication: routes auth (evidence: `apps/api/src/main.ts`)
- HTTP API → Student Services: routes requests (evidence: `apps/api/src/main.ts`)
- HTTP API → Exam Attempts: routes attempts (evidence: `apps/api/src/main.ts`)
- HTTP API → Admin Operations: routes admin (evidence: `apps/api/src/main.ts`)
- HTTP API → Application Database: initializes client (evidence: `apps/api/src/main.ts`)
- Authentication → Session Tokens: creates tokens (evidence: `apps/api/src/modules/auth/auth.service.ts`)
- Authentication → Platform Settings: reads policy (evidence: `apps/api/src/modules/auth/auth.service.ts`)
- Authentication → Application Database: reads and writes (evidence: `apps/api/src/modules/auth/auth.service.ts`)
- Auth Middleware → Session Tokens: verifies tokens (evidence: `apps/api/src/modules/auth/auth.middleware.ts`)
- Auth Middleware → Platform Settings: reads policy (evidence: `apps/api/src/modules/auth/auth.middleware.ts`)
- Student Services → Attempt Scoring: uses scoring (evidence: `apps/api/src/modules/student/student.service.ts`)
- Student Services → Application Database: reads and writes (evidence: `apps/api/src/modules/student/student.service.ts`)
- Exam Attempts → Attempt Scoring: scores attempts (evidence: `apps/api/src/modules/public-exams/public-exams.controller.ts`)
- Exam Attempts → Media Storage: resolves media (evidence: `apps/api/src/modules/public-exams/public-exams.controller.ts`)
- Exam Attempts → Application Database: reads and writes (evidence: `apps/api/src/modules/public-exams/public-exams.controller.ts`)
- Exam Authoring → Media Storage: resolves media (evidence: `apps/api/src/modules/lecturer/exams.controller.ts`)
- Exam Authoring → Application Database: reads and writes (evidence: `apps/api/src/modules/lecturer/exams.controller.ts`)
- Question Authoring → Media Storage: uses media (evidence: `apps/api/src/modules/lecturer/questions.controller.ts`)
- Question Authoring → Application Database: reads and writes (evidence: `apps/api/src/modules/lecturer/questions.controller.ts`)
- Import Processing → Document Parsing: parses DOCX (evidence: `apps/worker/src/modules/import/import.processor.ts`)
- Import Processing → PDF Parsing: parses PDF (evidence: `apps/worker/src/modules/import/import.processor.ts`)
- Import Processing → Spreadsheet Parsing: parses spreadsheets (evidence: `apps/worker/src/modules/import/import.processor.ts`)
- Import Processing → AI Extraction: extracts content (evidence: `apps/worker/src/modules/import/import.processor.ts`)
- Import Processing → Import Media Storage: persists figures (evidence: `apps/worker/src/modules/import/import.processor.ts`)
- Import Media Storage → Media Storage: reuses storage (evidence: `apps/worker/src/modules/import/services/media-storage.service.ts`)
- Import Media Storage → Application Database: stores metadata (evidence: `apps/worker/src/modules/import/services/media-storage.service.ts`)
- Admin Operations → Scheduling: routes scheduling
- Admin Operations → Results Management: routes results
- Scheduling → Application Database: reads and writes (evidence: `apps/api/src/modules/admin/schedule.controller.ts`)
- Scheduling → Platform Settings: reads settings (evidence: `apps/api/src/modules/admin/schedule.controller.ts`)
- Scheduling → Notifications: notifies users (evidence: `apps/api/src/modules/admin/schedule.controller.ts`)
- Scheduling → Realtime Monitoring: publishes updates (evidence: `apps/api/src/modules/admin/schedule.controller.ts`)
- Scheduling → Student Services: uses student logic (evidence: `apps/api/src/modules/admin/schedule.controller.ts`)
- Notifications → Application Database: reads notifications (evidence: `apps/api/src/modules/notifications/notifications.controller.ts`)
- Audit Trail → Application Database: stores audit chain (evidence: `apps/api/src/lib/audit.ts`)
- Administrator → Audit Trail: administrates audit
