# harshgupta2902/dev-o-lingo-api architecture

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

- Interactive diagram: https://gitdiagram.com/harshgupta2902/dev-o-lingo-api
- Repository: https://github.com/harshgupta2902/dev-o-lingo-api

## Overview

Dev-O-Lingo is a language-learning app API. Learners authenticate and set onboarding preferences, retrieve lessons, submit answers, and receive progression rewards; separate API branches support daily practice, social activity, purchases, and engagement. Express mounts the API routes, which dispatch feature controllers; controllers use Prisma for application state. The README documents additional feature areas and scheduled notifications, but excerpts do not show every route-to-controller call, so those detailed links are omitted.

Main entry points: [`src/prismaClient.js`](https://github.com/harshgupta2902/dev-o-lingo-api/blob/main/src/prismaClient.js) (Prisma client), [`src/controller/language.controller.js`](https://github.com/harshgupta2902/dev-o-lingo-api/blob/main/src/controller/language.controller.js) (Lessons), [`src/routes/routes.js`](https://github.com/harshgupta2902/dev-o-lingo-api/blob/main/src/routes/routes.js) (Route mount), [`src/controller/auth.controller.js`](https://github.com/harshgupta2902/dev-o-lingo-api/blob/main/src/controller/auth.controller.js) (Authentication)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["API runtime"]
  node_app["Express app<br/>[app.js]"]
  node_routes["Route mount<br/>[routes.js]"]
  node_auth["Authentication<br/>[auth.controller.js]"]
  node_authroutes["Auth routes<br/>[auth.routes.js]"]
  node_middleware["JWT middleware<br/>[middleware.js]"]
end

subgraph group_learning["Learning progression"]
  node_language["Lessons"]
  node_langroutes["Lesson routes<br/>[language.routes.js]"]
  node_progress["Stats and refill"]
  node_practice["Daily practice"]
  node_practiceroutes["Practice routes"]
  node_leaderboard["Leaderboard"]
  node_achievement["Achievements"]
end

subgraph group_engagement["Engagement features"]
  node_social["Social features"]
  node_shop["Shop and IAP<br/>[shop.controller.js]"]
  node_ads["Ad rewards<br/>[ads.controller.js]"]
  node_notifications["Notifications"]
  node_jobs["Scheduled reminders"]
  node_notify["Push helpers"]
end

subgraph group_platform["Persistence and integrations"]
  node_prisma["Prisma client<br/>[prismaClient.js]"]
  node_schema[("Application data<br/>[schema.prisma]")]
end

node_learner(("Learner"))
node_mysql[("MySQL")]
node_firebase["Firebase services"]
node_googleplay["Google Play"]

node_learner -->|"sends requests"| node_app
node_app -->|"mounts API"| node_routes
node_routes -->|"mounts routes"| node_authroutes
node_routes -->|"mounts routes"| node_langroutes
node_routes -->|"mounts routes"| node_practiceroutes
node_authroutes -->|"dispatches"| node_auth
node_authroutes -->|"protects routes"| node_middleware
node_practiceroutes -->|"protects routes"| node_middleware
node_practiceroutes -->|"dispatches"| node_practice
node_langroutes -->|"dispatches"| node_language
node_language -->|"ensures user state"| node_progress
node_language -->|"updates rankings"| node_leaderboard
node_language -->|"checks unlocks"| node_achievement
node_practice -->|"updates rankings"| node_leaderboard
node_auth -->|"checks unlocks"| node_achievement
node_auth -.->|"verifies sign-in"| node_firebase
node_shop -.->|"verifies purchase"| node_googleplay
node_jobs -->|"uses push helpers"| node_notify
node_notify -->|"sends push"| node_firebase
node_app -->|"registers scheduler"| node_jobs
node_auth -->|"reads and writes"| node_prisma
node_language -->|"reads and writes"| node_prisma
node_progress -->|"reads and writes"| node_prisma
node_practice -->|"reads and writes"| node_prisma
node_shop -->|"reads and writes"| node_prisma
node_prisma -->|"uses models"| node_schema
node_prisma -->|"persists data"| node_mysql

click node_app "https://github.com/harshgupta2902/dev-o-lingo-api/blob/main/src/app.js"
click node_routes "https://github.com/harshgupta2902/dev-o-lingo-api/blob/main/src/routes/routes.js"
click node_auth "https://github.com/harshgupta2902/dev-o-lingo-api/blob/main/src/controller/auth.controller.js"
click node_authroutes "https://github.com/harshgupta2902/dev-o-lingo-api/blob/main/src/routes/auth.routes.js"
click node_middleware "https://github.com/harshgupta2902/dev-o-lingo-api/blob/main/src/middleware.js"
click node_language "https://github.com/harshgupta2902/dev-o-lingo-api/blob/main/src/controller/language.controller.js"
click node_langroutes "https://github.com/harshgupta2902/dev-o-lingo-api/blob/main/src/routes/language.routes.js"
click node_progress "https://github.com/harshgupta2902/dev-o-lingo-api/blob/main/src/controller/progress.controller.js"
click node_practice "https://github.com/harshgupta2902/dev-o-lingo-api/blob/main/src/controller/dailyPractice.controller.js"
click node_practiceroutes "https://github.com/harshgupta2902/dev-o-lingo-api/blob/main/src/routes/dailyPractice.routes.js"
click node_leaderboard "https://github.com/harshgupta2902/dev-o-lingo-api/blob/main/src/controller/leaderboard.controller.js"
click node_achievement "https://github.com/harshgupta2902/dev-o-lingo-api/blob/main/src/controller/achievement.controller.js"
click node_social "https://github.com/harshgupta2902/dev-o-lingo-api/blob/main/src/controller/social.controller.js"
click node_shop "https://github.com/harshgupta2902/dev-o-lingo-api/blob/main/src/controller/shop.controller.js"
click node_ads "https://github.com/harshgupta2902/dev-o-lingo-api/blob/main/src/controller/ads.controller.js"
click node_notifications "https://github.com/harshgupta2902/dev-o-lingo-api/blob/main/src/controller/notification.controller.js"
click node_jobs "https://github.com/harshgupta2902/dev-o-lingo-api/tree/main/src/jobs"
click node_notify "https://github.com/harshgupta2902/dev-o-lingo-api/tree/main/src/services"
click node_prisma "https://github.com/harshgupta2902/dev-o-lingo-api/blob/main/src/prismaClient.js"
click node_schema "https://github.com/harshgupta2902/dev-o-lingo-api/blob/main/prisma/schema.prisma"

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_app,node_routes,node_auth,node_authroutes,node_middleware toneBlue
class node_language,node_langroutes,node_progress,node_practice,node_practiceroutes,node_leaderboard,node_achievement,node_mysql toneAmber
class node_social,node_shop,node_ads,node_notifications,node_jobs,node_notify toneMint
class node_prisma,node_schema toneRose
class node_learner,node_firebase,node_googleplay toneIndigo
```

## Components

### API runtime

- [Express app](https://github.com/harshgupta2902/dev-o-lingo-api/blob/main/src/app.js): `src/app.js`
- [Route mount](https://github.com/harshgupta2902/dev-o-lingo-api/blob/main/src/routes/routes.js): `src/routes/routes.js`
- [Authentication](https://github.com/harshgupta2902/dev-o-lingo-api/blob/main/src/controller/auth.controller.js): `src/controller/auth.controller.js`
- [Auth routes](https://github.com/harshgupta2902/dev-o-lingo-api/blob/main/src/routes/auth.routes.js): `src/routes/auth.routes.js`
- [JWT middleware](https://github.com/harshgupta2902/dev-o-lingo-api/blob/main/src/middleware.js): `src/middleware.js`

### Learning progression

- [Lessons](https://github.com/harshgupta2902/dev-o-lingo-api/blob/main/src/controller/language.controller.js): `src/controller/language.controller.js`
- [Lesson routes](https://github.com/harshgupta2902/dev-o-lingo-api/blob/main/src/routes/language.routes.js): `src/routes/language.routes.js`
- [Stats and refill](https://github.com/harshgupta2902/dev-o-lingo-api/blob/main/src/controller/progress.controller.js): `src/controller/progress.controller.js`
- [Daily practice](https://github.com/harshgupta2902/dev-o-lingo-api/blob/main/src/controller/dailyPractice.controller.js): `src/controller/dailyPractice.controller.js`
- [Practice routes](https://github.com/harshgupta2902/dev-o-lingo-api/blob/main/src/routes/dailyPractice.routes.js): `src/routes/dailyPractice.routes.js`
- [Leaderboard](https://github.com/harshgupta2902/dev-o-lingo-api/blob/main/src/controller/leaderboard.controller.js): `src/controller/leaderboard.controller.js`
- [Achievements](https://github.com/harshgupta2902/dev-o-lingo-api/blob/main/src/controller/achievement.controller.js): `src/controller/achievement.controller.js`

### Engagement features

- [Social features](https://github.com/harshgupta2902/dev-o-lingo-api/blob/main/src/controller/social.controller.js): `src/controller/social.controller.js`
- [Shop and IAP](https://github.com/harshgupta2902/dev-o-lingo-api/blob/main/src/controller/shop.controller.js): `src/controller/shop.controller.js`
- [Ad rewards](https://github.com/harshgupta2902/dev-o-lingo-api/blob/main/src/controller/ads.controller.js): `src/controller/ads.controller.js`
- [Notifications](https://github.com/harshgupta2902/dev-o-lingo-api/blob/main/src/controller/notification.controller.js): `src/controller/notification.controller.js`
- [Scheduled reminders](https://github.com/harshgupta2902/dev-o-lingo-api/tree/main/src/jobs): `src/jobs`
- [Push helpers](https://github.com/harshgupta2902/dev-o-lingo-api/tree/main/src/services): `src/services`

### Persistence and integrations

- [Prisma client](https://github.com/harshgupta2902/dev-o-lingo-api/blob/main/src/prismaClient.js): `src/prismaClient.js`
- [Application data](https://github.com/harshgupta2902/dev-o-lingo-api/blob/main/prisma/schema.prisma): `prisma/schema.prisma`

### Other components

- **Learner**
- **MySQL**
- **Firebase services**
- **Google Play**

## Connections

- Learner → Express app: sends requests
- Express app → Route mount: mounts API
- Route mount → Auth routes: mounts routes
- Route mount → Lesson routes: mounts routes
- Route mount → Practice routes: mounts routes
- Auth routes → Authentication: dispatches
- Auth routes → JWT middleware: protects routes
- Practice routes → JWT middleware: protects routes
- Practice routes → Daily practice: dispatches
- Lesson routes → Lessons: dispatches
- Lessons → Stats and refill: ensures user state
- Lessons → Leaderboard: updates rankings
- Lessons → Achievements: checks unlocks
- Daily practice → Leaderboard: updates rankings
- Authentication → Achievements: checks unlocks
- Authentication → Firebase services: verifies sign-in
- Shop and IAP → Google Play: verifies purchase
- Scheduled reminders → Push helpers: uses push helpers
- Push helpers → Firebase services: sends push
- Express app → Scheduled reminders: registers scheduler
- Authentication → Prisma client: reads and writes
- Lessons → Prisma client: reads and writes
- Stats and refill → Prisma client: reads and writes
- Daily practice → Prisma client: reads and writes
- Shop and IAP → Prisma client: reads and writes
- Prisma client → Application data: uses models
- Prisma client → MySQL: persists data
