# say-lem/nativemed architecture

> Architecture diagram of the GitHub repository say-lem/nativemed, 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/say-lem/nativemed
- Repository: https://github.com/say-lem/nativemed

## Overview

Native Med is an API for medical-education courses and products, with enrollment/access management, payments and subscriptions, case-bank access, bookings, and supporting public and admin content. The main user workflow is to reach an API route, request a product or course action, and receive a result; enrollment services also manage course access and confirmation email. The graph emphasizes documented route mounting and sampled enrollment behavior. Other domain modules are represented from the tree and app imports; their internal call paths were not sampled.

Main entry points: [`src/app.ts`](https://github.com/say-lem/nativemed/blob/main/src/app.ts) (Express API), [`src/modules/enrollments/service/enrollments.service.ts`](https://github.com/say-lem/nativemed/blob/main/src/modules/enrollments/service/enrollments.service.ts) (Enrollment service), [`src/modules/enrollments/controller/enrollments.controller.ts`](https://github.com/say-lem/nativemed/blob/main/src/modules/enrollments/controller/enrollments.controller.ts) (Enrollment controller), [`src/modules/enrollments/routes/enrollments.routes.ts`](https://github.com/say-lem/nativemed/blob/main/src/modules/enrollments/routes/enrollments.routes.ts) (Enrollment routes)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_runtime["API runtime"]
  node_api["Express API<br/>[app.ts]"]
  node_auth["Authentication"]
  node_contact["Contact form"]
  node_uploads["Uploads"]
end

subgraph group_commerce["Learning commerce"]
  node_freeproducts["Free products"]
  node_catalog["Product catalog"]
  node_booking["Bookings"]
  node_payments["Payments"]
  node_subscriptions["Subscriptions"]
  node_enrollments["Enrollments"]
  node_enrollmentservice["Enrollment service"]
  node_enrollmentcontroller["Enrollment controller"]
  node_enrollmentroutes["Enrollment routes"]
  node_enrollmentstore[("Enrollment records")]
end

subgraph group_content["Learning content"]
  node_courses["Courses"]
  node_live["Live courses"]
  node_cases["Case bank"]
  node_contentmgmt["Content management"]
  node_homepage["Homepage"]
  node_reviews["Reviews"]
  node_activities["Activities"]
  node_coursestore[("Course records<br/>[courses.model.ts]")]
end

subgraph group_shared["Shared services"]
  node_env["Environment config<br/>[env.ts]"]
  node_userstore[("User records<br/>[auth.model.ts]")]
  node_drive["Google Drive<br/>[google-drive.ts]"]
  node_email["Enrollment email"]
  node_mail["Email delivery<br/>[email.service.ts]"]
end

node_client(("API client"))

node_client -->|"sends requests"| node_api
node_api -->|"mounts routes"| node_auth
node_api -->|"mounts routes"| node_courses
node_api -->|"mounts routes"| node_live
node_api -->|"mounts routes"| node_cases
node_api -->|"mounts routes"| node_contentmgmt
node_api -->|"mounts routes"| node_enrollmentroutes
node_api -->|"mounts routes"| node_payments
node_api -->|"mounts routes"| node_subscriptions
node_api -->|"mounts routes"| node_contact
node_api -->|"mounts routes"| node_reviews
node_api -->|"mounts routes"| node_activities
node_api -->|"mounts routes"| node_homepage
node_api -->|"mounts routes"| node_freeproducts
node_api -->|"mounts routes"| node_booking
node_api -->|"mounts routes"| node_catalog
node_api -->|"mounts routes"| node_uploads
node_api -->|"reads config"| node_env
node_enrollmentroutes -->|"dispatches requests"| node_enrollmentcontroller
node_enrollmentcontroller -->|"calls"| node_enrollmentservice
node_enrollmentcontroller -->|"grants case access"| node_subscriptions
node_enrollmentservice -->|"reads and writes"| node_enrollmentstore
node_enrollmentservice -->|"reads course data"| node_coursestore
node_enrollmentservice -->|"reads user data"| node_userstore
node_enrollmentservice -->|"manages permissions"| node_drive
node_enrollmentservice -->|"sends confirmation"| node_email
node_email -->|"sends messages"| node_mail

click node_api "https://github.com/say-lem/nativemed/blob/main/src/app.ts"
click node_auth "https://github.com/say-lem/nativemed/tree/main/src/modules/auth"
click node_courses "https://github.com/say-lem/nativemed/tree/main/src/modules/courses"
click node_live "https://github.com/say-lem/nativemed/tree/main/src/modules/liveCourses"
click node_cases "https://github.com/say-lem/nativemed/tree/main/src/modules/cases"
click node_contentmgmt "https://github.com/say-lem/nativemed/tree/main/src/modules/content"
click node_homepage "https://github.com/say-lem/nativemed/tree/main/src/modules/homepage"
click node_reviews "https://github.com/say-lem/nativemed/tree/main/src/modules/reviews"
click node_activities "https://github.com/say-lem/nativemed/tree/main/src/modules/activities"
click node_freeproducts "https://github.com/say-lem/nativemed/tree/main/src/modules/freeProducts"
click node_catalog "https://github.com/say-lem/nativemed/tree/main/src/modules/catalog"
click node_booking "https://github.com/say-lem/nativemed/tree/main/src/modules/booking"
click node_payments "https://github.com/say-lem/nativemed/tree/main/src/modules/payments"
click node_subscriptions "https://github.com/say-lem/nativemed/tree/main/src/modules/subscriptions"
click node_enrollments "https://github.com/say-lem/nativemed/tree/main/src/modules/enrollments"
click node_contact "https://github.com/say-lem/nativemed/tree/main/src/modules/contact"
click node_uploads "https://github.com/say-lem/nativemed/tree/main/src/modules/uploads"
click node_env "https://github.com/say-lem/nativemed/blob/main/src/config/env.ts"
click node_userstore "https://github.com/say-lem/nativemed/blob/main/src/modules/auth/model/auth.model.ts"
click node_enrollmentservice "https://github.com/say-lem/nativemed/blob/main/src/modules/enrollments/service/enrollments.service.ts"
click node_enrollmentcontroller "https://github.com/say-lem/nativemed/blob/main/src/modules/enrollments/controller/enrollments.controller.ts"
click node_enrollmentroutes "https://github.com/say-lem/nativemed/blob/main/src/modules/enrollments/routes/enrollments.routes.ts"
click node_enrollmentstore "https://github.com/say-lem/nativemed/blob/main/src/modules/enrollments/model/enrollments.model.ts"
click node_coursestore "https://github.com/say-lem/nativemed/blob/main/src/modules/courses/model/courses.model.ts"
click node_drive "https://github.com/say-lem/nativemed/blob/main/src/config/google-drive.ts"
click node_email "https://github.com/say-lem/nativemed/blob/main/src/modules/enrollments/email/enrollments.email.service.ts"
click node_mail "https://github.com/say-lem/nativemed/blob/main/src/shared/services/email.service.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_api,node_auth,node_contact,node_uploads,node_client toneBlue
class node_freeproducts,node_catalog,node_booking,node_payments,node_subscriptions,node_enrollments,node_enrollmentservice,node_enrollmentcontroller,node_enrollmentroutes,node_enrollmentstore toneAmber
class node_courses,node_live,node_cases,node_contentmgmt,node_homepage,node_reviews,node_activities,node_coursestore toneMint
class node_env,node_userstore,node_drive,node_email,node_mail toneRose
```

## Components

### API runtime

- [Express API](https://github.com/say-lem/nativemed/blob/main/src/app.ts): `src/app.ts`
- [Authentication](https://github.com/say-lem/nativemed/tree/main/src/modules/auth): `src/modules/auth`
- [Contact form](https://github.com/say-lem/nativemed/tree/main/src/modules/contact): `src/modules/contact`
- [Uploads](https://github.com/say-lem/nativemed/tree/main/src/modules/uploads): `src/modules/uploads`

### Learning commerce

- [Free products](https://github.com/say-lem/nativemed/tree/main/src/modules/freeProducts): `src/modules/freeProducts`
- [Product catalog](https://github.com/say-lem/nativemed/tree/main/src/modules/catalog): `src/modules/catalog`
- [Bookings](https://github.com/say-lem/nativemed/tree/main/src/modules/booking): `src/modules/booking`
- [Payments](https://github.com/say-lem/nativemed/tree/main/src/modules/payments): `src/modules/payments`
- [Subscriptions](https://github.com/say-lem/nativemed/tree/main/src/modules/subscriptions): `src/modules/subscriptions`
- [Enrollments](https://github.com/say-lem/nativemed/tree/main/src/modules/enrollments): `src/modules/enrollments`
- [Enrollment service](https://github.com/say-lem/nativemed/blob/main/src/modules/enrollments/service/enrollments.service.ts): `src/modules/enrollments/service/enrollments.service.ts`
- [Enrollment controller](https://github.com/say-lem/nativemed/blob/main/src/modules/enrollments/controller/enrollments.controller.ts): `src/modules/enrollments/controller/enrollments.controller.ts`
- [Enrollment routes](https://github.com/say-lem/nativemed/blob/main/src/modules/enrollments/routes/enrollments.routes.ts): `src/modules/enrollments/routes/enrollments.routes.ts`
- [Enrollment records](https://github.com/say-lem/nativemed/blob/main/src/modules/enrollments/model/enrollments.model.ts): `src/modules/enrollments/model/enrollments.model.ts`

### Learning content

- [Courses](https://github.com/say-lem/nativemed/tree/main/src/modules/courses): `src/modules/courses`
- [Live courses](https://github.com/say-lem/nativemed/tree/main/src/modules/liveCourses): `src/modules/liveCourses`
- [Case bank](https://github.com/say-lem/nativemed/tree/main/src/modules/cases): `src/modules/cases`
- [Content management](https://github.com/say-lem/nativemed/tree/main/src/modules/content): `src/modules/content`
- [Homepage](https://github.com/say-lem/nativemed/tree/main/src/modules/homepage): `src/modules/homepage`
- [Reviews](https://github.com/say-lem/nativemed/tree/main/src/modules/reviews): `src/modules/reviews`
- [Activities](https://github.com/say-lem/nativemed/tree/main/src/modules/activities): `src/modules/activities`
- [Course records](https://github.com/say-lem/nativemed/blob/main/src/modules/courses/model/courses.model.ts): `src/modules/courses/model/courses.model.ts`

### Shared services

- [Environment config](https://github.com/say-lem/nativemed/blob/main/src/config/env.ts): `src/config/env.ts`
- [User records](https://github.com/say-lem/nativemed/blob/main/src/modules/auth/model/auth.model.ts): `src/modules/auth/model/auth.model.ts`
- [Google Drive](https://github.com/say-lem/nativemed/blob/main/src/config/google-drive.ts): `src/config/google-drive.ts`
- [Enrollment email](https://github.com/say-lem/nativemed/blob/main/src/modules/enrollments/email/enrollments.email.service.ts): `src/modules/enrollments/email/enrollments.email.service.ts`
- [Email delivery](https://github.com/say-lem/nativemed/blob/main/src/shared/services/email.service.ts): `src/shared/services/email.service.ts`

### Other components

- **API client**

## Connections

- API client → Express API: sends requests (evidence: `src/app.ts`)
- Express API → Authentication: mounts routes (evidence: `src/app.ts`)
- Express API → Courses: mounts routes (evidence: `src/app.ts`)
- Express API → Live courses: mounts routes (evidence: `src/app.ts`)
- Express API → Case bank: mounts routes (evidence: `src/app.ts`)
- Express API → Content management: mounts routes (evidence: `src/app.ts`)
- Express API → Enrollment routes: mounts routes (evidence: `src/app.ts`)
- Express API → Payments: mounts routes (evidence: `src/app.ts`)
- Express API → Subscriptions: mounts routes (evidence: `src/app.ts`)
- Express API → Contact form: mounts routes (evidence: `src/app.ts`)
- Express API → Reviews: mounts routes (evidence: `src/app.ts`)
- Express API → Activities: mounts routes (evidence: `src/app.ts`)
- Express API → Homepage: mounts routes (evidence: `src/app.ts`)
- Express API → Free products: mounts routes (evidence: `src/app.ts`)
- Express API → Bookings: mounts routes (evidence: `src/app.ts`)
- Express API → Product catalog: mounts routes (evidence: `src/app.ts`)
- Express API → Uploads: mounts routes (evidence: `src/app.ts`)
- Express API → Environment config: reads config (evidence: `src/app.ts`)
- Enrollment routes → Enrollment controller: dispatches requests (evidence: `src/modules/enrollments/routes/enrollments.routes.ts`)
- Enrollment controller → Enrollment service: calls (evidence: `src/modules/enrollments/controller/enrollments.controller.ts`)
- Enrollment controller → Subscriptions: grants case access (evidence: `src/modules/enrollments/controller/enrollments.controller.ts`)
- Enrollment service → Enrollment records: reads and writes (evidence: `src/modules/enrollments/service/enrollments.service.ts`)
- Enrollment service → Course records: reads course data (evidence: `src/modules/enrollments/service/enrollments.service.ts`)
- Enrollment service → User records: reads user data (evidence: `src/modules/enrollments/service/enrollments.service.ts`)
- Enrollment service → Google Drive: manages permissions (evidence: `src/modules/enrollments/service/enrollments.service.ts`)
- Enrollment service → Enrollment email: sends confirmation (evidence: `src/modules/enrollments/service/enrollments.service.ts`)
- Enrollment email → Email delivery: sends messages (evidence: `src/modules/enrollments/email/enrollments.email.service.ts`)
