# diegolyra/projeto-p3 architecture

> Architecture diagram of the GitHub repository diegolyra/projeto-p3, 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/diegolyra/projeto-p3
- Repository: https://github.com/diegolyra/projeto-p3

## Overview

Projeto-P3 is a command-line rental-shop system. Staff and customers enter through role-specific menus; the login menu starts the interaction, and the facade mediates operations such as catalog queries, rental history, and fines. The rental stage checks customer eligibility and item availability, creates a contract, and updates item and customer state; returns close contracts, while fines track late returns and payment. CSV repositories provide persistence. Some menus and business classes were not sampled, so their internal calls are not expanded beyond wiring supported by Main and the available excerpts.

Main entry points: [`src/main/java/com/loja/Main.java`](https://github.com/diegolyra/projeto-p3/blob/main/src/main/java/com/loja/Main.java) (Application startup), [`src/main/java/com/loja/padrao/facade/LojaFacade.java`](https://github.com/diegolyra/projeto-p3/blob/main/src/main/java/com/loja/padrao/facade/LojaFacade.java) (Shop facade), [`src/main/java/com/loja/business/ContratoBusiness.java`](https://github.com/diegolyra/projeto-p3/blob/main/src/main/java/com/loja/business/ContratoBusiness.java) (Contract service), [`src/main/java/com/loja/business/MultaBusiness.java`](https://github.com/diegolyra/projeto-p3/blob/main/src/main/java/com/loja/business/MultaBusiness.java) (Fine service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["User interface"]
  node_main["Application startup<br/>[Main.java]"]
  node_login["Login menu<br/>[MenuLogin.java]"]
  node_admin["Admin menu<br/>[MenuAdmin.java]"]
  node_staff["Staff menu"]
  node_customer["Customer menu<br/>[MenuCliente.java]"]
end

subgraph group_application["Application services"]
  node_facade["Shop facade<br/>[LojaFacade.java]"]
  node_users["User service"]
  node_items["Item service<br/>[ItemBusiness.java]"]
  node_categories["Category service"]
  node_suppliers["Supplier service"]
end

subgraph group_rental["Rental domain"]
  node_contracts["Contract service"]
  node_fines["Fine service<br/>[MultaBusiness.java]"]
end

subgraph group_persistence["CSV persistence"]
  node_userrepo[("User CSV store")]
  node_itemrepo[("Item CSV store")]
  node_categoryrepo[("Category CSV store")]
  node_supplierrepo[("Supplier CSV store")]
  node_contractrepo[("Contract CSV store")]
  node_finerepo[("Fine CSV store")]
end

node_operator(("Shop user"))

node_operator -->|"uses"| node_login
node_main -->|"creates"| node_userrepo
node_main -->|"creates"| node_itemrepo
node_main -->|"creates"| node_categoryrepo
node_main -->|"creates"| node_supplierrepo
node_main -->|"creates"| node_contractrepo
node_main -->|"creates"| node_finerepo
node_main -->|"wires"| node_users
node_main -->|"wires"| node_items
node_main -->|"wires"| node_categories
node_main -->|"wires"| node_suppliers
node_main -->|"wires"| node_contracts
node_main -->|"wires"| node_fines
node_main -->|"creates"| node_facade
node_main -->|"starts"| node_login
node_login -->|"uses"| node_facade
node_admin -->|"uses"| node_facade
node_staff -->|"uses"| node_facade
node_customer -->|"queries"| node_facade
node_facade -->|"delegates"| node_users
node_facade -->|"delegates"| node_items
node_facade -->|"delegates"| node_categories
node_facade -->|"delegates"| node_suppliers
node_facade -->|"delegates"| node_contracts
node_facade -->|"delegates"| node_fines
node_contracts -->|"looks up"| node_users
node_contracts -->|"checks and updates"| node_items
node_contracts -->|"reads and writes"| node_contractrepo
node_fines -->|"reads and writes"| node_finerepo
node_main -->|"injects user store"| node_users
node_main -->|"injects item store"| node_items
node_main -->|"injects category store"| node_categories
node_main -->|"injects supplier store"| node_suppliers
node_main -->|"injects contract store"| node_contracts
node_main -->|"injects fine store"| node_fines

click node_main "https://github.com/diegolyra/projeto-p3/blob/main/src/main/java/com/loja/Main.java"
click node_login "https://github.com/diegolyra/projeto-p3/blob/main/src/main/java/com/loja/ui/MenuLogin.java"
click node_admin "https://github.com/diegolyra/projeto-p3/blob/main/src/main/java/com/loja/ui/MenuAdmin.java"
click node_staff "https://github.com/diegolyra/projeto-p3/blob/main/src/main/java/com/loja/ui/MenuFuncionario.java"
click node_customer "https://github.com/diegolyra/projeto-p3/blob/main/src/main/java/com/loja/ui/MenuCliente.java"
click node_facade "https://github.com/diegolyra/projeto-p3/blob/main/src/main/java/com/loja/padrao/facade/LojaFacade.java"
click node_users "https://github.com/diegolyra/projeto-p3/blob/main/src/main/java/com/loja/business/UsuarioBusiness.java"
click node_items "https://github.com/diegolyra/projeto-p3/blob/main/src/main/java/com/loja/business/ItemBusiness.java"
click node_categories "https://github.com/diegolyra/projeto-p3/blob/main/src/main/java/com/loja/business/CategoriaBusiness.java"
click node_suppliers "https://github.com/diegolyra/projeto-p3/blob/main/src/main/java/com/loja/business/FornecedorBusiness.java"
click node_contracts "https://github.com/diegolyra/projeto-p3/blob/main/src/main/java/com/loja/business/ContratoBusiness.java"
click node_fines "https://github.com/diegolyra/projeto-p3/blob/main/src/main/java/com/loja/business/MultaBusiness.java"
click node_userrepo "https://github.com/diegolyra/projeto-p3/blob/main/src/main/java/com/loja/repositories/UsuarioPersistenciaCSV.java"
click node_itemrepo "https://github.com/diegolyra/projeto-p3/blob/main/src/main/java/com/loja/repositories/ItemPersistenciaCSV.java"
click node_categoryrepo "https://github.com/diegolyra/projeto-p3/blob/main/src/main/java/com/loja/repositories/CategoriaPersistenciaCSV.java"
click node_supplierrepo "https://github.com/diegolyra/projeto-p3/blob/main/src/main/java/com/loja/repositories/FornecedorPersistenciaCSV.java"
click node_contractrepo "https://github.com/diegolyra/projeto-p3/blob/main/src/main/java/com/loja/repositories/ContratoPersistenciaCSV.java"
click node_finerepo "https://github.com/diegolyra/projeto-p3/blob/main/src/main/java/com/loja/repositories/MultaPersistenciaCSV.java"

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_main,node_login,node_admin,node_staff,node_customer,node_operator toneBlue
class node_facade,node_users,node_items,node_categories,node_suppliers toneAmber
class node_contracts,node_fines toneMint
class node_userrepo,node_itemrepo,node_categoryrepo,node_supplierrepo,node_contractrepo,node_finerepo toneRose
```

## Components

### User interface

- [Application startup](https://github.com/diegolyra/projeto-p3/blob/main/src/main/java/com/loja/Main.java): `src/main/java/com/loja/Main.java`
- [Login menu](https://github.com/diegolyra/projeto-p3/blob/main/src/main/java/com/loja/ui/MenuLogin.java): `src/main/java/com/loja/ui/MenuLogin.java`
- [Admin menu](https://github.com/diegolyra/projeto-p3/blob/main/src/main/java/com/loja/ui/MenuAdmin.java): `src/main/java/com/loja/ui/MenuAdmin.java`
- [Staff menu](https://github.com/diegolyra/projeto-p3/blob/main/src/main/java/com/loja/ui/MenuFuncionario.java): `src/main/java/com/loja/ui/MenuFuncionario.java`
- [Customer menu](https://github.com/diegolyra/projeto-p3/blob/main/src/main/java/com/loja/ui/MenuCliente.java): `src/main/java/com/loja/ui/MenuCliente.java`

### Application services

- [Shop facade](https://github.com/diegolyra/projeto-p3/blob/main/src/main/java/com/loja/padrao/facade/LojaFacade.java): `src/main/java/com/loja/padrao/facade/LojaFacade.java`
- [User service](https://github.com/diegolyra/projeto-p3/blob/main/src/main/java/com/loja/business/UsuarioBusiness.java): `src/main/java/com/loja/business/UsuarioBusiness.java`
- [Item service](https://github.com/diegolyra/projeto-p3/blob/main/src/main/java/com/loja/business/ItemBusiness.java): `src/main/java/com/loja/business/ItemBusiness.java`
- [Category service](https://github.com/diegolyra/projeto-p3/blob/main/src/main/java/com/loja/business/CategoriaBusiness.java): `src/main/java/com/loja/business/CategoriaBusiness.java`
- [Supplier service](https://github.com/diegolyra/projeto-p3/blob/main/src/main/java/com/loja/business/FornecedorBusiness.java): `src/main/java/com/loja/business/FornecedorBusiness.java`

### Rental domain

- [Contract service](https://github.com/diegolyra/projeto-p3/blob/main/src/main/java/com/loja/business/ContratoBusiness.java): `src/main/java/com/loja/business/ContratoBusiness.java`
- [Fine service](https://github.com/diegolyra/projeto-p3/blob/main/src/main/java/com/loja/business/MultaBusiness.java): `src/main/java/com/loja/business/MultaBusiness.java`

### CSV persistence

- [User CSV store](https://github.com/diegolyra/projeto-p3/blob/main/src/main/java/com/loja/repositories/UsuarioPersistenciaCSV.java): `src/main/java/com/loja/repositories/UsuarioPersistenciaCSV.java`
- [Item CSV store](https://github.com/diegolyra/projeto-p3/blob/main/src/main/java/com/loja/repositories/ItemPersistenciaCSV.java): `src/main/java/com/loja/repositories/ItemPersistenciaCSV.java`
- [Category CSV store](https://github.com/diegolyra/projeto-p3/blob/main/src/main/java/com/loja/repositories/CategoriaPersistenciaCSV.java): `src/main/java/com/loja/repositories/CategoriaPersistenciaCSV.java`
- [Supplier CSV store](https://github.com/diegolyra/projeto-p3/blob/main/src/main/java/com/loja/repositories/FornecedorPersistenciaCSV.java): `src/main/java/com/loja/repositories/FornecedorPersistenciaCSV.java`
- [Contract CSV store](https://github.com/diegolyra/projeto-p3/blob/main/src/main/java/com/loja/repositories/ContratoPersistenciaCSV.java): `src/main/java/com/loja/repositories/ContratoPersistenciaCSV.java`
- [Fine CSV store](https://github.com/diegolyra/projeto-p3/blob/main/src/main/java/com/loja/repositories/MultaPersistenciaCSV.java): `src/main/java/com/loja/repositories/MultaPersistenciaCSV.java`

### Other components

- **Shop user**

## Connections

- Shop user → Login menu: uses
- Application startup → User CSV store: creates
- Application startup → Item CSV store: creates
- Application startup → Category CSV store: creates
- Application startup → Supplier CSV store: creates
- Application startup → Contract CSV store: creates
- Application startup → Fine CSV store: creates
- Application startup → User service: wires
- Application startup → Item service: wires
- Application startup → Category service: wires
- Application startup → Supplier service: wires
- Application startup → Contract service: wires
- Application startup → Fine service: wires
- Application startup → Shop facade: creates
- Application startup → Login menu: starts
- Login menu → Shop facade: uses
- Admin menu → Shop facade: uses
- Staff menu → Shop facade: uses
- Customer menu → Shop facade: queries
- Shop facade → User service: delegates
- Shop facade → Item service: delegates
- Shop facade → Category service: delegates
- Shop facade → Supplier service: delegates
- Shop facade → Contract service: delegates
- Shop facade → Fine service: delegates
- Contract service → User service: looks up
- Contract service → Item service: checks and updates
- Contract service → Contract CSV store: reads and writes
- Fine service → Fine CSV store: reads and writes
- Application startup → User service: injects user store
- Application startup → Item service: injects item store
- Application startup → Category service: injects category store
- Application startup → Supplier service: injects supplier store
- Application startup → Contract service: injects contract store
- Application startup → Fine service: injects fine store
