# kaistrum/academy_backend architecture

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

- Interactive diagram: https://gitdiagram.com/kaistrum/academy_backend
- Repository: https://github.com/kaistrum/academy_backend

## Overview

Kaistrum Academy is an Express/MongoDB learning API. Learners browse and inspect courses, enrol (or complete Paystack checkout for premium access), work through gated lessons and record progress; completion enables reviews and certificates. The back office supports admin and instructor course operations. The graph retains the README’s major product capabilities, while sampled source confirms only some service calls; dashed links mark documented or otherwise unverified wiring. The database is a shared persistence layer.

Main entry points: [`src/db/collections.js`](https://github.com/kaistrum/academy_backend/blob/master/src/db/collections.js) (MongoDB collections), [`src/app.js`](https://github.com/kaistrum/academy_backend/blob/master/src/app.js) (Express API), [`src/modules/enrollments/enrollments.service.js`](https://github.com/kaistrum/academy_backend/blob/master/src/modules/enrollments/enrollments.service.js) (Enrolment and progress), [`src/modules/courses/courses.service.js`](https://github.com/kaistrum/academy_backend/blob/master/src/modules/courses/courses.service.js) (Course catalogue)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["API entry"]
  node_api["Express API<br/>[app.js]"]
  node_request_controls["Request controls<br/>[validate.js]"]
  node_database[("MongoDB collections<br/>[collections.js]")]
end

subgraph group_learning["Learning experience"]
  node_catalogue["Course catalogue<br/>[courses.service.js]"]
  node_tracks["Tracks<br/>[tracks.service.js]"]
  node_enrolments["Enrolment and progress"]
  node_favourites["Favourites"]
  node_reviews["Reviews<br/>[reviews.service.js]"]
end

subgraph group_identity["Identity and people"]
  node_auth["Authentication<br/>[auth.service.js]"]
  node_users["User accounts<br/>[users.service.js]"]
  node_instructors["Instructor profiles"]
  node_mailer["Email delivery<br/>[mailer.js]"]
end

subgraph group_commerce["Commerce and outcomes"]
  node_payments["Payments"]
  node_certificates["Certificates"]
end

subgraph group_operations["Back office"]
  node_admin["Admin operations<br/>[admin.service.js]"]
  node_course_admin["Course management"]
  node_audit["Audit logging<br/>[audit.js]"]
end

node_learner(("Learner"))
node_paystack["Paystack"]
node_oauth_provider["OAuth providers"]

node_learner -->|"uses API"| node_api
node_api -->|"validates requests"| node_request_controls
node_api -.->|"routes auth"| node_auth
node_api -.->|"routes catalogue"| node_catalogue
node_api -.->|"routes enrolment"| node_enrolments
node_api -.->|"routes payments"| node_payments
node_api -.->|"routes certificates"| node_certificates
node_api -.->|"routes back office"| node_admin
node_auth -->|"reads accounts"| node_database
node_catalogue -->|"queries courses"| node_database
node_enrolments -->|"finds course"| node_catalogue
node_enrolments -->|"reads and writes"| node_database
node_enrolments -.->|"unlocks on completion"| node_certificates
node_enrolments -->|"sends notice"| node_mailer
node_payments -->|"verifies checkout"| node_paystack
node_payments -->|"creates enrolment"| node_enrolments
node_learner -.->|"pays externally"| node_paystack
node_learner -.->|"signs in"| node_oauth_provider
node_auth -->|"sends account mail"| node_mailer
node_admin -->|"reads and writes"| node_database
node_admin -->|"records actions"| node_audit
node_admin -->|"delegates course work"| node_course_admin
node_reviews -->|"reads and writes"| node_database
node_catalogue -.->|"uses track data"| node_tracks
node_catalogue -.->|"uses instructor data"| node_instructors
node_favourites -.->|"reads and writes"| node_database
node_users -.->|"reads and writes"| node_database
node_tracks -.->|"reads and writes"| node_database
node_instructors -.->|"reads and writes"| node_database
node_certificates -.->|"reads and writes"| node_database

click node_api "https://github.com/kaistrum/academy_backend/blob/master/src/app.js"
click node_request_controls "https://github.com/kaistrum/academy_backend/blob/master/src/middleware/validate.js"
click node_database "https://github.com/kaistrum/academy_backend/blob/master/src/db/collections.js"
click node_auth "https://github.com/kaistrum/academy_backend/blob/master/src/modules/auth/auth.service.js"
click node_users "https://github.com/kaistrum/academy_backend/blob/master/src/modules/users/users.service.js"
click node_catalogue "https://github.com/kaistrum/academy_backend/blob/master/src/modules/courses/courses.service.js"
click node_tracks "https://github.com/kaistrum/academy_backend/blob/master/src/modules/tracks/tracks.service.js"
click node_instructors "https://github.com/kaistrum/academy_backend/blob/master/src/modules/instructors/instructors.service.js"
click node_enrolments "https://github.com/kaistrum/academy_backend/blob/master/src/modules/enrollments/enrollments.service.js"
click node_favourites "https://github.com/kaistrum/academy_backend/blob/master/src/modules/favourites/favourites.service.js"
click node_reviews "https://github.com/kaistrum/academy_backend/blob/master/src/modules/reviews/reviews.service.js"
click node_payments "https://github.com/kaistrum/academy_backend/blob/master/src/modules/payments/payments.service.js"
click node_certificates "https://github.com/kaistrum/academy_backend/blob/master/src/modules/certificates/certificates.service.js"
click node_mailer "https://github.com/kaistrum/academy_backend/blob/master/src/lib/mailer.js"
click node_admin "https://github.com/kaistrum/academy_backend/blob/master/src/modules/admin/admin.service.js"
click node_course_admin "https://github.com/kaistrum/academy_backend/blob/master/src/modules/admin/courses.admin.service.js"
click node_audit "https://github.com/kaistrum/academy_backend/blob/master/src/lib/audit.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_api,node_request_controls,node_database toneBlue
class node_catalogue,node_tracks,node_enrolments,node_favourites,node_reviews toneAmber
class node_auth,node_users,node_instructors,node_mailer toneMint
class node_payments,node_certificates toneRose
class node_admin,node_course_admin,node_audit,node_learner,node_paystack,node_oauth_provider toneIndigo
```

## Components

### API entry

- [Express API](https://github.com/kaistrum/academy_backend/blob/master/src/app.js): `src/app.js`
- [Request controls](https://github.com/kaistrum/academy_backend/blob/master/src/middleware/validate.js): `src/middleware/validate.js`
- [MongoDB collections](https://github.com/kaistrum/academy_backend/blob/master/src/db/collections.js): `src/db/collections.js`

### Learning experience

- [Course catalogue](https://github.com/kaistrum/academy_backend/blob/master/src/modules/courses/courses.service.js): `src/modules/courses/courses.service.js`
- [Tracks](https://github.com/kaistrum/academy_backend/blob/master/src/modules/tracks/tracks.service.js): `src/modules/tracks/tracks.service.js`
- [Enrolment and progress](https://github.com/kaistrum/academy_backend/blob/master/src/modules/enrollments/enrollments.service.js): `src/modules/enrollments/enrollments.service.js`
- [Favourites](https://github.com/kaistrum/academy_backend/blob/master/src/modules/favourites/favourites.service.js): `src/modules/favourites/favourites.service.js`
- [Reviews](https://github.com/kaistrum/academy_backend/blob/master/src/modules/reviews/reviews.service.js): `src/modules/reviews/reviews.service.js`

### Identity and people

- [Authentication](https://github.com/kaistrum/academy_backend/blob/master/src/modules/auth/auth.service.js): `src/modules/auth/auth.service.js`
- [User accounts](https://github.com/kaistrum/academy_backend/blob/master/src/modules/users/users.service.js): `src/modules/users/users.service.js`
- [Instructor profiles](https://github.com/kaistrum/academy_backend/blob/master/src/modules/instructors/instructors.service.js): `src/modules/instructors/instructors.service.js`
- [Email delivery](https://github.com/kaistrum/academy_backend/blob/master/src/lib/mailer.js): `src/lib/mailer.js`

### Commerce and outcomes

- [Payments](https://github.com/kaistrum/academy_backend/blob/master/src/modules/payments/payments.service.js): `src/modules/payments/payments.service.js`
- [Certificates](https://github.com/kaistrum/academy_backend/blob/master/src/modules/certificates/certificates.service.js): `src/modules/certificates/certificates.service.js`

### Back office

- [Admin operations](https://github.com/kaistrum/academy_backend/blob/master/src/modules/admin/admin.service.js): `src/modules/admin/admin.service.js`
- [Course management](https://github.com/kaistrum/academy_backend/blob/master/src/modules/admin/courses.admin.service.js): `src/modules/admin/courses.admin.service.js`
- [Audit logging](https://github.com/kaistrum/academy_backend/blob/master/src/lib/audit.js): `src/lib/audit.js`

### Other components

- **Learner**
- **Paystack**
- **OAuth providers**

## Connections

- Learner → Express API: uses API
- Express API → Request controls: validates requests (evidence: `src/app.js`)
- Express API → Authentication: routes auth
- Express API → Course catalogue: routes catalogue
- Express API → Enrolment and progress: routes enrolment
- Express API → Payments: routes payments
- Express API → Certificates: routes certificates
- Express API → Admin operations: routes back office
- Authentication → MongoDB collections: reads accounts (evidence: `src/modules/auth/auth.service.js`)
- Course catalogue → MongoDB collections: queries courses (evidence: `src/modules/courses/courses.service.js`)
- Enrolment and progress → Course catalogue: finds course (evidence: `src/modules/enrollments/enrollments.service.js`)
- Enrolment and progress → MongoDB collections: reads and writes (evidence: `src/modules/enrollments/enrollments.service.js`)
- Enrolment and progress → Certificates: unlocks on completion
- Enrolment and progress → Email delivery: sends notice (evidence: `src/modules/enrollments/enrollments.service.js`)
- Payments → Paystack: verifies checkout (evidence: `src/modules/payments/payments.service.js`)
- Payments → Enrolment and progress: creates enrolment (evidence: `src/modules/payments/payments.service.js`)
- Learner → Paystack: pays externally
- Learner → OAuth providers: signs in
- Authentication → Email delivery: sends account mail (evidence: `src/modules/auth/auth.service.js`)
- Admin operations → MongoDB collections: reads and writes (evidence: `src/modules/admin/admin.service.js`)
- Admin operations → Audit logging: records actions (evidence: `src/modules/admin/admin.routes.js`)
- Admin operations → Course management: delegates course work (evidence: `src/modules/admin/admin.routes.js`)
- Reviews → MongoDB collections: reads and writes (evidence: `src/modules/reviews/reviews.service.js`)
- Course catalogue → Tracks: uses track data
- Course catalogue → Instructor profiles: uses instructor data
- Favourites → MongoDB collections: reads and writes
- User accounts → MongoDB collections: reads and writes
- Tracks → MongoDB collections: reads and writes
- Instructor profiles → MongoDB collections: reads and writes
- Certificates → MongoDB collections: reads and writes
