Frontend do sistema de controle de gastos domésticos, consumindo a API ExpenseControl.Api (.NET).
npm install
npm run devA aplicação sobe em http://localhost:5173. O vite.config.ts já tem um proxy configurado
para http://localhost:5241 (onde o backend roda por padrão) — então basta a API estar
rodando em paralelo, sem precisar configurar CORS manualmente.
src/
├── api/
│ ├── client.ts # instância do axios + interceptors (JWT automático, 401 -> logout)
│ ├── services.ts # funções que chamam cada endpoint da API
│ └── types.ts # interfaces TypeScript espelhando os DTOs do backend
├── context/
│ └── AuthContext.tsx # estado global de autenticação (login/logout/token)
├── routes/
│ └── ProtectedRoute.tsx # bloqueia acesso a rotas sem login
├── components/
│ └── Layout.tsx # sidebar + área de conteúdo, comum a todas as páginas logadas
└── pages/
├── Login.tsx
├── Dashboard.tsx # gráficos: saldo geral, por pessoa, por tipo, evolução mensal
├── People.tsx # CRUD de pessoas
├── Totals.tsx # Consolida os totais
├── Register.tsx # CRUD de usuários
└── Transactions.tsx # CRUD de transações
Login.tsxchamaPOST /api/auth/login, recebe o token JWT- O token é salvo em
localStorage(viaclient.ts) - Toda chamada subsequente já sai com o header
Authorization: Bearer {token}automaticamente - Se a API responder 401 (token expirado/inválido), o usuário é redirecionado para
/login
Os tipos em src/api/types.ts são mantidos manualmente em espelho aos DTOs (records) do
backend C#. Não há geração automática de tipos a partir do OpenAPI neste projeto — se um DTO
mudar no backend (novo campo, campo removido, enum novo), replique a mudança aqui também.