# truongvanthong/language-learning-be architecture

> Architecture diagram of the GitHub repository truongvanthong/language-learning-be, 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/truongvanthong/language-learning-be
- Repository: https://github.com/truongvanthong/language-learning-be

## Overview

This is a Korean–Vietnamese vocabulary web app: users add vocabulary manually or import an Excel file, select topics and prompt direction, then practice a weighted quiz; incorrect answers update vocabulary state. The server exposes vocabulary, topic, import, quiz-tracking, and admin CRUD APIs backed by MongoDB. The tree identifies the admin capability only through server routes; its client implementation is not shown. Server excerpts are partial, so uncertain route-to-UI wiring and static-serving details are omitted.

Main entry points: [`server.js`](https://github.com/truongvanthong/language-learning-be/blob/main/server.js) (Express server), [`public/quiz.js`](https://github.com/truongvanthong/language-learning-be/blob/main/public/quiz.js) (Quiz session), [`public/app.js`](https://github.com/truongvanthong/language-learning-be/blob/main/public/app.js) (Setup and entry)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Vocabulary client"]
  node_home["Setup and entry<br/>[app.js]"]
  node_quiz["Quiz session<br/>[quiz.js]"]
end

subgraph group_api["Application API"]
  node_server["Express server<br/>[server.js]"]
  node_topics["Topic queries<br/>[server.js]"]
  node_vocab["Vocabulary API<br/>[server.js]"]
  node_admin["Admin item API<br/>[server.js]"]
  node_import["Excel import<br/>[server.js]"]
  node_wrong["Wrong-answer tracking<br/>[server.js]"]
end

subgraph group_storage["Vocabulary storage"]
  node_items[("Vocabulary collection")]
  node_mongodb["MongoDB connection<br/>[server.js]"]
end

node_learner(("Learner"))

node_learner -->|"sets vocabulary"| node_home
node_home -->|"requests topics and items"| node_server
node_home -->|"starts session"| node_quiz
node_learner -->|"answers prompts"| node_quiz
node_quiz -->|"loads items; reports errors"| node_server
node_server -->|"dispatches"| node_topics
node_server -->|"dispatches"| node_vocab
node_server -->|"dispatches"| node_admin
node_server -->|"dispatches"| node_import
node_server -->|"dispatches"| node_wrong
node_topics -->|"reads topics"| node_items
node_vocab -->|"reads and inserts"| node_items
node_admin -->|"reads and edits"| node_items
node_import -->|"inserts rows"| node_items
node_wrong -->|"updates counts"| node_items
node_mongodb -->|"connects collection"| node_items
node_quiz -->|"increments on incorrect answer"| node_wrong

click node_home "https://github.com/truongvanthong/language-learning-be/blob/main/public/app.js"
click node_quiz "https://github.com/truongvanthong/language-learning-be/blob/main/public/quiz.js"
click node_server "https://github.com/truongvanthong/language-learning-be/blob/main/server.js"
click node_topics "https://github.com/truongvanthong/language-learning-be/blob/main/server.js"
click node_vocab "https://github.com/truongvanthong/language-learning-be/blob/main/server.js"
click node_admin "https://github.com/truongvanthong/language-learning-be/blob/main/server.js"
click node_import "https://github.com/truongvanthong/language-learning-be/blob/main/server.js"
click node_wrong "https://github.com/truongvanthong/language-learning-be/blob/main/server.js"
click node_mongodb "https://github.com/truongvanthong/language-learning-be/blob/main/server.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_home,node_quiz toneBlue
class node_server,node_topics,node_vocab,node_admin,node_import,node_wrong toneAmber
class node_items,node_mongodb toneMint
class node_learner toneIndigo
```

## Components

### Vocabulary client

- [Setup and entry](https://github.com/truongvanthong/language-learning-be/blob/main/public/app.js): `public/app.js`
- [Quiz session](https://github.com/truongvanthong/language-learning-be/blob/main/public/quiz.js): `public/quiz.js`

### Application API

- [Express server](https://github.com/truongvanthong/language-learning-be/blob/main/server.js): `server.js`
- [Topic queries](https://github.com/truongvanthong/language-learning-be/blob/main/server.js): `server.js`
- [Vocabulary API](https://github.com/truongvanthong/language-learning-be/blob/main/server.js): `server.js`
- [Admin item API](https://github.com/truongvanthong/language-learning-be/blob/main/server.js): `server.js`
- [Excel import](https://github.com/truongvanthong/language-learning-be/blob/main/server.js): `server.js`
- [Wrong-answer tracking](https://github.com/truongvanthong/language-learning-be/blob/main/server.js): `server.js`

### Vocabulary storage

- **Vocabulary collection**
- [MongoDB connection](https://github.com/truongvanthong/language-learning-be/blob/main/server.js): `server.js`

### Other components

- **Learner**

## Connections

- Learner → Setup and entry: sets vocabulary
- Setup and entry → Express server: requests topics and items
- Setup and entry → Quiz session: starts session
- Learner → Quiz session: answers prompts
- Quiz session → Express server: loads items; reports errors
- Express server → Topic queries: dispatches
- Express server → Vocabulary API: dispatches
- Express server → Admin item API: dispatches
- Express server → Excel import: dispatches
- Express server → Wrong-answer tracking: dispatches
- Topic queries → Vocabulary collection: reads topics
- Vocabulary API → Vocabulary collection: reads and inserts
- Admin item API → Vocabulary collection: reads and edits
- Excel import → Vocabulary collection: inserts rows
- Wrong-answer tracking → Vocabulary collection: updates counts
- MongoDB connection → Vocabulary collection: connects collection
- Quiz session → Wrong-answer tracking: increments on incorrect answer
