Você deverá implementar uma aplicação que permita a conversão de valores entre moedas, utilizando Python com FastAPI no backend. O frontend pode ser opcionalmente implementado em Vue.js ou React.
Importante: Caso você não tenha experiência com frontend, a entrega pode ser feita exclusivamente com a API.
-
A API deve permitir a conversão entre pelo menos 4 moedas:
- BRL (Real)
- USD (Dólar Americano)
- EUR (Euro)
- JPY (Iene)
-
As taxas de câmbio devem ser obtidas da API:
- https://app.currencyapi.com/
- Documentação: https://currencyapi.com/docs
Cada transação realizada deve ser registrada com as seguintes informações:
- ID do usuário
- Moeda de origem e destino
- Valor de origem
- Valor convertido
- Taxa de conversão
- Data/Hora UTC
GET /transactions?userId=123
{
"transactionId": 42,
"userId": 123,
"fromCurrency": "USD",
"toCurrency": "BRL",
"fromValue": 100,
"toValue": 525.32,
"rate": 5.2532,
"timestamp": "2024-05-19T18:00:00Z"
}
Deverão retornar:
- Código HTTP apropriado
- Mensagem de erro clara e objetiva
- A aplicação deve conter testes unitários e de integração com
pytest
Deve conter:
- Instruções para executar o projeto
- Explicação do propósito
- Principais decisões de arquitetura
- Organização das camadas (ex: routers, services, repositories, models)
- O conteúdo deve estar todo em inglês
- Logs estruturados (ex:
loguru
,structlog
) - Tratamento de exceções com middlewares
- Documentação automática (Swagger já embutido no FastAPI)
- Linter (ex:
ruff
,black
,flake8
) - Deploy funcional (ex: Render, Railway, Fly.io)
- CI/CD com GitHub Actions
- Vue.js 3 + TypeScript ou React + TypeScript
- TailwindCSS
- Axios
- Testes com Cypress, RTL ou Vitest
- Python 3.10+
- FastAPI
- SQLAlchemy 2.x ou Tortoise ORM
- PostgreSQL ou SQLite
- Pytest
- Boas práticas REST
- Arquitetura limpa e escalável
- Conhecimentos em AWS são diferenciais
- Experiência com CI/CD
- Boa comunicação e clareza de código
Para padronizar a entrega e facilitar a análise:
- Faça um fork deste repositório para sua conta pessoal do GitHub.
- Crie uma branch com seu nome em snake_case (exemplo:
joao_silva_souza
). - Suba sua solução utilizando commits organizados e descritivos.
- Após finalizar:
- Certifique-se de que o repositório esteja público
- Envie o link do seu fork para nossa equipe com:
- Título:
Entrega - joao_silva_souza
- Descrição: Nome completo, data da entrega e quaisquer observações que julgar relevantes.
- Título:
✅ Dica: Você pode incluir um arquivo
THOUGHTS.md
com decisões técnicas, ideias descartadas e sugestões de melhoria.
- Cite alternativas gratuitas caso use serviços pagos
- Clareza, boas práticas e organização serão avaliadas
- Pode adicionar um
THOUGHTS.md
com decisões técnicas e observações
Boa sorte! 🚀