# adrienylaiz-alt/amparapet architecture

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

- Interactive diagram: https://gitdiagram.com/adrienylaiz-alt/amparapet
- Repository: https://github.com/adrienylaiz-alt/amparapet

## Overview

AmparaPet is an animal-adoption site and shelter-management system. Visitors browse and filter animal listings, view an animal’s details, and can register interest for WhatsApp contact; administrators log in to manage animals, photos, statuses, shelter settings, users, and dashboard totals. The browser frontend calls a FastAPI backend, which validates and processes requests using shared business services and persists records in MySQL. The README documents these capabilities; several page and router implementations are represented by their exact paths but were not sampled, so their internal call details are not asserted.

Main entry points: [`frontend/js/api.js`](https://github.com/adrienylaiz-alt/amparapet/blob/main/frontend/js/api.js) (API client), [`backend/app/routers/admin.py`](https://github.com/adrienylaiz-alt/amparapet/blob/main/backend/app/routers/admin.py) (Admin API routes), [`backend/app/main.py`](https://github.com/adrienylaiz-alt/amparapet/blob/main/backend/app/main.py) (API application), [`backend/app/database.py`](https://github.com/adrienylaiz-alt/amparapet/blob/main/backend/app/database.py) (Database connection)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_public["Public adoption site"]
  node_public_pages["Public pages"]
  node_catalog["Animal catalog<br/>[catalogo.js]"]
  node_animal_detail["Animal details<br/>[animal.js]"]
  node_adoption_info["Adoption information<br/>[como-adotar.js]"]
  node_public_layout["Shared layout<br/>[layout.js]"]
end

subgraph group_admin["Shelter administration"]
  node_admin_pages["Admin pages"]
  node_admin_animal_ui["Animal management UI<br/>[admin-animal.js]"]
  node_admin_dashboard_ui["Dashboard and reports<br/>[admin-dashboard.js]"]
  node_admin_settings_ui["Shelter settings UI"]
  node_admin_users_ui["User management UI<br/>[admin-animais.js]"]
  node_admin_layout["Admin layout<br/>[layout.js]"]
end

subgraph group_api["API and domain logic"]
  node_api_client["API client<br/>[api.js]"]
  node_api_config["API endpoint config<br/>[config.js]"]
  node_public_api["Public API routes<br/>[publico.py]"]
  node_admin_api["Admin API routes<br/>[admin.py]"]
  node_auth_api["Authentication routes<br/>[auth.py]"]
  node_users_api["User routes<br/>[usuarios.py]"]
  node_business["Domain services<br/>[servicos.py]"]
  node_security["Sessions and security<br/>[security.py]"]
  node_schemas["Request and response schemas<br/>[schemas.py]"]
  node_server["API application<br/>[main.py]"]
end

subgraph group_data["Persistence and media"]
  node_orm["Database models<br/>[models.py]"]
  node_db_config["Database connection<br/>[database.py]"]
  node_mysql[("MySQL database")]
  node_image_ops["Image processing<br/>[imagens.py]"]
  node_image_files[("Uploaded image files<br/>[config.py]")]
end

node_visitor(("Visitor"))
node_admin_user(("Administrator"))
node_whatsapp{{"WhatsApp"}}

node_visitor -->|"browses"| node_public_pages
node_public_pages -.->|"loads catalog"| node_catalog
node_catalog -->|"requests listings"| node_api_client
node_public_pages -->|"uses layout"| node_public_layout
node_public_pages -->|"loads catalog"| node_catalog
node_animal_detail -->|"requests details"| node_api_client
node_animal_detail -->|"uses layout"| node_public_layout
node_adoption_info -->|"uses layout"| node_public_layout
node_public_layout -->|"loads shelter data"| node_api_client
node_admin_user -->|"manages shelter"| node_admin_pages
node_admin_pages -->|"uses layout"| node_admin_layout
node_admin_animal_ui -->|"manages animals"| node_api_client
node_admin_dashboard_ui -->|"loads dashboard"| node_api_client
node_admin_settings_ui -->|"updates shelter"| node_api_client
node_admin_users_ui -->|"manages animals"| node_api_client
node_admin_layout -->|"uses API"| node_api_client
node_api_client -->|"uses endpoint"| node_api_config
node_api_client -->|"sends requests"| node_server
node_server -->|"registers routes"| node_public_api
node_server -->|"registers routes"| node_admin_api
node_server -->|"registers routes"| node_auth_api
node_server -->|"registers routes"| node_users_api
node_public_api -->|"uses services"| node_business
node_admin_api -->|"uses services"| node_business
node_admin_api -->|"manages photos"| node_image_ops
node_auth_api -->|"uses security"| node_security
node_users_api -->|"uses security"| node_security
node_admin_api -->|"requires session"| node_security
node_public_api -->|"validates output"| node_schemas
node_admin_api -->|"validates input"| node_schemas
node_business -->|"builds responses"| node_schemas
node_business -->|"creates contact link"| node_whatsapp
node_server -->|"initializes database"| node_db_config
node_db_config -->|"connects"| node_mysql
node_db_config -->|"provides base"| node_orm
node_public_api -->|"uses session"| node_db_config
node_admin_api -->|"uses session"| node_db_config
node_security -->|"uses session"| node_db_config
node_business -->|"reads and updates"| node_orm
node_image_ops -->|"stores media"| node_image_files

click node_public_pages "https://github.com/adrienylaiz-alt/amparapet/tree/main/frontend"
click node_catalog "https://github.com/adrienylaiz-alt/amparapet/blob/main/frontend/js/catalogo.js"
click node_animal_detail "https://github.com/adrienylaiz-alt/amparapet/blob/main/frontend/js/pages/animal.js"
click node_adoption_info "https://github.com/adrienylaiz-alt/amparapet/blob/main/frontend/js/pages/como-adotar.js"
click node_public_layout "https://github.com/adrienylaiz-alt/amparapet/blob/main/frontend/js/layout.js"
click node_admin_pages "https://github.com/adrienylaiz-alt/amparapet/tree/main/frontend/admin"
click node_admin_animal_ui "https://github.com/adrienylaiz-alt/amparapet/blob/main/frontend/js/pages/admin-animal.js"
click node_admin_dashboard_ui "https://github.com/adrienylaiz-alt/amparapet/blob/main/frontend/js/pages/admin-dashboard.js"
click node_admin_settings_ui "https://github.com/adrienylaiz-alt/amparapet/blob/main/frontend/js/pages/admin-configuracoes.js"
click node_admin_users_ui "https://github.com/adrienylaiz-alt/amparapet/blob/main/frontend/js/pages/admin-animais.js"
click node_admin_layout "https://github.com/adrienylaiz-alt/amparapet/blob/main/frontend/js/layout.js"
click node_api_client "https://github.com/adrienylaiz-alt/amparapet/blob/main/frontend/js/api.js"
click node_api_config "https://github.com/adrienylaiz-alt/amparapet/blob/main/frontend/js/config.js"
click node_public_api "https://github.com/adrienylaiz-alt/amparapet/blob/main/backend/app/routers/publico.py"
click node_admin_api "https://github.com/adrienylaiz-alt/amparapet/blob/main/backend/app/routers/admin.py"
click node_auth_api "https://github.com/adrienylaiz-alt/amparapet/blob/main/backend/app/routers/auth.py"
click node_users_api "https://github.com/adrienylaiz-alt/amparapet/blob/main/backend/app/routers/usuarios.py"
click node_business "https://github.com/adrienylaiz-alt/amparapet/blob/main/backend/app/servicos.py"
click node_security "https://github.com/adrienylaiz-alt/amparapet/blob/main/backend/app/security.py"
click node_schemas "https://github.com/adrienylaiz-alt/amparapet/blob/main/backend/app/schemas.py"
click node_server "https://github.com/adrienylaiz-alt/amparapet/blob/main/backend/app/main.py"
click node_orm "https://github.com/adrienylaiz-alt/amparapet/blob/main/backend/app/models.py"
click node_db_config "https://github.com/adrienylaiz-alt/amparapet/blob/main/backend/app/database.py"
click node_image_ops "https://github.com/adrienylaiz-alt/amparapet/blob/main/backend/app/imagens.py"
click node_image_files "https://github.com/adrienylaiz-alt/amparapet/blob/main/backend/app/config.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_public_pages,node_catalog,node_animal_detail,node_adoption_info,node_public_layout toneBlue
class node_admin_pages,node_admin_animal_ui,node_admin_dashboard_ui,node_admin_settings_ui,node_admin_users_ui,node_admin_layout toneAmber
class node_api_client,node_api_config,node_public_api,node_admin_api,node_auth_api,node_users_api,node_business,node_security,node_schemas,node_server toneMint
class node_orm,node_db_config,node_mysql,node_image_ops,node_image_files toneRose
class node_visitor,node_admin_user,node_whatsapp toneIndigo
```

## Components

### Public adoption site

- [Public pages](https://github.com/adrienylaiz-alt/amparapet/tree/main/frontend): `frontend`
- [Animal catalog](https://github.com/adrienylaiz-alt/amparapet/blob/main/frontend/js/catalogo.js): `frontend/js/catalogo.js`
- [Animal details](https://github.com/adrienylaiz-alt/amparapet/blob/main/frontend/js/pages/animal.js): `frontend/js/pages/animal.js`
- [Adoption information](https://github.com/adrienylaiz-alt/amparapet/blob/main/frontend/js/pages/como-adotar.js): `frontend/js/pages/como-adotar.js`
- [Shared layout](https://github.com/adrienylaiz-alt/amparapet/blob/main/frontend/js/layout.js): `frontend/js/layout.js`

### Shelter administration

- [Admin pages](https://github.com/adrienylaiz-alt/amparapet/tree/main/frontend/admin): `frontend/admin`
- [Animal management UI](https://github.com/adrienylaiz-alt/amparapet/blob/main/frontend/js/pages/admin-animal.js): `frontend/js/pages/admin-animal.js`
- [Dashboard and reports](https://github.com/adrienylaiz-alt/amparapet/blob/main/frontend/js/pages/admin-dashboard.js): `frontend/js/pages/admin-dashboard.js`
- [Shelter settings UI](https://github.com/adrienylaiz-alt/amparapet/blob/main/frontend/js/pages/admin-configuracoes.js): `frontend/js/pages/admin-configuracoes.js`
- [User management UI](https://github.com/adrienylaiz-alt/amparapet/blob/main/frontend/js/pages/admin-animais.js): `frontend/js/pages/admin-animais.js`
- [Admin layout](https://github.com/adrienylaiz-alt/amparapet/blob/main/frontend/js/layout.js): `frontend/js/layout.js`

### API and domain logic

- [API client](https://github.com/adrienylaiz-alt/amparapet/blob/main/frontend/js/api.js): `frontend/js/api.js`
- [API endpoint config](https://github.com/adrienylaiz-alt/amparapet/blob/main/frontend/js/config.js): `frontend/js/config.js`
- [Public API routes](https://github.com/adrienylaiz-alt/amparapet/blob/main/backend/app/routers/publico.py): `backend/app/routers/publico.py`
- [Admin API routes](https://github.com/adrienylaiz-alt/amparapet/blob/main/backend/app/routers/admin.py): `backend/app/routers/admin.py`
- [Authentication routes](https://github.com/adrienylaiz-alt/amparapet/blob/main/backend/app/routers/auth.py): `backend/app/routers/auth.py`
- [User routes](https://github.com/adrienylaiz-alt/amparapet/blob/main/backend/app/routers/usuarios.py): `backend/app/routers/usuarios.py`
- [Domain services](https://github.com/adrienylaiz-alt/amparapet/blob/main/backend/app/servicos.py): `backend/app/servicos.py`
- [Sessions and security](https://github.com/adrienylaiz-alt/amparapet/blob/main/backend/app/security.py): `backend/app/security.py`
- [Request and response schemas](https://github.com/adrienylaiz-alt/amparapet/blob/main/backend/app/schemas.py): `backend/app/schemas.py`
- [API application](https://github.com/adrienylaiz-alt/amparapet/blob/main/backend/app/main.py): `backend/app/main.py`

### Persistence and media

- [Database models](https://github.com/adrienylaiz-alt/amparapet/blob/main/backend/app/models.py): `backend/app/models.py`
- [Database connection](https://github.com/adrienylaiz-alt/amparapet/blob/main/backend/app/database.py): `backend/app/database.py`
- **MySQL database**
- [Image processing](https://github.com/adrienylaiz-alt/amparapet/blob/main/backend/app/imagens.py): `backend/app/imagens.py`
- [Uploaded image files](https://github.com/adrienylaiz-alt/amparapet/blob/main/backend/app/config.py): `backend/app/config.py`

### Other components

- **Visitor**
- **Administrator**
- **WhatsApp**

## Connections

- Visitor → Public pages: browses (evidence: `README.md`)
- Public pages → Animal catalog: loads catalog (evidence: `frontend/js/pages/animais.js`)
- Animal catalog → API client: requests listings (evidence: `frontend/js/catalogo.js`)
- Public pages → Shared layout: uses layout (evidence: `frontend/js/pages/index.js`)
- Public pages → Animal catalog: loads catalog (evidence: `frontend/js/pages/animais.js`)
- Animal details → API client: requests details (evidence: `frontend/js/pages/animal.js`)
- Animal details → Shared layout: uses layout (evidence: `frontend/js/pages/animal.js`)
- Adoption information → Shared layout: uses layout (evidence: `frontend/js/pages/como-adotar.js`)
- Shared layout → API client: loads shelter data (evidence: `frontend/js/layout.js`)
- Administrator → Admin pages: manages shelter (evidence: `README.md`)
- Admin pages → Admin layout: uses layout
- Animal management UI → API client: manages animals (evidence: `frontend/js/pages/admin-animal.js`)
- Dashboard and reports → API client: loads dashboard (evidence: `frontend/js/pages/admin-dashboard.js`)
- Shelter settings UI → API client: updates shelter (evidence: `frontend/js/pages/admin-configuracoes.js`)
- User management UI → API client: manages animals (evidence: `frontend/js/pages/admin-animais.js`)
- Admin layout → API client: uses API (evidence: `frontend/js/layout.js`)
- API client → API endpoint config: uses endpoint (evidence: `frontend/js/api.js`)
- API client → API application: sends requests (evidence: `README.md`)
- API application → Public API routes: registers routes (evidence: `backend/app/main.py`)
- API application → Admin API routes: registers routes (evidence: `backend/app/main.py`)
- API application → Authentication routes: registers routes (evidence: `backend/app/main.py`)
- API application → User routes: registers routes (evidence: `backend/app/main.py`)
- Public API routes → Domain services: uses services (evidence: `backend/app/routers/publico.py`)
- Admin API routes → Domain services: uses services (evidence: `backend/app/routers/admin.py`)
- Admin API routes → Image processing: manages photos (evidence: `backend/app/routers/admin.py`)
- Authentication routes → Sessions and security: uses security (evidence: `backend/app/routers/auth.py`)
- User routes → Sessions and security: uses security (evidence: `backend/app/routers/usuarios.py`)
- Admin API routes → Sessions and security: requires session (evidence: `backend/app/routers/admin.py`)
- Public API routes → Request and response schemas: validates output (evidence: `backend/app/routers/publico.py`)
- Admin API routes → Request and response schemas: validates input (evidence: `backend/app/routers/admin.py`)
- Domain services → Request and response schemas: builds responses (evidence: `backend/app/servicos.py`)
- Domain services → WhatsApp: creates contact link (evidence: `backend/app/servicos.py`)
- API application → Database connection: initializes database (evidence: `backend/app/main.py`)
- Database connection → MySQL database: connects (evidence: `backend/app/database.py`)
- Database connection → Database models: provides base (evidence: `backend/app/models.py`)
- Public API routes → Database connection: uses session (evidence: `backend/app/routers/publico.py`)
- Admin API routes → Database connection: uses session (evidence: `backend/app/routers/admin.py`)
- Sessions and security → Database connection: uses session (evidence: `backend/app/security.py`)
- Domain services → Database models: reads and updates (evidence: `backend/app/servicos.py`)
- Image processing → Uploaded image files: stores media (evidence: `backend/app/imagens.py`)
