# ryuk132/projeto_passe architecture

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

- Interactive diagram: https://gitdiagram.com/ryuk132/projeto_passe
- Repository: https://github.com/ryuk132/projeto_passe

## Overview

Passe Urbano is an Express web application for creating and managing transit passes. A user enters through the web app, submits pass details through the central router, and receives rendered pages with operation results. Its main capabilities are pass creation, category listing, reloads, usage and validity checks, and usage reports. The router and database excerpts show these calls; the README is only a title, and the excerpts do not show how the database module is attached to `global.db`.

Main entry points: [`routes/index.js`](https://github.com/ryuk132/projeto_passe/blob/main/routes/index.js) (Request handlers), [`app.js`](https://github.com/ryuk132/projeto_passe/blob/main/app.js) (Express app), [`db.js`](https://github.com/ryuk132/projeto_passe/blob/main/db.js) (Create pass), [`views/index.ejs`](https://github.com/ryuk132/projeto_passe/blob/main/views/index.ejs) (Home page)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web interface"]
  node_server["Express app<br/>[app.js]"]
  node_router["Request handlers<br/>[index.js]"]
  node_home["Home page<br/>[index.ejs]"]
  node_create_form["Creation page<br/>[criacao.ejs]"]
  node_category_page["Category list<br/>[categ.ejs]"]
  node_reload_form["Reload form<br/>[recarga.ejs]"]
  node_reload_result["Reload result"]
  node_use_form["Usage form<br/>[uso.ejs]"]
  node_use_result["Usage result<br/>[fazUso.ejs]"]
  node_report_form["Report form<br/>[relat.ejs]"]
  node_report_result["Usage report<br/>[relatUso.ejs]"]
end

subgraph group_operations["Pass operations"]
  node_create_pass["Create pass<br/>[db.js]"]
  node_list_categories["List categories<br/>[db.js]"]
  node_reload_pass["Reload pass<br/>[db.js]"]
  node_record_use["Record and validate use<br/>[db.js]"]
  node_fetch_report["Fetch usage history<br/>[db.js]"]
end

subgraph group_persistence["Persistence"]
  node_mysql[("MySQL database")]
end

node_rider(("Pass user"))

node_rider -->|"sends requests"| node_server
node_server -->|"routes requests"| node_router
node_router -->|"creates pass"| node_create_pass
node_router -->|"lists categories"| node_list_categories
node_router -->|"records reload"| node_reload_pass
node_router -->|"records use"| node_record_use
node_router -->|"fetches history"| node_fetch_report
node_router -->|"renders"| node_home
node_router -->|"renders"| node_create_form
node_router -->|"renders"| node_category_page
node_router -->|"renders"| node_reload_form
node_router -->|"renders result"| node_reload_result
node_router -->|"renders"| node_use_form
node_router -->|"renders result"| node_use_result
node_router -->|"renders"| node_report_form
node_router -->|"renders report"| node_report_result
node_create_pass -->|"queries"| node_mysql
node_list_categories -->|"queries"| node_mysql
node_reload_pass -->|"queries"| node_mysql
node_record_use -->|"queries"| node_mysql
node_fetch_report -->|"queries"| node_mysql

click node_server "https://github.com/ryuk132/projeto_passe/blob/main/app.js"
click node_router "https://github.com/ryuk132/projeto_passe/blob/main/routes/index.js"
click node_home "https://github.com/ryuk132/projeto_passe/blob/main/views/index.ejs"
click node_create_form "https://github.com/ryuk132/projeto_passe/blob/main/views/criacao.ejs"
click node_category_page "https://github.com/ryuk132/projeto_passe/blob/main/views/categ.ejs"
click node_reload_form "https://github.com/ryuk132/projeto_passe/blob/main/views/recarga.ejs"
click node_reload_result "https://github.com/ryuk132/projeto_passe/blob/main/views/registraRecarga.ejs"
click node_use_form "https://github.com/ryuk132/projeto_passe/blob/main/views/uso.ejs"
click node_use_result "https://github.com/ryuk132/projeto_passe/blob/main/views/fazUso.ejs"
click node_report_form "https://github.com/ryuk132/projeto_passe/blob/main/views/relat.ejs"
click node_report_result "https://github.com/ryuk132/projeto_passe/blob/main/views/relatUso.ejs"
click node_create_pass "https://github.com/ryuk132/projeto_passe/blob/main/db.js"
click node_list_categories "https://github.com/ryuk132/projeto_passe/blob/main/db.js"
click node_reload_pass "https://github.com/ryuk132/projeto_passe/blob/main/db.js"
click node_record_use "https://github.com/ryuk132/projeto_passe/blob/main/db.js"
click node_fetch_report "https://github.com/ryuk132/projeto_passe/blob/main/db.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_server,node_router,node_home,node_create_form,node_category_page,node_reload_form,node_reload_result,node_use_form,node_use_result,node_report_form,node_report_result,node_rider toneBlue
class node_create_pass,node_list_categories,node_reload_pass,node_record_use,node_fetch_report toneAmber
class node_mysql toneMint
```

## Components

### Web interface

- [Express app](https://github.com/ryuk132/projeto_passe/blob/main/app.js): `app.js`
- [Request handlers](https://github.com/ryuk132/projeto_passe/blob/main/routes/index.js): `routes/index.js`
- [Home page](https://github.com/ryuk132/projeto_passe/blob/main/views/index.ejs): `views/index.ejs`
- [Creation page](https://github.com/ryuk132/projeto_passe/blob/main/views/criacao.ejs): `views/criacao.ejs`
- [Category list](https://github.com/ryuk132/projeto_passe/blob/main/views/categ.ejs): `views/categ.ejs`
- [Reload form](https://github.com/ryuk132/projeto_passe/blob/main/views/recarga.ejs): `views/recarga.ejs`
- [Reload result](https://github.com/ryuk132/projeto_passe/blob/main/views/registraRecarga.ejs): `views/registraRecarga.ejs`
- [Usage form](https://github.com/ryuk132/projeto_passe/blob/main/views/uso.ejs): `views/uso.ejs`
- [Usage result](https://github.com/ryuk132/projeto_passe/blob/main/views/fazUso.ejs): `views/fazUso.ejs`
- [Report form](https://github.com/ryuk132/projeto_passe/blob/main/views/relat.ejs): `views/relat.ejs`
- [Usage report](https://github.com/ryuk132/projeto_passe/blob/main/views/relatUso.ejs): `views/relatUso.ejs`

### Pass operations

- [Create pass](https://github.com/ryuk132/projeto_passe/blob/main/db.js): `db.js`
- [List categories](https://github.com/ryuk132/projeto_passe/blob/main/db.js): `db.js`
- [Reload pass](https://github.com/ryuk132/projeto_passe/blob/main/db.js): `db.js`
- [Record and validate use](https://github.com/ryuk132/projeto_passe/blob/main/db.js): `db.js`
- [Fetch usage history](https://github.com/ryuk132/projeto_passe/blob/main/db.js): `db.js`

### Persistence

- **MySQL database**

### Other components

- **Pass user**

## Connections

- Pass user → Express app: sends requests (evidence: `app.js`)
- Express app → Request handlers: routes requests (evidence: `app.js`)
- Request handlers → Create pass: creates pass (evidence: `routes/index.js`)
- Request handlers → List categories: lists categories (evidence: `routes/index.js`)
- Request handlers → Reload pass: records reload (evidence: `routes/index.js`)
- Request handlers → Record and validate use: records use (evidence: `routes/index.js`)
- Request handlers → Fetch usage history: fetches history (evidence: `routes/index.js`)
- Request handlers → Home page: renders (evidence: `routes/index.js`)
- Request handlers → Creation page: renders (evidence: `routes/index.js`)
- Request handlers → Category list: renders (evidence: `routes/index.js`)
- Request handlers → Reload form: renders (evidence: `routes/index.js`)
- Request handlers → Reload result: renders result (evidence: `routes/index.js`)
- Request handlers → Usage form: renders (evidence: `routes/index.js`)
- Request handlers → Usage result: renders result (evidence: `routes/index.js`)
- Request handlers → Report form: renders (evidence: `routes/index.js`)
- Request handlers → Usage report: renders report (evidence: `routes/index.js`)
- Create pass → MySQL database: queries (evidence: `db.js`)
- List categories → MySQL database: queries (evidence: `db.js`)
- Reload pass → MySQL database: queries (evidence: `db.js`)
- Record and validate use → MySQL database: queries (evidence: `db.js`)
- Fetch usage history → MySQL database: queries (evidence: `db.js`)
