Visão da Arquitetura
O FinBoost+ foi projetado seguindo uma arquitetura moderna e escalável, com separação clara entre frontend e backend, facilitando manutenção, testes e futuras expansões do sistema.
Arquitetura Geral do Sistema
Visão de Alto Nível
graph TB
subgraph "Camada Cliente"
Browser[Navegador Web]
PWA[App PWA Instalado]
end
subgraph "Camada Frontend"
React[React 19 + Vite]
Router[React Router v6]
Context[Context API + Hooks]
UI[TailwindCSS + Headless UI]
end
subgraph "Camada Backend"
API[Spring Boot 3.5 API]
Security[Spring Security + JWT]
Business[Services + Business Logic]
JPA[Spring Data JPA]
end
subgraph "Camada Dados"
DB[(PostgreSQL 15+)]
end
subgraph "Infraestrutura"
Docker[Docker Containers]
CI[GitHub Actions CI/CD]
Deploy[Render Deploy]
end
Browser --> React
PWA --> React
Mobile --> React
React --> API
API --> Security
Security --> Business
Business --> JPA
JPA --> DB
Business -.-> Cache
Docker --> React
Docker --> API
CI --> Docker
Deploy --> Docker
style Cache fill:#f9f9f9,stroke:#999,stroke-dasharray: 5 5
style PWA fill:#e1f5fe
style Security fill:#fff3e0
*Cache Redis planejado para versões futuras
Princípios Arquiteturais
Separação de Responsabilidades
- Frontend focado em UX e apresentação
- Backend concentrado em lógica de negócio e dados
- Banco de dados otimizado para performance e consistência
Escalabilidade e Manutenibilidade
- Arquitetura em camadas bem definidas
- Componentes desacoplados e testáveis
- APIs RESTful padronizadas
Segurança por Design
- Autenticação JWT com refresh tokens
- Validação rigorosa em múltiplas camadas
- Controle de acesso baseado em contexto de grupo
Arquitetura Frontend - React
Stack Tecnológico
graph LR
subgraph "Core Frontend"
React[React 19]
Vite[Vite 7]
TypeScript[JavaScript ES2024]
end
subgraph "Estado e Roteamento"
Context[Context API]
Hooks[Custom Hooks]
Router[React Router v6]
end
subgraph "UI e Estilo"
Tailwind[TailwindCSS 4]
Headless[Headless UI]
Recharts[Recharts]
end
subgraph "Qualidade"
Vitest[Vitest + RTL]
ESLint[ESLint + Prettier]
PWA[Vite PWA Plugin]
end
React --> Context
React --> Router
Context --> Hooks
Tailwind --> Headless
Vite --> PWA
Estrutura de Arquivos
frontend/
├── src/
│ ├── components/ # Componentes reutilizáveis
│ │ ├── ui/ # Componentes atômicos (Button, Input)
│ │ ├── layout/ # Layout e navegação
│ │ ├── forms/ # Formulários complexos
│ │ └── features/ # Componentes de funcionalidades
│ ├── pages/ # Páginas principais (rotas)
│ ├── hooks/ # Custom hooks reutilizáveis
│ ├── context/ # Providers globais
│ │ ├── AuthContext.jsx # Autenticação
│ │ ├── GroupContext.jsx# Estado de grupos
│ │ └── ThemeContext.jsx# Tema e preferências
│ ├── services/ # Integração com APIs
│ ├── routes/ # Configuração de rotas
│ └── utils/ # Funções utilitárias
└── public/ # Assets estáticos + PWA
Padrões de Componentes
Atomic Design + Feature-First
- Atoms: Componentes básicos (Button, Input, Icon)
- Molecules: Combinações simples (SearchBox, FormField)
- Organisms: Componentes complexos (ExpenseList, Dashboard)
- Features: Agrupamento por funcionalidade (Auth, Groups, Expenses)
Gerenciamento de Estado
Utilizamos Context API + Custom Hooks para gerenciamento de estado global:
// Exemplo de Custom Hook
export const useAuth = () => {
const context = useContext(AuthContext)
if (!context) {
throw new Error('useAuth must be used within AuthProvider')
}
return context
}
Principais Contexts:
AuthContext
- Autenticação e dados do usuárioGroupContext
- Estado de grupos ativosThemeContext
- Preferências de tema e UI
Arquitetura Backend - Spring Boot
Stack Tecnológico
graph LR
subgraph "Core Backend"
Java[Java 21 LTS]
Spring[Spring Boot 3.5]
Maven[Maven 3.9+]
end
subgraph "Dados"
JPA[Spring Data JPA]
Hibernate[Hibernate 6]
PostgreSQL[PostgreSQL 15]
end
subgraph "Segurança"
Security[Spring Security 6]
JWT[JWT Tokens]
BCrypt[BCrypt Hashing]
end
subgraph "Documentação"
OpenAPI[SpringDoc OpenAPI]
Scalar[Scalar UI]
end
Spring --> JPA
Spring --> Security
Security --> JWT
JPA --> PostgreSQL
OpenAPI --> Scalar
Arquitetura em Camadas
graph TB
subgraph "Presentation Layer"
Controllers[REST Controllers]
DTOs[Data Transfer Objects]
Validators[Request Validators]
end
subgraph "Business Layer"
Services[Business Services]
Mappers[Entity ↔ DTO Mappers]
Security[Security Context]
end
subgraph "Persistence Layer"
Repositories[JPA Repositories]
Entities[JPA Entities]
Migrations[Flyway Scripts]
end
subgraph "Cross-Cutting"
Exception[Exception Handling]
Logging[Logging & Monitoring]
Config[Configuration]
end
Controllers --> Services
Controllers --> DTOs
Services --> Repositories
Services --> Mappers
Repositories --> Entities
Exception -.-> Controllers
Security -.-> Services
Estrutura de Arquivos
backend/
├── src/main/java/com/finboostplus/
│ ├── controller/ # REST Controllers
│ ├── service/ # Business Logic
│ ├── model/ # JPA Entities
│ ├── repository/ # Data Access
│ ├── dto/ # Data Transfer Objects
│ │ ├── request/ # Request DTOs
│ │ └── response/ # Response DTOs
│ ├── config/ # Configuration Classes
│ ├── security/ # Security Components
│ └── exception/ # Exception Handling
└── src/main/resources/
├── application.yml # Main Configuration
└── db/migration/ # Database Scripts
Padrão de Implementação
Controller → Service → Repository
@RestController
@RequestMapping("/api/groups")
@RequiredArgsConstructor
public class GroupController {
private final GroupService groupService;
@GetMapping
public ResponseEntity<PagedResponse<GroupDTO>> getUserGroups(
@PageableDefault Pageable pageable,
Authentication authentication) {
return ResponseEntity.ok(groupService.getUserGroups(authentication.getName(), pageable));
}
}
Banco de Dados - Modelo Relacional
Principais Relacionamentos
Grupos e Membros
- Um usuário pode ser dono de múltiplos grupos
- Um usuário pode participar de múltiplos grupos
- Cada grupo tem um dono e múltiplos membros
Despesas e Divisões
- Cada despesa pertence a um grupo
- Despesas são divididas entre membros selecionados
- Cálculo automático de valores individuais
Segurança e Autenticação
Fluxo de Autenticação JWT
sequenceDiagram
participant Client as Frontend
participant API as Spring Boot API
participant Auth as Spring Security
participant DB as PostgreSQL
Client->>API: POST /api/auth/login
API->>Auth: Validar credenciais
Auth->>DB: Buscar usuário
DB-->>Auth: Dados do usuário
Auth->>Auth: Gerar JWT token
Auth-->>API: Token + user data
API-->>Client: Response com token
Note over Client: Armazenar token
Client->>API: GET /api/groups (Authorization: Bearer token)
API->>Auth: Validar token JWT
Auth->>Auth: Extrair claims
Auth-->>API: User authenticated
API->>DB: Buscar dados
DB-->>API: Dados dos grupos
API-->>Client: Response com dados
Níveis de Proteção
Rotas Públicas
- Registro, login e recuperação de senha
Rotas Protegidas (JWT Required)
- Todas as operações de grupos e despesas
- Dashboard e relatórios
Controle de Acesso por Contexto
- Apenas membros do grupo podem ver dados do grupo
- Apenas dono do grupo pode gerenciar membros
- Usuários podem editar apenas suas próprias despesas
Integração e Comunicação
API RESTful
Padrões de Endpoint
GET /api/groups # Listar grupos
POST /api/groups # Criar grupo
GET /api/groups/{id} # Detalhes do grupo
PUT /api/groups/{id} # Atualizar grupo
DELETE /api/groups/{id} # Deletar grupo
GET /api/groups/{id}/expenses # Despesas do grupo
POST /api/groups/{id}/expenses # Criar despesa
Formato de Resposta Padrão
{
"success": true,
"message": "Operação realizada com sucesso",
"data": { /* dados da resposta */ },
"timestamp": "2024-01-01T10:00:00Z"
}
Deployment e Infraestrutura
Containerização com Docker
graph TB
subgraph "Docker Compose"
Frontend[Frontend Container<br/>Nginx + React Build]
Backend[Backend Container<br/>Java + Spring Boot]
Database[PostgreSQL Container]
end
subgraph "External Services"
Vercel[Vercel Frontend]
GitHub[GitHub Registry]
end
Frontend --> Backend
Backend --> Database
Backend -.-> Redis
GitHub --> Render
GitHub --> Vercel
style Redis fill:#f9f9f9,stroke:#999,stroke-dasharray: 5 5
Estratégia de Deploy
Desenvolvimento
- Docker Compose para ambiente local completo
- Hot reload habilitado em frontend e backend
Produção
- Frontend: Vercel
- Backend: Render
- Banco: PostgreSQL managed service
- CI/CD: GitHub Actions
Monitoramento e Performance
Otimizações Implementadas
Frontend
- Code splitting por rota
- Lazy loading de componentes
- Service Worker para cache de assets
- Otimização de bundle com Vite
Backend
- Connection pooling do PostgreSQL
- Queries JPA otimizadas
- Paginação em listagens
- Spring Boot Actuator para métricas
Banco de Dados
- Índices em colunas de busca frequente
- Constraints para integridade referencial
Planos de Expansão
Funcionalidades Futuras
- Notificações push em tempo real
- Relatórios avançados e exportação
- App mobile nativo (React Native)
Documentação Viva
Esta arquitetura evolui junto com o projeto. Para detalhes de implementação específicos, consulte:
- Backend README - Setup e execução
- Frontend README - Desenvolvimento local
- API Interativa - Documentação Scalar/Swagger
- GitHub Wiki - Guias técnicos detalhados