# varelamateo/agropeso architecture

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

- Interactive diagram: https://gitdiagram.com/varelamateo/agropeso
- Repository: https://github.com/varelamateo/agropeso

## Overview

AgroPeso is a weighing-ticket and supplier-management application. Its principal workflow is a client submitting a weighing ticket to the FastAPI API, which routes the request through ticket rules and persistence; tickets can be listed, retrieved, and closed by recording gross weight. Supplier listing and creation form a separate branch. The frontend and product model are included as documented/source-index capabilities, but their runtime connections are not fully evidenced in the excerpts; those links are therefore omitted or marked unverified.

Main entry points: [`backend/config/database.py`](https://github.com/varelamateo/agropeso/blob/main/backend/config/database.py) (DB sessions), [`backend/routers/ticket_router.py`](https://github.com/varelamateo/agropeso/blob/main/backend/routers/ticket_router.py) (Ticket routes), [`backend/routers/supplier_router.py`](https://github.com/varelamateo/agropeso/blob/main/backend/routers/supplier_router.py) (Supplier routes), [`backend/models/ticket_model.py`](https://github.com/varelamateo/agropeso/blob/main/backend/models/ticket_model.py) (Ticket model)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Client"]
  node_frontend["Web interface<br/>[app.js]"]
end

subgraph group_api["API"]
  node_fastapi["FastAPI app<br/>[main.py]"]
  node_ticket_routes["Ticket routes<br/>[ticket_router.py]"]
  node_supplier_routes["Supplier routes<br/>[supplier_router.py]"]
  node_ticket_schemas["Ticket schemas<br/>[ticket_schema.py]"]
  node_supplier_schemas["Supplier schemas<br/>[supplier_schema.py]"]
end

subgraph group_domain["Domain Services"]
  node_ticket_service["Ticket rules<br/>[ticket_service.py]"]
  node_supplier_service["Supplier service"]
  node_ticket_errors["Ticket errors<br/>[exceptions.py]"]
end

subgraph group_persistence["Persistence"]
  node_ticket_repo["Ticket repository"]
  node_supplier_repo["Supplier repository"]
  node_ticket_model["Ticket model<br/>[ticket_model.py]"]
  node_supplier_model["Supplier model<br/>[suppliers.py]"]
  node_product_model["Product model<br/>[products.py]"]
  node_db_config["DB sessions<br/>[database.py]"]
end

node_user(("Operator / client"))
node_mysql[("MySQL database")]

node_user -->|"uses"| node_frontend
node_frontend -.->|"calls API"| node_fastapi
node_fastapi -->|"registers routes"| node_ticket_routes
node_fastapi -->|"registers routes"| node_supplier_routes
node_ticket_routes -->|"validates / responds"| node_ticket_schemas
node_supplier_routes -->|"validates / responds"| node_supplier_schemas
node_ticket_routes -->|"dispatches"| node_ticket_service
node_ticket_routes -->|"constructs"| node_ticket_repo
node_supplier_routes -->|"dispatches"| node_supplier_service
node_supplier_routes -->|"constructs"| node_supplier_repo
node_ticket_routes -->|"gets session"| node_db_config
node_supplier_routes -->|"gets session"| node_db_config
node_ticket_service -->|"calls"| node_ticket_repo
node_supplier_service -->|"calls"| node_supplier_repo
node_ticket_service -->|"raises"| node_ticket_errors
node_ticket_repo -->|"maps / persists"| node_ticket_model
node_supplier_repo -->|"maps / persists"| node_supplier_model
node_ticket_model -->|"uses ORM base"| node_db_config
node_supplier_model -->|"uses ORM base"| node_db_config
node_product_model -->|"uses ORM base"| node_db_config
node_ticket_model -->|"relates supplier"| node_supplier_model
node_ticket_model -->|"relates product"| node_product_model
node_db_config -->|"connects"| node_mysql

click node_frontend "https://github.com/varelamateo/agropeso/blob/main/frontend/js/app.js"
click node_fastapi "https://github.com/varelamateo/agropeso/blob/main/backend/main.py"
click node_ticket_routes "https://github.com/varelamateo/agropeso/blob/main/backend/routers/ticket_router.py"
click node_supplier_routes "https://github.com/varelamateo/agropeso/blob/main/backend/routers/supplier_router.py"
click node_ticket_schemas "https://github.com/varelamateo/agropeso/blob/main/backend/schemas/ticket_schema.py"
click node_supplier_schemas "https://github.com/varelamateo/agropeso/blob/main/backend/schemas/supplier_schema.py"
click node_ticket_service "https://github.com/varelamateo/agropeso/blob/main/backend/services/ticket_service.py"
click node_supplier_service "https://github.com/varelamateo/agropeso/blob/main/backend/services/supplier_service.py"
click node_ticket_errors "https://github.com/varelamateo/agropeso/blob/main/backend/utils/exceptions.py"
click node_ticket_repo "https://github.com/varelamateo/agropeso/blob/main/backend/repository/ticket_repository.py"
click node_supplier_repo "https://github.com/varelamateo/agropeso/blob/main/backend/repository/supplier_repository.py"
click node_ticket_model "https://github.com/varelamateo/agropeso/blob/main/backend/models/ticket_model.py"
click node_supplier_model "https://github.com/varelamateo/agropeso/blob/main/backend/models/suppliers.py"
click node_product_model "https://github.com/varelamateo/agropeso/blob/main/backend/models/products.py"
click node_db_config "https://github.com/varelamateo/agropeso/blob/main/backend/config/database.py"

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_frontend,node_user toneBlue
class node_fastapi,node_ticket_routes,node_supplier_routes,node_ticket_schemas,node_supplier_schemas,node_mysql toneAmber
class node_ticket_service,node_supplier_service,node_ticket_errors toneMint
class node_ticket_repo,node_supplier_repo,node_ticket_model,node_supplier_model,node_product_model,node_db_config toneRose
```

## Components

### Client

- [Web interface](https://github.com/varelamateo/agropeso/blob/main/frontend/js/app.js): `frontend/js/app.js`

### API

- [FastAPI app](https://github.com/varelamateo/agropeso/blob/main/backend/main.py): `backend/main.py`
- [Ticket routes](https://github.com/varelamateo/agropeso/blob/main/backend/routers/ticket_router.py): `backend/routers/ticket_router.py`
- [Supplier routes](https://github.com/varelamateo/agropeso/blob/main/backend/routers/supplier_router.py): `backend/routers/supplier_router.py`
- [Ticket schemas](https://github.com/varelamateo/agropeso/blob/main/backend/schemas/ticket_schema.py): `backend/schemas/ticket_schema.py`
- [Supplier schemas](https://github.com/varelamateo/agropeso/blob/main/backend/schemas/supplier_schema.py): `backend/schemas/supplier_schema.py`

### Domain Services

- [Ticket rules](https://github.com/varelamateo/agropeso/blob/main/backend/services/ticket_service.py): `backend/services/ticket_service.py`
- [Supplier service](https://github.com/varelamateo/agropeso/blob/main/backend/services/supplier_service.py): `backend/services/supplier_service.py`
- [Ticket errors](https://github.com/varelamateo/agropeso/blob/main/backend/utils/exceptions.py): `backend/utils/exceptions.py`

### Persistence

- [Ticket repository](https://github.com/varelamateo/agropeso/blob/main/backend/repository/ticket_repository.py): `backend/repository/ticket_repository.py`
- [Supplier repository](https://github.com/varelamateo/agropeso/blob/main/backend/repository/supplier_repository.py): `backend/repository/supplier_repository.py`
- [Ticket model](https://github.com/varelamateo/agropeso/blob/main/backend/models/ticket_model.py): `backend/models/ticket_model.py`
- [Supplier model](https://github.com/varelamateo/agropeso/blob/main/backend/models/suppliers.py): `backend/models/suppliers.py`
- [Product model](https://github.com/varelamateo/agropeso/blob/main/backend/models/products.py): `backend/models/products.py`
- [DB sessions](https://github.com/varelamateo/agropeso/blob/main/backend/config/database.py): `backend/config/database.py`

### Other components

- **Operator / client**
- **MySQL database**

## Connections

- Operator / client → Web interface: uses
- Web interface → FastAPI app: calls API
- FastAPI app → Ticket routes: registers routes (evidence: `backend/main.py`)
- FastAPI app → Supplier routes: registers routes (evidence: `backend/main.py`)
- Ticket routes → Ticket schemas: validates / responds (evidence: `backend/routers/ticket_router.py`)
- Supplier routes → Supplier schemas: validates / responds (evidence: `backend/routers/supplier_router.py`)
- Ticket routes → Ticket rules: dispatches (evidence: `backend/routers/ticket_router.py`)
- Ticket routes → Ticket repository: constructs (evidence: `backend/routers/ticket_router.py`)
- Supplier routes → Supplier service: dispatches (evidence: `backend/routers/supplier_router.py`)
- Supplier routes → Supplier repository: constructs (evidence: `backend/routers/supplier_router.py`)
- Ticket routes → DB sessions: gets session (evidence: `backend/routers/ticket_router.py`)
- Supplier routes → DB sessions: gets session (evidence: `backend/routers/supplier_router.py`)
- Ticket rules → Ticket repository: calls (evidence: `backend/services/ticket_service.py`)
- Supplier service → Supplier repository: calls (evidence: `backend/services/supplier_service.py`)
- Ticket rules → Ticket errors: raises (evidence: `backend/services/ticket_service.py`)
- Ticket repository → Ticket model: maps / persists (evidence: `backend/repository/ticket_repository.py`)
- Supplier repository → Supplier model: maps / persists (evidence: `backend/repository/supplier_repository.py`)
- Ticket model → DB sessions: uses ORM base (evidence: `backend/models/ticket_model.py`)
- Supplier model → DB sessions: uses ORM base (evidence: `backend/models/suppliers.py`)
- Product model → DB sessions: uses ORM base (evidence: `backend/models/products.py`)
- Ticket model → Supplier model: relates supplier (evidence: `backend/models/ticket_model.py`)
- Ticket model → Product model: relates product (evidence: `backend/models/ticket_model.py`)
- DB sessions → MySQL database: connects (evidence: `backend/config/database.py`)
