{"id":22226384,"url":"https://github.com/trkotovicz/exchange-api","last_synced_at":"2026-04-13T14:31:21.835Z","repository":{"id":155118822,"uuid":"614673068","full_name":"trkotovicz/exchange-api","owner":"trkotovicz","description":"API Rest que realiza a conversão entre duas moedas utilizando taxas de conversões atualizadas de um serviço externo","archived":false,"fork":false,"pushed_at":"2023-05-19T01:30:42.000Z","size":137,"stargazers_count":0,"open_issues_count":1,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-06-03T23:48:55.204Z","etag":null,"topics":["ci-cd","docker","expressjs","integration-testing","jwt-authentication","mocha-chai","model-service-controller","msc-project","nodejs","railway","sequelize-orm","sinon","solid","sqlite3","swagger","typescript","unit-testing"],"latest_commit_sha":null,"homepage":"https://exchange-api.onrender.com","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/trkotovicz.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-03-16T04:26:10.000Z","updated_at":"2023-05-19T01:27:02.000Z","dependencies_parsed_at":null,"dependency_job_id":"fd1649c1-4975-47d9-abba-ba01619432cb","html_url":"https://github.com/trkotovicz/exchange-api","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/trkotovicz/exchange-api","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trkotovicz%2Fexchange-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trkotovicz%2Fexchange-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trkotovicz%2Fexchange-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trkotovicz%2Fexchange-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/trkotovicz","download_url":"https://codeload.github.com/trkotovicz/exchange-api/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trkotovicz%2Fexchange-api/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31757477,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-13T13:27:56.013Z","status":"ssl_error","status_checked_at":"2026-04-13T13:21:23.512Z","response_time":93,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ci-cd","docker","expressjs","integration-testing","jwt-authentication","mocha-chai","model-service-controller","msc-project","nodejs","railway","sequelize-orm","sinon","solid","sqlite3","swagger","typescript","unit-testing"],"created_at":"2024-12-03T00:28:24.974Z","updated_at":"2026-04-13T14:31:21.768Z","avatar_url":"https://github.com/trkotovicz.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Conversor de moedas\n\nEssa aplicação é uma API Rest capaz de realizar a conversão entre duas moedas utilizando taxas de conversões atualizadas de um serviço externo [(API Free)](https://apilayer.com/marketplace/exchangerates_data-api?utm_source=apilayermarketplace\u0026utm_medium=featured), para consumir dessa API é necessário fazer um cadastro e gerar uma API_KEY.\n\nPara realizar a conversão é necessário o ID do usuário que deseja realizar a conversão. Por isso, é preciso estar logado para poder realizar uma transação de conversão de moeda.\u003c/br\u003e\nA API registra cada transação de conversão com todas as informações relacionadas e também disponibilizar um endpoint para consulta das transações realizadas por um usuário.\n\n## Ferramentas utilizadas\n\nA aplicação segue os princípios do SOLID e foi desenvolvida no modelo de camadas MSC (Model-Service-Conntroller) em Node.js, utilizando Typescript, Express.js, banco de dados SQLite, ORM Sequelize, e Swagger para a documentação. Tem autenticação de usuário dom Json Web Token (JWT). Além disso, é possível rodar a aplicação pelo Docker.\u003c/br\u003e\nPara os testes unitários e de integração, foi utilizado Mocha, Chai e Sinon.\u003c/br\u003e\nPara deploy da aplicação, foi utilizado o [Render](exchange-api.onrender.com).\n\n## Inicialização da Aplicação\n\n### Inicialização via Docker 🐳\n\n1. Clone o repositório `git@github.com:trkotovicz/exchange-api.git`.\n2. Na raíz do repositório, abra o terminal e rode o comando `npm run compose:up` e aguarde a alicação subir (esse passo pode demorar um pouco).\n3. Para encerrar a aplicação, rode o comando `npm run compose:down`.\n\n### Inicialização local 🖥\n\n1. Clone o repositório `git@github.com:trkotovicz/exchange-api.git`.\n2. Na raíz do repositório instale as dependências e inicialize o projeto com o comando `npm start`.\n3. Abra o navegador no endereço `http://localhost:3001/docs/#/` para testar a API.\n\n## Testes\n\nPara testar a aplicação, depois de ter instalado as dependências, basta abrir o terminal na raíz do repositório e rodar o comando `npm test` ou `npm run test`.\n\n## API\n\nCom a aplicação rodando acesse a [documentação da API](http://localhost:3001/docs/#/). \u003c/br\u003e\n\n## Utilização da Aplicação\n\n1. Crie o arquivo `.env` na pasta raíz e informe a sua `API_KEY`.\n2. Para utilizar a aplicação, e necessário criar um novo usuário. Para isso, acesse a rota `/user` e informe `username` e `password`.\n3. Acesse a rota `/login` e informe os dados de usuário criados anteriormente.\n4. Para acessar as rotas de conversão `/exchange`, é necessário informar no headers da sua requisição o token gerado no login.\n5. Para acessar todas as transações feitas pelo usuário,  acesse a rota `/exchange/user` informando o token.\n\n*Nota: A sua primeira requisição de conversão pode demorar um pouquinho para retornar, pois ele busca as taxas de todas as moedas disponíveis na API externa.\n\n## Melhorias Futuras\n\n- Corrigir o erro de deploy no Render (está retornando um erro de token inválido ao tentar acessar a aplicação).\n- Adicionar um fluxo de entrega contínua (CI/CD).\n- Melhorar os testes unitários e de integração da aplicação.\n\n## Itens desejáveis\n\n - [x]  Logs\n - [x] Tratamento de exceções\n - [x]  Documentação\n - [x]  Coesão de commits\n - [x]  Mensagens de commits claras\n - [x]  Configuração de lint\n - [x]  Testes unitários\n - [x] Testes de integração\n - [x] Documentação dos endpoints\n - [x] Estar rodando e disponível (Ex: Heroku, ou similar)\n - [X] CI/CD\n \n ---\n\nProjeto desenvolvido por [Thais R Kotovicz](https://www.linkedin.com/in/thaiskotovicz/).\n\u003c/br\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftrkotovicz%2Fexchange-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftrkotovicz%2Fexchange-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftrkotovicz%2Fexchange-api/lists"}