# juliabonetto/tesina-bonetto architecture

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

- Interactive diagram: https://gitdiagram.com/juliabonetto/tesina-bonetto
- Repository: https://github.com/juliabonetto/tesina-bonetto

## Overview

This repository combines a CodeIgniter 4 framework distribution with an Eco-Tachos application. The application workflow is routed HTTP requests into account, device, statistics, and payment controllers, which render views and—in sampled account/statistics logic—use models and session/database state. Routes document the application’s major capabilities, but most controller and model implementations were not sampled, so their internal wiring is intentionally limited. The framework nodes show the request-routing and controller layer beneath the application; the README is conflicted, so product identification relies on both the framework README text and the application tree/routes.

Main entry points: [`app/Controllers/UsuarioController.php`](https://github.com/juliabonetto/tesina-bonetto/blob/main/app/Controllers/UsuarioController.php) (Account flows), [`system/Router/Router.php`](https://github.com/juliabonetto/tesina-bonetto/blob/main/system/Router/Router.php) (Request router), [`system/Database/Database.php`](https://github.com/juliabonetto/tesina-bonetto/blob/main/system/Database/Database.php) (Database layer), [`app/Controllers/EstadisticaController.php`](https://github.com/juliabonetto/tesina-bonetto/blob/main/app/Controllers/EstadisticaController.php) (Statistics endpoints)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Eco-Tachos app"]
  node_account["Account flows"]
  node_password["Password recovery"]
  node_devices["Eco-Tacho management"]
  node_statistics["Statistics endpoints"]
  node_payments["Payment flows"]
  node_webhook["Payment webhook<br/>[Webhook.php]"]
end

subgraph group_framework["Framework runtime"]
  node_front["HTTP entry<br/>[index.php]"]
  node_routing["Route table<br/>[Routes.php]"]
  node_router["Request router<br/>[Router.php]"]
  node_controllerbase["Controller base<br/>[Controller.php]"]
  node_database["Database layer<br/>[Database.php]"]
  node_session["Session state<br/>[Session.php]"]
end

subgraph group_domain["Application data"]
  node_user_model["User model<br/>[UsuarioModel.php]"]
  node_device_model["Device model"]
  node_membership_model["Device membership"]
  node_classification_model["Classification model"]
  node_stats_model["Statistics model"]
  node_payment_model["Payment model<br/>[PagoModel.php]"]
end

subgraph group_presentation["Application views"]
  node_account_views["Account pages"]
  node_device_views["Device pages"]
  node_stats_view["Statistics page<br/>[Estadistica.php]"]
  node_payment_views["Payment pages"]
end

node_visitor(("Web visitor"))

node_visitor -->|"sends request"| node_front
node_front -->|"enters runtime"| node_router
node_routing -->|"defines routes"| node_router
node_router -->|"dispatches"| node_account
node_router -->|"dispatches"| node_password
node_router -->|"dispatches"| node_devices
node_router -->|"dispatches"| node_statistics
node_router -->|"dispatches"| node_payments
node_router -->|"dispatches"| node_webhook
node_account -->|"extends"| node_controllerbase
node_account -->|"queries"| node_user_model
node_account -->|"queries"| node_classification_model
node_account -->|"queries"| node_stats_model
node_account -->|"queries"| node_device_model
node_account -->|"queries"| node_database
node_account -->|"reads state"| node_session
node_account -->|"renders"| node_account_views
node_password -->|"renders"| node_account_views
node_devices -->|"renders"| node_device_views
node_statistics -->|"renders"| node_stats_view
node_statistics -->|"queries"| node_stats_model
node_payments -->|"renders"| node_payment_views
node_payments -->|"uses"| node_payment_model
node_webhook -->|"uses"| node_payment_model
node_user_model -->|"persists"| node_database
node_device_model -->|"persists"| node_database
node_membership_model -->|"persists"| node_database
node_classification_model -->|"persists"| node_database
node_stats_model -->|"queries"| node_database
node_payment_model -->|"persists"| node_database

click node_front "https://github.com/juliabonetto/tesina-bonetto/blob/main/public/index.php"
click node_routing "https://github.com/juliabonetto/tesina-bonetto/blob/main/app/Config/Routes.php"
click node_router "https://github.com/juliabonetto/tesina-bonetto/blob/main/system/Router/Router.php"
click node_controllerbase "https://github.com/juliabonetto/tesina-bonetto/blob/main/system/Controller.php"
click node_account "https://github.com/juliabonetto/tesina-bonetto/blob/main/app/Controllers/UsuarioController.php"
click node_password "https://github.com/juliabonetto/tesina-bonetto/blob/main/app/Controllers/Contrase%C3%B1aController.php"
click node_devices "https://github.com/juliabonetto/tesina-bonetto/blob/main/app/Controllers/TachosController.php"
click node_statistics "https://github.com/juliabonetto/tesina-bonetto/blob/main/app/Controllers/EstadisticaController.php"
click node_payments "https://github.com/juliabonetto/tesina-bonetto/blob/main/app/Controllers/PagosController.php"
click node_webhook "https://github.com/juliabonetto/tesina-bonetto/blob/main/app/Controllers/Webhook.php"
click node_user_model "https://github.com/juliabonetto/tesina-bonetto/blob/main/app/Models/UsuarioModel.php"
click node_device_model "https://github.com/juliabonetto/tesina-bonetto/blob/main/app/Models/DispositivoModel.php"
click node_membership_model "https://github.com/juliabonetto/tesina-bonetto/blob/main/app/Models/UsuarioDispositivoModel.php"
click node_classification_model "https://github.com/juliabonetto/tesina-bonetto/blob/main/app/Models/ClasificacionModel.php"
click node_stats_model "https://github.com/juliabonetto/tesina-bonetto/blob/main/app/Models/EstadisticaModel.php"
click node_payment_model "https://github.com/juliabonetto/tesina-bonetto/blob/main/app/Models/PagoModel.php"
click node_database "https://github.com/juliabonetto/tesina-bonetto/blob/main/system/Database/Database.php"
click node_session "https://github.com/juliabonetto/tesina-bonetto/blob/main/system/Session/Session.php"
click node_account_views "https://github.com/juliabonetto/tesina-bonetto/tree/main/app/Views"
click node_device_views "https://github.com/juliabonetto/tesina-bonetto/tree/main/app/Views/tachos"
click node_stats_view "https://github.com/juliabonetto/tesina-bonetto/blob/main/app/Views/Estadistica.php"
click node_payment_views "https://github.com/juliabonetto/tesina-bonetto/tree/main/app/Views/pagos"

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_account,node_password,node_devices,node_statistics,node_payments,node_webhook toneBlue
class node_front,node_routing,node_router,node_controllerbase,node_database,node_session toneAmber
class node_user_model,node_device_model,node_membership_model,node_classification_model,node_stats_model,node_payment_model toneMint
class node_account_views,node_device_views,node_stats_view,node_payment_views toneRose
class node_visitor toneIndigo
```

## Components

### Eco-Tachos app

- [Account flows](https://github.com/juliabonetto/tesina-bonetto/blob/main/app/Controllers/UsuarioController.php): `app/Controllers/UsuarioController.php`
- [Password recovery](https://github.com/juliabonetto/tesina-bonetto/blob/main/app/Controllers/Contrase%C3%B1aController.php): `app/Controllers/ContraseñaController.php`
- [Eco-Tacho management](https://github.com/juliabonetto/tesina-bonetto/blob/main/app/Controllers/TachosController.php): `app/Controllers/TachosController.php`
- [Statistics endpoints](https://github.com/juliabonetto/tesina-bonetto/blob/main/app/Controllers/EstadisticaController.php): `app/Controllers/EstadisticaController.php`
- [Payment flows](https://github.com/juliabonetto/tesina-bonetto/blob/main/app/Controllers/PagosController.php): `app/Controllers/PagosController.php`
- [Payment webhook](https://github.com/juliabonetto/tesina-bonetto/blob/main/app/Controllers/Webhook.php): `app/Controllers/Webhook.php`

### Framework runtime

- [HTTP entry](https://github.com/juliabonetto/tesina-bonetto/blob/main/public/index.php): `public/index.php`
- [Route table](https://github.com/juliabonetto/tesina-bonetto/blob/main/app/Config/Routes.php): `app/Config/Routes.php`
- [Request router](https://github.com/juliabonetto/tesina-bonetto/blob/main/system/Router/Router.php): `system/Router/Router.php`
- [Controller base](https://github.com/juliabonetto/tesina-bonetto/blob/main/system/Controller.php): `system/Controller.php`
- [Database layer](https://github.com/juliabonetto/tesina-bonetto/blob/main/system/Database/Database.php): `system/Database/Database.php`
- [Session state](https://github.com/juliabonetto/tesina-bonetto/blob/main/system/Session/Session.php): `system/Session/Session.php`

### Application data

- [User model](https://github.com/juliabonetto/tesina-bonetto/blob/main/app/Models/UsuarioModel.php): `app/Models/UsuarioModel.php`
- [Device model](https://github.com/juliabonetto/tesina-bonetto/blob/main/app/Models/DispositivoModel.php): `app/Models/DispositivoModel.php`
- [Device membership](https://github.com/juliabonetto/tesina-bonetto/blob/main/app/Models/UsuarioDispositivoModel.php): `app/Models/UsuarioDispositivoModel.php`
- [Classification model](https://github.com/juliabonetto/tesina-bonetto/blob/main/app/Models/ClasificacionModel.php): `app/Models/ClasificacionModel.php`
- [Statistics model](https://github.com/juliabonetto/tesina-bonetto/blob/main/app/Models/EstadisticaModel.php): `app/Models/EstadisticaModel.php`
- [Payment model](https://github.com/juliabonetto/tesina-bonetto/blob/main/app/Models/PagoModel.php): `app/Models/PagoModel.php`

### Application views

- [Account pages](https://github.com/juliabonetto/tesina-bonetto/tree/main/app/Views): `app/Views`
- [Device pages](https://github.com/juliabonetto/tesina-bonetto/tree/main/app/Views/tachos): `app/Views/tachos`
- [Statistics page](https://github.com/juliabonetto/tesina-bonetto/blob/main/app/Views/Estadistica.php): `app/Views/Estadistica.php`
- [Payment pages](https://github.com/juliabonetto/tesina-bonetto/tree/main/app/Views/pagos): `app/Views/pagos`

### Other components

- **Web visitor**

## Connections

- Web visitor → HTTP entry: sends request
- HTTP entry → Request router: enters runtime
- Route table → Request router: defines routes
- Request router → Account flows: dispatches
- Request router → Password recovery: dispatches
- Request router → Eco-Tacho management: dispatches
- Request router → Statistics endpoints: dispatches
- Request router → Payment flows: dispatches
- Request router → Payment webhook: dispatches
- Account flows → Controller base: extends
- Account flows → User model: queries
- Account flows → Classification model: queries
- Account flows → Statistics model: queries
- Account flows → Device model: queries
- Account flows → Database layer: queries
- Account flows → Session state: reads state
- Account flows → Account pages: renders
- Password recovery → Account pages: renders
- Eco-Tacho management → Device pages: renders
- Statistics endpoints → Statistics page: renders
- Statistics endpoints → Statistics model: queries
- Payment flows → Payment pages: renders
- Payment flows → Payment model: uses
- Payment webhook → Payment model: uses
- User model → Database layer: persists
- Device model → Database layer: persists
- Device membership → Database layer: persists
- Classification model → Database layer: persists
- Statistics model → Database layer: queries
- Payment model → Database layer: persists
