Você deverá implementar uma aplicação que permita a conversão de valores entre moedas, utilizando Ruby on Rails como backend e Vue.js como frontend (opcional).
Importante: Caso o candidato não possua familiaridade com Vue.js, a entrega pode ser feita exclusivamente com Rails e APIs RESTful.
-
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 oficial: https://currencyapi.com/docs
- A API gratuita requer autenticação com chave e retorna taxas baseadas na moeda desejada.
-
A aplicação deve persistir cada transação realizada, contendo:
- ID do usuário
- Moeda de origem e destino
- Valor de origem
- Valor convertido (destino)
- Taxa de conversão
- Data/Hora UTC
-
As transações devem estar disponíveis via endpoint:
GET /transactions?user_id=123
-
Uma transação de sucesso deve retornar:
{ "transaction_id": 42, "user_id": 123, "from_currency": "USD", "to_currency": "BRL", "from_value": 100, "to_value": 525.32, "rate": 5.2532, "timestamp": "2024-05-19T18:00:00Z" } -
Casos de falha devem retornar status HTTP adequado e mensagem de erro clara.
-
O projeto deve conter testes unitários e de integração.
-
O repositório deve incluir um README.md com:
- Instruções para rodar o projeto
- Explicação do propósito
- Principais decisões de arquitetura
- Como os dados estão organizados (separação de camadas)
-
O código deve estar todo em inglês.
-
O projeto deve ser entregue via repositório no GitHub.
- Logs
- Tratamento de exceções personalizado
- Documentação da API (Swagger, Rswag, Postman, etc.)
- Coesão de commits e mensagens descritivas
- Configuração de linters (Rubocop, ESLint, etc.)
- Deploy funcional (Heroku, Fly.io, etc.)
- Integração contínua (CI/CD com GitHub Actions ou similar)
- Testes de ponta a ponta se usar Vue.js (Cypress, Playwright)
- Ruby on Rails 7+
- PostgreSQL ou SQLite
- Faraday ou HTTParty para chamadas externas
- RSpec para testes
- Vue.js 3 + TypeScript
- Axios
- Pinia ou Vuex (opcional)
- TailwindCSS (opcional)
- Familiaridade com AWS (EC2, RDS, S3)
- Capacidade de discutir arquitetura e otimização de custos
- Experiência com CI/CD
- Excelente comunicação em inglês
- Proatividade e interesse em produto
- Participação em decisões técnicas com o time de produto e dados
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.mdcom decisões técnicas, ideias descartadas e sugestões de melhoria.
- Caso utilize algum recurso pago (ex: API, hospedagem), informe alternativas gratuitas no README.
- Encorajamos entregas que demonstrem pensamento crítico sobre performance, qualidade de código e arquitetura.
- Se tiver sugestões ou dúvidas, registre no README como "Considerações finais".
Boa sorte! 🚀