# josuemrosario/nodefaturas architecture

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

- Interactive diagram: https://gitdiagram.com/josuemrosario/nodefaturas
- Repository: https://github.com/josuemrosario/nodefaturas

## Overview

Sistema Faturas is an Express/MVC web app for registering users, managing their clients and invoices, and viewing billing summaries. The main workflow is a signed-in user creating clients and invoices, then reviewing invoice status and totals on the dashboard. The graph includes the documented MongoDB-backed workflow and sampled authentication logic; route wiring for invoices and dashboard is represented only at the route-module level because those route sources were not sampled.

Main entry points: [`index.js`](https://github.com/josuemrosario/nodefaturas/blob/main/index.js) (Express app), [`controllers/dashboard.controller.js`](https://github.com/josuemrosario/nodefaturas/blob/main/controllers/dashboard.controller.js) (Dashboard summaries), [`controllers/fatura.controller.js`](https://github.com/josuemrosario/nodefaturas/blob/main/controllers/fatura.controller.js) (Invoice management), [`controllers/usuario.controller.js`](https://github.com/josuemrosario/nodefaturas/blob/main/controllers/usuario.controller.js) (Account logic)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web entry"]
  node_app["Express app<br/>[index.js]"]
end

subgraph group_auth["User access"]
  node_user_routes["Account routes<br/>[usuario.route.js]"]
  node_auth_controller["Account logic"]
  node_access_middleware["Access guards<br/>[middleware.js]"]
  node_session["Session state<br/>[index.js]"]
end

subgraph group_billing["Billing domain"]
  node_dashboard_routes["Dashboard routes<br/>[dashboard.route.js]"]
  node_dashboard_controller["Dashboard summaries"]
  node_client_routes["Client routes<br/>[cliente.route.js]"]
  node_client_controller["Client management"]
  node_invoice_routes["Invoice routes<br/>[fatura.route.js]"]
  node_invoice_controller["Invoice management"]
end

subgraph group_persistence["Data and views"]
  node_user_model["User model<br/>[usuario.model.js]"]
  node_client_model["Client model<br/>[cliente.model.js]"]
  node_invoice_model["Invoice model<br/>[fatura.model.js]"]
  node_db_connection["Mongo connection<br/>[dbConnect.js]"]
  node_views["EJS pages"]
  node_formatter["Real formatter<br/>[formatter.js]"]
end

node_user(("User"))
node_mongo[("MongoDB")]

node_user -->|"sends requests"| node_app
node_app -->|"mounts routes"| node_user_routes
node_app -->|"mounts routes"| node_dashboard_routes
node_app -->|"guards dashboard"| node_access_middleware
node_app -->|"configures sessions"| node_session
node_user_routes -->|"dispatches auth"| node_auth_controller
node_user_routes -->|"checks access"| node_access_middleware
node_auth_controller -->|"reads/writes users"| node_user_model
node_auth_controller -->|"sets user ID"| node_session
node_auth_controller -->|"renders pages"| node_views
node_dashboard_routes -->|"dispatches summaries"| node_dashboard_controller
node_dashboard_controller -->|"counts clients"| node_client_model
node_dashboard_controller -->|"reads invoices"| node_invoice_model
node_dashboard_controller -->|"formats totals"| node_formatter
node_dashboard_controller -->|"renders dashboard"| node_views
node_client_routes -->|"dispatches clients"| node_client_controller
node_client_controller -->|"manages clients"| node_client_model
node_client_controller -->|"deletes related invoices"| node_invoice_model
node_client_controller -->|"renders client pages"| node_views
node_invoice_routes -->|"dispatches invoices"| node_invoice_controller
node_invoice_controller -->|"manages invoices"| node_invoice_model
node_invoice_controller -->|"loads clients"| node_client_model
node_invoice_controller -->|"formats totals"| node_formatter
node_invoice_controller -->|"renders invoice pages"| node_views
node_db_connection -->|"connects to"| node_mongo

click node_app "https://github.com/josuemrosario/nodefaturas/blob/main/index.js"
click node_user_routes "https://github.com/josuemrosario/nodefaturas/blob/main/routes/usuario.route.js"
click node_auth_controller "https://github.com/josuemrosario/nodefaturas/blob/main/controllers/usuario.controller.js"
click node_access_middleware "https://github.com/josuemrosario/nodefaturas/blob/main/libs/middleware.js"
click node_session "https://github.com/josuemrosario/nodefaturas/blob/main/index.js"
click node_dashboard_routes "https://github.com/josuemrosario/nodefaturas/blob/main/routes/dashboard.route.js"
click node_dashboard_controller "https://github.com/josuemrosario/nodefaturas/blob/main/controllers/dashboard.controller.js"
click node_client_routes "https://github.com/josuemrosario/nodefaturas/blob/main/routes/cliente.route.js"
click node_client_controller "https://github.com/josuemrosario/nodefaturas/blob/main/controllers/cliente.controller.js"
click node_invoice_routes "https://github.com/josuemrosario/nodefaturas/blob/main/routes/fatura.route.js"
click node_invoice_controller "https://github.com/josuemrosario/nodefaturas/blob/main/controllers/fatura.controller.js"
click node_user_model "https://github.com/josuemrosario/nodefaturas/blob/main/models/usuario.model.js"
click node_client_model "https://github.com/josuemrosario/nodefaturas/blob/main/models/cliente.model.js"
click node_invoice_model "https://github.com/josuemrosario/nodefaturas/blob/main/models/fatura.model.js"
click node_db_connection "https://github.com/josuemrosario/nodefaturas/blob/main/libs/dbConnect.js"
click node_views "https://github.com/josuemrosario/nodefaturas/tree/main/views"
click node_formatter "https://github.com/josuemrosario/nodefaturas/blob/main/libs/formatter.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_app,node_user toneBlue
class node_user_routes,node_auth_controller,node_access_middleware,node_session,node_mongo toneAmber
class node_dashboard_routes,node_dashboard_controller,node_client_routes,node_client_controller,node_invoice_routes,node_invoice_controller toneMint
class node_user_model,node_client_model,node_invoice_model,node_db_connection,node_views,node_formatter toneRose
```

## Components

### Web entry

- [Express app](https://github.com/josuemrosario/nodefaturas/blob/main/index.js): `index.js`

### User access

- [Account routes](https://github.com/josuemrosario/nodefaturas/blob/main/routes/usuario.route.js): `routes/usuario.route.js`
- [Account logic](https://github.com/josuemrosario/nodefaturas/blob/main/controllers/usuario.controller.js): `controllers/usuario.controller.js`
- [Access guards](https://github.com/josuemrosario/nodefaturas/blob/main/libs/middleware.js): `libs/middleware.js`
- [Session state](https://github.com/josuemrosario/nodefaturas/blob/main/index.js): `index.js`

### Billing domain

- [Dashboard routes](https://github.com/josuemrosario/nodefaturas/blob/main/routes/dashboard.route.js): `routes/dashboard.route.js`
- [Dashboard summaries](https://github.com/josuemrosario/nodefaturas/blob/main/controllers/dashboard.controller.js): `controllers/dashboard.controller.js`
- [Client routes](https://github.com/josuemrosario/nodefaturas/blob/main/routes/cliente.route.js): `routes/cliente.route.js`
- [Client management](https://github.com/josuemrosario/nodefaturas/blob/main/controllers/cliente.controller.js): `controllers/cliente.controller.js`
- [Invoice routes](https://github.com/josuemrosario/nodefaturas/blob/main/routes/fatura.route.js): `routes/fatura.route.js`
- [Invoice management](https://github.com/josuemrosario/nodefaturas/blob/main/controllers/fatura.controller.js): `controllers/fatura.controller.js`

### Data and views

- [User model](https://github.com/josuemrosario/nodefaturas/blob/main/models/usuario.model.js): `models/usuario.model.js`
- [Client model](https://github.com/josuemrosario/nodefaturas/blob/main/models/cliente.model.js): `models/cliente.model.js`
- [Invoice model](https://github.com/josuemrosario/nodefaturas/blob/main/models/fatura.model.js): `models/fatura.model.js`
- [Mongo connection](https://github.com/josuemrosario/nodefaturas/blob/main/libs/dbConnect.js): `libs/dbConnect.js`
- [EJS pages](https://github.com/josuemrosario/nodefaturas/tree/main/views): `views`
- [Real formatter](https://github.com/josuemrosario/nodefaturas/blob/main/libs/formatter.js): `libs/formatter.js`

### Other components

- **User**
- **MongoDB**

## Connections

- User → Express app: sends requests
- Express app → Account routes: mounts routes
- Express app → Dashboard routes: mounts routes
- Express app → Access guards: guards dashboard
- Express app → Session state: configures sessions
- Account routes → Account logic: dispatches auth
- Account routes → Access guards: checks access
- Account logic → User model: reads/writes users
- Account logic → Session state: sets user ID
- Account logic → EJS pages: renders pages
- Dashboard routes → Dashboard summaries: dispatches summaries
- Dashboard summaries → Client model: counts clients
- Dashboard summaries → Invoice model: reads invoices
- Dashboard summaries → Real formatter: formats totals
- Dashboard summaries → EJS pages: renders dashboard
- Client routes → Client management: dispatches clients
- Client management → Client model: manages clients
- Client management → Invoice model: deletes related invoices
- Client management → EJS pages: renders client pages
- Invoice routes → Invoice management: dispatches invoices
- Invoice management → Invoice model: manages invoices
- Invoice management → Client model: loads clients
- Invoice management → Real formatter: formats totals
- Invoice management → EJS pages: renders invoice pages
- Mongo connection → MongoDB: connects to
