# frankkib/alx-backend-javascript architecture

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

- Interactive diagram: https://gitdiagram.com/frankkib/alx-backend-javascript
- Repository: https://github.com/frankkib/alx-backend-javascript

## Overview

This repository is a set of independent programming exercises, not one deployed application. Its examples demonstrate JavaScript language features, asynchronous work, data manipulation, and student-data HTTP servers. The clearest user-to-result workflow is an HTTP request routed to a controller, which reads and summarizes CSV data before responding. Other exercises are standalone demonstrations; the graph preserves the documented modules without implying they form a single pipeline. Connections are limited to excerpted calls and imports; unsampled exercise behavior is summarized only at its directory path.

Main entry points: [`0x05-Node_JS_basic/full_server/routes/index.js`](https://github.com/frankkib/alx-backend-javascript/blob/master/0x05-Node_JS_basic/full_server/routes/index.js) (Student routes), [`0x05-Node_JS_basic/3-read_file_async.js`](https://github.com/frankkib/alx-backend-javascript/blob/master/0x05-Node_JS_basic/3-read_file_async.js) (CSV student reader), [`0x05-Node_JS_basic/full_server/utils.js`](https://github.com/frankkib/alx-backend-javascript/blob/master/0x05-Node_JS_basic/full_server/utils.js) (Database reader), [`0x05-Node_JS_basic/full_server/controllers/StudentsController.js`](https://github.com/frankkib/alx-backend-javascript/blob/master/0x05-Node_JS_basic/full_server/controllers/StudentsController.js) (Student handlers)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_language["Language Exercises"]
  node_es6["ES6 fundamentals"]
  node_budget["Budget object"]
  node_fullbudget["Full budget<br/>[9-getFullBudget.js]"]
  node_pythonadd["Python addition<br/>[0-add.py]"]
  node_classes["Class exercises"]
  node_typescript["TypeScript tasks"]
end

subgraph group_async["Async Exercises"]
  node_promises["Promise exercises"]
end

subgraph group_data["Data Exercises"]
  node_datamanip["Data manipulation"]
  node_csvreader["CSV student reader"]
  node_dbreader["Database reader<br/>[utils.js]"]
end

subgraph group_servers["Student Servers"]
  node_httpserver["HTTP student server<br/>[5-http.js]"]
  node_expressserver["Express student server<br/>[7-http_express.js]"]
  node_fullserver["Full Express server<br/>[server.js]"]
  node_routes["Student routes<br/>[index.js]"]
  node_homepage["Homepage handler<br/>[AppController.js]"]
  node_students["Student handlers"]
  node_unitapi["API exercise examples"]
end

node_filesystem[("CSV file")]

node_fullbudget -->|"calls"| node_budget
node_httpserver -->|"calls"| node_csvreader
node_expressserver -->|"calls"| node_csvreader
node_csvreader -->|"reads CSV"| node_filesystem
node_fullserver -->|"mounts"| node_routes
node_routes -->|"routes requests"| node_homepage
node_routes -->|"routes requests"| node_students
node_students -->|"calls"| node_dbreader
node_dbreader -->|"reads CSV"| node_filesystem

click node_es6 "https://github.com/frankkib/alx-backend-javascript/tree/master/0x00-ES6_basic"
click node_budget "https://github.com/frankkib/alx-backend-javascript/blob/master/0x00-ES6_basic/7-getBudgetObject.js"
click node_fullbudget "https://github.com/frankkib/alx-backend-javascript/blob/master/0x00-ES6_basic/9-getFullBudget.js"
click node_pythonadd "https://github.com/frankkib/alx-backend-javascript/blob/master/0x00-python_variable_annotations/0-add.py"
click node_promises "https://github.com/frankkib/alx-backend-javascript/tree/master/0x01-ES6_promise"
click node_classes "https://github.com/frankkib/alx-backend-javascript/tree/master/0x02-ES6_classes"
click node_typescript "https://github.com/frankkib/alx-backend-javascript/tree/master/0x04-TypeScript"
click node_datamanip "https://github.com/frankkib/alx-backend-javascript/tree/master/0x03-ES6_data_manipulation"
click node_csvreader "https://github.com/frankkib/alx-backend-javascript/blob/master/0x05-Node_JS_basic/3-read_file_async.js"
click node_httpserver "https://github.com/frankkib/alx-backend-javascript/blob/master/0x05-Node_JS_basic/5-http.js"
click node_expressserver "https://github.com/frankkib/alx-backend-javascript/blob/master/0x05-Node_JS_basic/7-http_express.js"
click node_fullserver "https://github.com/frankkib/alx-backend-javascript/blob/master/0x05-Node_JS_basic/full_server/server.js"
click node_routes "https://github.com/frankkib/alx-backend-javascript/blob/master/0x05-Node_JS_basic/full_server/routes/index.js"
click node_homepage "https://github.com/frankkib/alx-backend-javascript/blob/master/0x05-Node_JS_basic/full_server/controllers/AppController.js"
click node_students "https://github.com/frankkib/alx-backend-javascript/blob/master/0x05-Node_JS_basic/full_server/controllers/StudentsController.js"
click node_dbreader "https://github.com/frankkib/alx-backend-javascript/blob/master/0x05-Node_JS_basic/full_server/utils.js"
click node_unitapi "https://github.com/frankkib/alx-backend-javascript/tree/master/0x06-unittests_in_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_es6,node_budget,node_fullbudget,node_pythonadd,node_classes,node_typescript toneBlue
class node_promises,node_filesystem toneAmber
class node_datamanip,node_csvreader,node_dbreader toneMint
class node_httpserver,node_expressserver,node_fullserver,node_routes,node_homepage,node_students,node_unitapi toneRose
```

## Components

### Language Exercises

- [ES6 fundamentals](https://github.com/frankkib/alx-backend-javascript/tree/master/0x00-ES6_basic): `0x00-ES6_basic`
- [Budget object](https://github.com/frankkib/alx-backend-javascript/blob/master/0x00-ES6_basic/7-getBudgetObject.js): `0x00-ES6_basic/7-getBudgetObject.js`
- [Full budget](https://github.com/frankkib/alx-backend-javascript/blob/master/0x00-ES6_basic/9-getFullBudget.js): `0x00-ES6_basic/9-getFullBudget.js`
- [Python addition](https://github.com/frankkib/alx-backend-javascript/blob/master/0x00-python_variable_annotations/0-add.py): `0x00-python_variable_annotations/0-add.py`
- [Class exercises](https://github.com/frankkib/alx-backend-javascript/tree/master/0x02-ES6_classes): `0x02-ES6_classes`
- [TypeScript tasks](https://github.com/frankkib/alx-backend-javascript/tree/master/0x04-TypeScript): `0x04-TypeScript`

### Async Exercises

- [Promise exercises](https://github.com/frankkib/alx-backend-javascript/tree/master/0x01-ES6_promise): `0x01-ES6_promise`

### Data Exercises

- [Data manipulation](https://github.com/frankkib/alx-backend-javascript/tree/master/0x03-ES6_data_manipulation): `0x03-ES6_data_manipulation`
- [CSV student reader](https://github.com/frankkib/alx-backend-javascript/blob/master/0x05-Node_JS_basic/3-read_file_async.js): `0x05-Node_JS_basic/3-read_file_async.js`
- [Database reader](https://github.com/frankkib/alx-backend-javascript/blob/master/0x05-Node_JS_basic/full_server/utils.js): `0x05-Node_JS_basic/full_server/utils.js`

### Student Servers

- [HTTP student server](https://github.com/frankkib/alx-backend-javascript/blob/master/0x05-Node_JS_basic/5-http.js): `0x05-Node_JS_basic/5-http.js`
- [Express student server](https://github.com/frankkib/alx-backend-javascript/blob/master/0x05-Node_JS_basic/7-http_express.js): `0x05-Node_JS_basic/7-http_express.js`
- [Full Express server](https://github.com/frankkib/alx-backend-javascript/blob/master/0x05-Node_JS_basic/full_server/server.js): `0x05-Node_JS_basic/full_server/server.js`
- [Student routes](https://github.com/frankkib/alx-backend-javascript/blob/master/0x05-Node_JS_basic/full_server/routes/index.js): `0x05-Node_JS_basic/full_server/routes/index.js`
- [Homepage handler](https://github.com/frankkib/alx-backend-javascript/blob/master/0x05-Node_JS_basic/full_server/controllers/AppController.js): `0x05-Node_JS_basic/full_server/controllers/AppController.js`
- [Student handlers](https://github.com/frankkib/alx-backend-javascript/blob/master/0x05-Node_JS_basic/full_server/controllers/StudentsController.js): `0x05-Node_JS_basic/full_server/controllers/StudentsController.js`
- [API exercise examples](https://github.com/frankkib/alx-backend-javascript/tree/master/0x06-unittests_in_js): `0x06-unittests_in_js`

### Other components

- **CSV file**

## Connections

- Full budget → Budget object: calls (evidence: `0x00-ES6_basic/9-getFullBudget.js`)
- HTTP student server → CSV student reader: calls (evidence: `0x05-Node_JS_basic/5-http.js`)
- Express student server → CSV student reader: calls (evidence: `0x05-Node_JS_basic/7-http_express.js`)
- CSV student reader → CSV file: reads CSV (evidence: `0x05-Node_JS_basic/3-read_file_async.js`)
- Full Express server → Student routes: mounts (evidence: `0x05-Node_JS_basic/full_server/server.js`)
- Student routes → Homepage handler: routes requests (evidence: `0x05-Node_JS_basic/full_server/routes/index.js`)
- Student routes → Student handlers: routes requests (evidence: `0x05-Node_JS_basic/full_server/routes/index.js`)
- Student handlers → Database reader: calls (evidence: `0x05-Node_JS_basic/full_server/controllers/StudentsController.js`)
- Database reader → CSV file: reads CSV (evidence: `0x05-Node_JS_basic/full_server/utils.js`)
