A aplicação foi preparada para execução com Docker, utilizando os serviços de backend, frontend, Nginx e MySQL.
- Antes de subir os containers, copie apenas o arquivo de ambiente do frontend:
cp frontend/.env.example frontend/.envNo backend, essa etapa não precisa ser feita manualmente, pois o comando composer setup já copia o .env automaticamente caso ele ainda não exista.
- Suba os containers com:
docker compose up -d --build- Execute a configuração inicial do Laravel:
docker compose exec app composer setup- Em seguida, execute os seeders para criar as roles e os usuários de teste:
docker compose exec app php artisan db:seed- No frontend, instale as dependências:
docker compose exec frontend npm installA aplicação ficará disponível em:
Frontend: http://localhost:5173
Backend: http://localhost:8000
As credenciais abaixo são criadas automaticamente via seeders:
| Perfil | Login | Senha |
|---|---|---|
| Admin | admin | admin |
| Requester | requester | requester |
| Approver | approver | approver |
Alguns termos do desafio foram adaptados para inglês para manter consistência no código. As roles foram implementadas como requester, approver e admin, utilizando Enums do PHP, evitando strings soltas e melhorando a manutenção.
Também foram tomadas algumas decisões de modelagem para alinhar o sistema a boas práticas:
created_atfoi utilizado como data de registro, aproveitando a convenção padrão do Laravelamounté armazenado como inteiro em centavos, evitando problemas de precisão monetáriacnpjé armazenado como string sem máscara, preservando zeros à esquerdaauthorized_atrepresenta a data de análise do pagamento, separando o registro da decisãorejection_reasoné preenchido apenas em rejeições- foram adicionados índices nos campos mais utilizados nas consultas principais
O requisito original do botão “Consultar” no histórico foi adaptado para filtros reativos. Nesta implementação, a listagem é atualizada automaticamente ao alterar os filtros, reduzindo fricção na interface e melhorando a experiência de uso.