# joaogt01/loja-que-aluga-de-um-tudo architecture

> Architecture diagram of the GitHub repository joaogt01/loja-que-aluga-de-um-tudo, 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/joaogt01/loja-que-aluga-de-um-tudo
- Repository: https://github.com/joaogt01/loja-que-aluga-de-um-tudo

## Overview

A Java console application for an all-purpose rental shop. Customers browse available inventory and review rental history or pending fines; staff and administrators manage users, inventory, categories, suppliers, contracts, fines, and revenue reports. The runtime is wired in Main through role menus, a facade, domain business services, and CSV-backed repositories. The README documents the CRUD areas, while sampled code confirms rental, return, fine, and persistence behavior; unsampled menu and service details are represented only at the subsystem level.

Main entry points: [`Loja-que-aluga-de-um-tudo/loja-aluga-tudo/src/main/java/com/loja/padraoFacade/LojaFacade.java`](https://github.com/joaogt01/loja-que-aluga-de-um-tudo/blob/main/Loja-que-aluga-de-um-tudo/loja-aluga-tudo/src/main/java/com/loja/padraoFacade/LojaFacade.java) (Shop facade), [`Loja-que-aluga-de-um-tudo/loja-aluga-tudo/src/main/java/com/loja/ui/MenuLogin.java`](https://github.com/joaogt01/loja-que-aluga-de-um-tudo/blob/main/Loja-que-aluga-de-um-tudo/loja-aluga-tudo/src/main/java/com/loja/ui/MenuLogin.java) (Login menu), [`Loja-que-aluga-de-um-tudo/loja-aluga-tudo/src/main/java/com/loja/business/ContratoBusiness.java`](https://github.com/joaogt01/loja-que-aluga-de-um-tudo/blob/main/Loja-que-aluga-de-um-tudo/loja-aluga-tudo/src/main/java/com/loja/business/ContratoBusiness.java) (Rental service), [`Loja-que-aluga-de-um-tudo/loja-aluga-tudo/src/main/java/com/loja/business/UsuarioBusiness.java`](https://github.com/joaogt01/loja-que-aluga-de-um-tudo/blob/main/Loja-que-aluga-de-um-tudo/loja-aluga-tudo/src/main/java/com/loja/business/UsuarioBusiness.java) (User service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_presentation["Console interface"]
  node_main["Application setup<br/>[Main.java]"]
  node_login["Login menu<br/>[MenuLogin.java]"]
  node_clientmenu["Customer menu<br/>[MenuCliente.java]"]
  node_staffmenu["Staff menu"]
  node_adminmenu["Admin menu<br/>[MenuAdmin.java]"]
end

subgraph group_domain["Rental operations"]
  node_facade["Shop facade<br/>[LojaFacade.java]"]
  node_users["User service"]
  node_items["Item service<br/>[ItemBusiness.java]"]
  node_contracts["Rental service"]
  node_fines["Fine service<br/>[MultaBusiness.java]"]
end

subgraph group_catalog["Shop records"]
  node_categories["Category service"]
  node_suppliers["Supplier service"]
  node_domainmodels["Domain records"]
end

subgraph group_persistence["CSV persistence"]
  node_userstore[("Users CSV")]
  node_itemstore[("Items CSV")]
  node_contractstore[("Contracts CSV")]
  node_finestore[("Fines CSV")]
  node_categorystore[("Categories CSV")]
  node_supplierstore[("Suppliers CSV")]
end

node_customer(("Customer"))
node_staff(("Staff / admin"))

node_main -->|"starts"| node_login
node_main -->|"wires services"| node_facade
node_customer -->|"uses"| node_login
node_staff -->|"uses"| node_login
node_login -->|"opens"| node_clientmenu
node_login -->|"opens"| node_staffmenu
node_login -->|"opens"| node_adminmenu
node_clientmenu -->|"requests rentals"| node_facade
node_staffmenu -->|"requests operations"| node_facade
node_adminmenu -->|"requests management"| node_facade
node_facade -->|"delegates"| node_users
node_facade -->|"delegates"| node_items
node_facade -->|"delegates"| node_contracts
node_facade -->|"delegates"| node_fines
node_facade -->|"delegates"| node_categories
node_facade -->|"delegates"| node_suppliers
node_contracts -->|"checks customer"| node_users
node_contracts -->|"checks and updates"| node_items
node_contracts -->|"reads and writes"| node_contractstore
node_users -->|"reads and writes"| node_userstore
node_items -->|"reads and writes"| node_itemstore
node_fines -->|"reads and writes"| node_finestore
node_categories -->|"reads and writes"| node_categorystore
node_suppliers -->|"reads and writes"| node_supplierstore
node_facade -->|"aggregates revenue"| node_contracts
node_facade -->|"aggregates revenue"| node_fines
node_facade -->|"uses records"| node_domainmodels

click node_main "https://github.com/joaogt01/loja-que-aluga-de-um-tudo/blob/main/Loja-que-aluga-de-um-tudo/loja-aluga-tudo/src/main/java/com/loja/Main.java"
click node_login "https://github.com/joaogt01/loja-que-aluga-de-um-tudo/blob/main/Loja-que-aluga-de-um-tudo/loja-aluga-tudo/src/main/java/com/loja/ui/MenuLogin.java"
click node_clientmenu "https://github.com/joaogt01/loja-que-aluga-de-um-tudo/blob/main/Loja-que-aluga-de-um-tudo/loja-aluga-tudo/src/main/java/com/loja/ui/MenuCliente.java"
click node_staffmenu "https://github.com/joaogt01/loja-que-aluga-de-um-tudo/blob/main/Loja-que-aluga-de-um-tudo/loja-aluga-tudo/src/main/java/com/loja/ui/MenuFuncionario.java"
click node_adminmenu "https://github.com/joaogt01/loja-que-aluga-de-um-tudo/blob/main/Loja-que-aluga-de-um-tudo/loja-aluga-tudo/src/main/java/com/loja/ui/MenuAdmin.java"
click node_facade "https://github.com/joaogt01/loja-que-aluga-de-um-tudo/blob/main/Loja-que-aluga-de-um-tudo/loja-aluga-tudo/src/main/java/com/loja/padraoFacade/LojaFacade.java"
click node_users "https://github.com/joaogt01/loja-que-aluga-de-um-tudo/blob/main/Loja-que-aluga-de-um-tudo/loja-aluga-tudo/src/main/java/com/loja/business/UsuarioBusiness.java"
click node_items "https://github.com/joaogt01/loja-que-aluga-de-um-tudo/blob/main/Loja-que-aluga-de-um-tudo/loja-aluga-tudo/src/main/java/com/loja/business/ItemBusiness.java"
click node_contracts "https://github.com/joaogt01/loja-que-aluga-de-um-tudo/blob/main/Loja-que-aluga-de-um-tudo/loja-aluga-tudo/src/main/java/com/loja/business/ContratoBusiness.java"
click node_fines "https://github.com/joaogt01/loja-que-aluga-de-um-tudo/blob/main/Loja-que-aluga-de-um-tudo/loja-aluga-tudo/src/main/java/com/loja/business/MultaBusiness.java"
click node_categories "https://github.com/joaogt01/loja-que-aluga-de-um-tudo/blob/main/Loja-que-aluga-de-um-tudo/loja-aluga-tudo/src/main/java/com/loja/business/CategoriaBusiness.java"
click node_suppliers "https://github.com/joaogt01/loja-que-aluga-de-um-tudo/blob/main/Loja-que-aluga-de-um-tudo/loja-aluga-tudo/src/main/java/com/loja/business/FornecedorBusiness.java"
click node_domainmodels "https://github.com/joaogt01/loja-que-aluga-de-um-tudo/tree/main/Loja-que-aluga-de-um-tudo/loja-aluga-tudo/src/main/java/com/loja/model"
click node_userstore "https://github.com/joaogt01/loja-que-aluga-de-um-tudo/blob/main/Loja-que-aluga-de-um-tudo/loja-aluga-tudo/src/main/java/com/loja/repositories/UsuarioPersistenciaCSV.java"
click node_itemstore "https://github.com/joaogt01/loja-que-aluga-de-um-tudo/blob/main/Loja-que-aluga-de-um-tudo/loja-aluga-tudo/src/main/java/com/loja/repositories/ItemPersistenciaCSV.java"
click node_contractstore "https://github.com/joaogt01/loja-que-aluga-de-um-tudo/blob/main/Loja-que-aluga-de-um-tudo/loja-aluga-tudo/src/main/java/com/loja/repositories/ContratoPersistenciaCSV.java"
click node_finestore "https://github.com/joaogt01/loja-que-aluga-de-um-tudo/blob/main/Loja-que-aluga-de-um-tudo/loja-aluga-tudo/src/main/java/com/loja/repositories/MultaPersistenciaCSV.java"
click node_categorystore "https://github.com/joaogt01/loja-que-aluga-de-um-tudo/blob/main/Loja-que-aluga-de-um-tudo/loja-aluga-tudo/src/main/java/com/loja/repositories/CategoriaPersistenciaCSV.java"
click node_supplierstore "https://github.com/joaogt01/loja-que-aluga-de-um-tudo/blob/main/Loja-que-aluga-de-um-tudo/loja-aluga-tudo/src/main/java/com/loja/repositories/FornecedorPersistenciaCSV.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_clientmenu,node_staffmenu,node_adminmenu toneBlue
class node_facade,node_users,node_items,node_contracts,node_fines toneAmber
class node_categories,node_suppliers,node_domainmodels toneMint
class node_userstore,node_itemstore,node_contractstore,node_finestore,node_categorystore,node_supplierstore toneRose
class node_customer,node_staff toneIndigo
```

## Components

### Console interface

- [Application setup](https://github.com/joaogt01/loja-que-aluga-de-um-tudo/blob/main/Loja-que-aluga-de-um-tudo/loja-aluga-tudo/src/main/java/com/loja/Main.java): `Loja-que-aluga-de-um-tudo/loja-aluga-tudo/src/main/java/com/loja/Main.java`
- [Login menu](https://github.com/joaogt01/loja-que-aluga-de-um-tudo/blob/main/Loja-que-aluga-de-um-tudo/loja-aluga-tudo/src/main/java/com/loja/ui/MenuLogin.java): `Loja-que-aluga-de-um-tudo/loja-aluga-tudo/src/main/java/com/loja/ui/MenuLogin.java`
- [Customer menu](https://github.com/joaogt01/loja-que-aluga-de-um-tudo/blob/main/Loja-que-aluga-de-um-tudo/loja-aluga-tudo/src/main/java/com/loja/ui/MenuCliente.java): `Loja-que-aluga-de-um-tudo/loja-aluga-tudo/src/main/java/com/loja/ui/MenuCliente.java`
- [Staff menu](https://github.com/joaogt01/loja-que-aluga-de-um-tudo/blob/main/Loja-que-aluga-de-um-tudo/loja-aluga-tudo/src/main/java/com/loja/ui/MenuFuncionario.java): `Loja-que-aluga-de-um-tudo/loja-aluga-tudo/src/main/java/com/loja/ui/MenuFuncionario.java`
- [Admin menu](https://github.com/joaogt01/loja-que-aluga-de-um-tudo/blob/main/Loja-que-aluga-de-um-tudo/loja-aluga-tudo/src/main/java/com/loja/ui/MenuAdmin.java): `Loja-que-aluga-de-um-tudo/loja-aluga-tudo/src/main/java/com/loja/ui/MenuAdmin.java`

### Rental operations

- [Shop facade](https://github.com/joaogt01/loja-que-aluga-de-um-tudo/blob/main/Loja-que-aluga-de-um-tudo/loja-aluga-tudo/src/main/java/com/loja/padraoFacade/LojaFacade.java): `Loja-que-aluga-de-um-tudo/loja-aluga-tudo/src/main/java/com/loja/padraoFacade/LojaFacade.java`
- [User service](https://github.com/joaogt01/loja-que-aluga-de-um-tudo/blob/main/Loja-que-aluga-de-um-tudo/loja-aluga-tudo/src/main/java/com/loja/business/UsuarioBusiness.java): `Loja-que-aluga-de-um-tudo/loja-aluga-tudo/src/main/java/com/loja/business/UsuarioBusiness.java`
- [Item service](https://github.com/joaogt01/loja-que-aluga-de-um-tudo/blob/main/Loja-que-aluga-de-um-tudo/loja-aluga-tudo/src/main/java/com/loja/business/ItemBusiness.java): `Loja-que-aluga-de-um-tudo/loja-aluga-tudo/src/main/java/com/loja/business/ItemBusiness.java`
- [Rental service](https://github.com/joaogt01/loja-que-aluga-de-um-tudo/blob/main/Loja-que-aluga-de-um-tudo/loja-aluga-tudo/src/main/java/com/loja/business/ContratoBusiness.java): `Loja-que-aluga-de-um-tudo/loja-aluga-tudo/src/main/java/com/loja/business/ContratoBusiness.java`
- [Fine service](https://github.com/joaogt01/loja-que-aluga-de-um-tudo/blob/main/Loja-que-aluga-de-um-tudo/loja-aluga-tudo/src/main/java/com/loja/business/MultaBusiness.java): `Loja-que-aluga-de-um-tudo/loja-aluga-tudo/src/main/java/com/loja/business/MultaBusiness.java`

### Shop records

- [Category service](https://github.com/joaogt01/loja-que-aluga-de-um-tudo/blob/main/Loja-que-aluga-de-um-tudo/loja-aluga-tudo/src/main/java/com/loja/business/CategoriaBusiness.java): `Loja-que-aluga-de-um-tudo/loja-aluga-tudo/src/main/java/com/loja/business/CategoriaBusiness.java`
- [Supplier service](https://github.com/joaogt01/loja-que-aluga-de-um-tudo/blob/main/Loja-que-aluga-de-um-tudo/loja-aluga-tudo/src/main/java/com/loja/business/FornecedorBusiness.java): `Loja-que-aluga-de-um-tudo/loja-aluga-tudo/src/main/java/com/loja/business/FornecedorBusiness.java`
- [Domain records](https://github.com/joaogt01/loja-que-aluga-de-um-tudo/tree/main/Loja-que-aluga-de-um-tudo/loja-aluga-tudo/src/main/java/com/loja/model): `Loja-que-aluga-de-um-tudo/loja-aluga-tudo/src/main/java/com/loja/model`

### CSV persistence

- [Users CSV](https://github.com/joaogt01/loja-que-aluga-de-um-tudo/blob/main/Loja-que-aluga-de-um-tudo/loja-aluga-tudo/src/main/java/com/loja/repositories/UsuarioPersistenciaCSV.java): `Loja-que-aluga-de-um-tudo/loja-aluga-tudo/src/main/java/com/loja/repositories/UsuarioPersistenciaCSV.java`
- [Items CSV](https://github.com/joaogt01/loja-que-aluga-de-um-tudo/blob/main/Loja-que-aluga-de-um-tudo/loja-aluga-tudo/src/main/java/com/loja/repositories/ItemPersistenciaCSV.java): `Loja-que-aluga-de-um-tudo/loja-aluga-tudo/src/main/java/com/loja/repositories/ItemPersistenciaCSV.java`
- [Contracts CSV](https://github.com/joaogt01/loja-que-aluga-de-um-tudo/blob/main/Loja-que-aluga-de-um-tudo/loja-aluga-tudo/src/main/java/com/loja/repositories/ContratoPersistenciaCSV.java): `Loja-que-aluga-de-um-tudo/loja-aluga-tudo/src/main/java/com/loja/repositories/ContratoPersistenciaCSV.java`
- [Fines CSV](https://github.com/joaogt01/loja-que-aluga-de-um-tudo/blob/main/Loja-que-aluga-de-um-tudo/loja-aluga-tudo/src/main/java/com/loja/repositories/MultaPersistenciaCSV.java): `Loja-que-aluga-de-um-tudo/loja-aluga-tudo/src/main/java/com/loja/repositories/MultaPersistenciaCSV.java`
- [Categories CSV](https://github.com/joaogt01/loja-que-aluga-de-um-tudo/blob/main/Loja-que-aluga-de-um-tudo/loja-aluga-tudo/src/main/java/com/loja/repositories/CategoriaPersistenciaCSV.java): `Loja-que-aluga-de-um-tudo/loja-aluga-tudo/src/main/java/com/loja/repositories/CategoriaPersistenciaCSV.java`
- [Suppliers CSV](https://github.com/joaogt01/loja-que-aluga-de-um-tudo/blob/main/Loja-que-aluga-de-um-tudo/loja-aluga-tudo/src/main/java/com/loja/repositories/FornecedorPersistenciaCSV.java): `Loja-que-aluga-de-um-tudo/loja-aluga-tudo/src/main/java/com/loja/repositories/FornecedorPersistenciaCSV.java`

### Other components

- **Customer**
- **Staff / admin**

## Connections

- Application setup → Login menu: starts
- Application setup → Shop facade: wires services
- Customer → Login menu: uses
- Staff / admin → Login menu: uses
- Login menu → Customer menu: opens
- Login menu → Staff menu: opens
- Login menu → Admin menu: opens
- Customer menu → Shop facade: requests rentals
- Staff menu → Shop facade: requests operations
- Admin menu → Shop facade: requests management
- Shop facade → User service: delegates
- Shop facade → Item service: delegates
- Shop facade → Rental service: delegates
- Shop facade → Fine service: delegates
- Shop facade → Category service: delegates
- Shop facade → Supplier service: delegates
- Rental service → User service: checks customer
- Rental service → Item service: checks and updates
- Rental service → Contracts CSV: reads and writes
- User service → Users CSV: reads and writes
- Item service → Items CSV: reads and writes
- Fine service → Fines CSV: reads and writes
- Category service → Categories CSV: reads and writes
- Supplier service → Suppliers CSV: reads and writes
- Shop facade → Rental service: aggregates revenue
- Shop facade → Fine service: aggregates revenue
- Shop facade → Domain records: uses records
