Packages

Jaya Currency Converter is a converter exchange

Current section

Files

Jump to
jaya_currency_converter docs readme.html
Raw

docs/readme.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="generator" content="ExDoc v0.26.0">
<meta name="project" content="Currency Converter v0.1.0">
<title>JayaCurrencyConverter — Currency Converter v0.1.0</title>
<link rel="stylesheet" href="dist/elixir-b5076885a795c65e636c.css" />
<script src="dist/sidebar_items-b06e806963.js"></script>
<script src="docs_config.js"></script>
<script async src="dist/app-a404e1e870b77c874f9e.js"></script>
</head>
<body data-type="extras">
<script>
try {
if (localStorage.getItem('night-mode') === 'true') {
document.body.classList.add('night-mode');
}
} catch (error) { }
</script>
<div class="main">
<button class="sidebar-button sidebar-toggle">
<span class="icon-menu" title="Collapse/expand sidebar"></span>
</button>
<section class="sidebar">
<form class="sidebar-search" action="search.html">
<button type="submit" class="search-button" aria-label="Submit Search">
<span class="icon-search" aria-hidden="true" title="Submit search"></span>
</button>
<button type="button" tabindex="-1" class="search-close-button" aria-label="Cancel Search">
<span class="icon-cross" aria-hidden="true" title="Cancel search"></span>
</button>
<label class="search-label">
<input name="q" type="text" class="search-input" placeholder="Search..." aria-label="Input your search terms" autocomplete="off" />
</label>
</form>
<div class="autocomplete">
<div class="autocomplete-results">
</div>
</div>
<div class="sidebar-header">
<div class="sidebar-projectDetails">
<a href="readme.html" class="sidebar-projectName" translate="no">
Currency Converter
</a>
<strong class="sidebar-projectVersion" translate="no">
v0.1.0
</strong>
</div>
<a href="readme.html">
<img src="assets/logo.png" alt="Currency Converter" class="sidebar-projectImage">
</a>
</div>
<ul class="sidebar-listNav">
<li><a id="extras-list-link" href="#full-list">Pages</a></li>
<li><a id="modules-list-link" href="#full-list">Modules</a></li>
</ul>
<div class="gradient"></div>
<ul id="full-list" class="sidebar-fullList"></ul>
</section>
<section class="content">
<div class="content-outer">
<div id="content" class="content-inner">
<h1 id="content">
JayaCurrencyConverter
<a href="https://github.com/franknfjr/jaya_currency_converter/blob/v0.1.0/README.md#L1" title="View Source" class="view-source" rel="help">
<span class="icon-code" aria-hidden="true"></span>
<span class="sr-only">View Source</span>
</a>
</h1>
<img src="https://github.com/franknfjr/jaya_currency_converter/blob/development/assets/jaya_currency_converter.png" width="250" alt="JayaCurrencyConverter"/><p><a href="https://github.com/franknfjr/jaya_currency_converter/actions?query=workflow%3ACI"><img src="https://github.com/franknfjr/jaya_currency_converter/actions/workflows/ci.yml/badge.svg" alt="CI"/></a>
<a href="https://github.com/franknfjr/jaya_currency_converter/actions?query=workflow%3ACD"><img src="https://github.com/franknfjr/jaya_currency_converter/actions/workflows/cd.yml/badge.svg" alt="CD"/></a>
<a href="https://coveralls.io/github/franknfjr/jaya_currency_converter"><img src="https://coveralls.io/repos/github/franknfjr/jaya_currency_converter/badge.svg" alt="Coverage Status"/></a>
<a href="https://hexdocs.pm/jaya_currency_converter/0.1.0/readme.html"><img src="https://img.shields.io/badge/docs-latest-green.svg?style=flat-square" alt="hexdocs.pm"/></a> </p><p>A aplicação conversor de moedas é uma API REST, chamada Jaya Currency Converter, com objetivo de converter valores de uma moeda de origem para uma moeda de destino.</p><p>Você pode fazer a conversão nas seguintes moedas:</p><ul><li>Real brasileiro</li><li>Dólar americano</li><li>Euro</li><li>Iene japonês</li></ul><p>As moedas serão referidas com o <a href="https://pt.wikipedia.org/wiki/ISO_4217">padrão internacional</a> para facilitar a explicação.</p><h2 id="informacoes-tecnicas" class="section-heading">
<a href="#informacoes-tecnicas" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
Informacoes Tecnicas
</h2>
<p>O projeto foi criado todo na linguagem <a href="https://elixir-lang.org/">Elixir</a> na versão 1.11.4 utilizando o framwork <a href="https://www.phoenixframework.org/">Phoenix</a> versão 1.5.13.</p><p>Para fazer as taxas de conversão foi utilizado a API do <a href="https://exchangeratesapi.io/documentation/">Exchangeratesapi.io</a></p><p>Para a persistência dos dados foi utilizado o PostgreSQL.</p><p>Outras bibliotecas que foram utilizadas:</p><ul><li><a href="https://github.com/rrrene/credo">credo</a> para garantir qualidade</li><li><a href="https://github.com/nccgroup/sobelow">sobelow</a> para checar as vulnerabilities do projeto</li><li><a href="https://github.com/parroty/excoveralls">excoveralls</a> manter a cobertura e relatório de testes</li><li><a href="https://github.com/teamon/tesla">tesla</a> cliente HTTP para fazer requisições</li><li>Arquivos <a href="license.html">licença</a> e <a href="changelog.html">changelog</a> como documentação e qualidade de entrega</li></ul><h2 id="instalação" class="section-heading">
<a href="#instalação" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
Instalação
</h2>
<p>Execute os seguintes comandos:</p><pre><code class="makeup sh"><span class="">git clone https://github.com/franknfjr/jaya_currency_converter
</span><span class="">cd jaya_currency_converter
</span></code></pre><p>Após entrar no diretório, existe um arquivo <code class="inline">.env.sample</code> que é obrigatório inserir o valor da API_KEY para carregar em variáveis de ambiente.</p><p>Caso você não tenha uma API_KEY, é preciso se registrar no <a href="https://manage.exchangeratesapi.io/signup/free">site</a></p><p>Altere o arquivo <code class="inline">.env.sample</code> para <code class="inline">.env</code></p><p>Execute o seguinte comando:</p><pre><code class="makeup sh"><span class="">source .env
</span></code></pre><p>Feito isso podemos fazer a compilação e excução da aplicação, executando os seguintes comandos:</p><pre><code class="makeup sh"><span class="">mix deps.get
</span><span class="">mix ecto.create &amp;&amp; mix ecto.migrate
</span></code></pre><h2 id="funcionamento" class="section-heading">
<a href="#funcionamento" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
Funcionamento
</h2>
<p>Para início, vamos observar todas nossas rotas executando o comando:</p><pre><code class="makeup sh"><span class="">mix phx.routes
</span></code></pre><table><thead><tr><th style="text-align: left;">Metodo</th><th style="text-align: left;">endpoint</th><th style="text-align: left;">descrição</th><th style="text-align: left;">valores que podem ser passados para os parametros</th></tr></thead><tbody><tr><td style="text-align: left;">GET</td><td style="text-align: left;">/</td><td style="text-align: left;">exibe o texto #JayaCurrencyConverter</td><td style="text-align: left;"></td></tr><tr><td style="text-align: left;">GET</td><td style="text-align: left;">/api/users</td><td style="text-align: left;">lita todos usuarios</td><td style="text-align: left;"></td></tr><tr><td style="text-align: left;">GET</td><td style="text-align: left;">/api/users/:id</td><td style="text-align: left;">lista um usuario específico</td><td style="text-align: left;"><code class="inline">id</code></td></tr><tr><td style="text-align: left;">POST</td><td style="text-align: left;">/api/users</td><td style="text-align: left;">esse endpoint cria um usuario</td><td style="text-align: left;"><code class="inline">name</code></td></tr><tr><td style="text-align: left;">GET</td><td style="text-align: left;">/api/users/:user_id/transactions</td><td style="text-align: left;">lista todas transações de um usuário</td><td style="text-align: left;"><code class="inline">user_id</code></td></tr><tr><td style="text-align: left;">GET</td><td style="text-align: left;">/api/users/:user_id/transactions/:id</td><td style="text-align: left;">lista uma transação específica de um usuário</td><td style="text-align: left;"><code class="inline">user_id</code>, <code class="inline">id</code></td></tr><tr><td style="text-align: left;">POST</td><td style="text-align: left;">/api/users/:user_id/transactions</td><td style="text-align: left;">cria uma transação</td><td style="text-align: left;"><code class="inline">user_id</code>, <code class="inline">amount</code>, <code class="inline">currency_from</code>, <code class="inline">currency_to</code></td></tr></tbody></table><table><thead><tr><th style="text-align: left;">⚠️</th><th style="text-align: left;">Todos os campos <code class="inline">id</code> seguem o format de <a href="https://pt.wikipedia.org/wiki/Identificador_%C3%BAnico_universal">UUID</a></th></tr></thead><tbody></tbody></table><p>Agora execute o comando para iniciar a aplicação.</p><pre><code class="makeup bash"><span class="">mix phx.server
</span></code></pre><p>Abaixo, alguns exemplos de chamadas que serão feitas nessa API:</p><p>POST <code class="inline">/api/users</code></p><pre><code class="makeup sh"><span class="">curl --request POST \
</span><span class=""> --url http://localhost:4000/api/users \
</span><span class=""> --header &#39;Content-Type: application/json&#39; \
</span><span class=""> --data &#39;{
</span><span class=""> &quot;user&quot;: {
</span><span class=""> &quot;name&quot;: &quot;Frank&quot;
</span><span class=""> }
</span><span class="">}&#39;
</span></code></pre><p>O código HTTP de retorno deve ser 201 e o corpo esperado na resposta é:</p><pre><code class="json">{
&quot;created_at&quot;: &quot;2021-12-24T14:46:52&quot;,
&quot;id&quot;: &quot;f4e456d0-78f1-42ba-a3ee-af9440923074&quot;,
&quot;name&quot;: &quot;Frank&quot;
}</code></pre><p>GET <code class="inline">/api/users</code></p><pre><code class="makeup sh"><span class="">curl --request GET \
</span><span class=""> --url http://localhost:4000/api/users \
</span><span class=""> --header &#39;Content-Type: application/json&#39;
</span></code></pre><p>O código HTTP de retorno deve ser 200 e o corpo esperado na resposta é:</p><pre><code class="json">[
{
&quot;created_at&quot;: &quot;2021-12-24T14:44:38&quot;,
&quot;id&quot;: &quot;e4fd3017-33f8-43e7-98ed-2ed388dcfab0&quot;,
&quot;name&quot;: &quot;Frank&quot;
}
]</code></pre><p>POST <code class="inline">/api/users/:user_id/transactions</code></p><pre><code class="makeup sh"><span class="">curl --request POST \
</span><span class=""> --url http://localhost:4000/api/users/0d522e67-3239-4105-a534-df47ac541bf0/transactions \
</span><span class=""> --header &#39;Content-Type: application/json&#39; \
</span><span class=""> --data &#39;{
</span><span class=""> &quot;transaction&quot;: {
</span><span class=""> &quot;amount&quot;: 12,
</span><span class=""> &quot;currency_from&quot;: &quot;BRL&quot;,
</span><span class=""> &quot;currency_to&quot;: &quot;USD&quot;
</span><span class=""> }
</span><span class="">}&#39;
</span></code></pre><p>O código HTTP de retorno deve ser 201 e o corpo esperado na resposta é:</p><pre><code class="json">{
&quot;amount&quot;: &quot;12&quot;,
&quot;amount_to&quot;: 2.1142,
&quot;created_at&quot;: &quot;2021-12-24T14:54:10&quot;,
&quot;currency_from&quot;: &quot;BRL&quot;,
&quot;currency_to&quot;: &quot;USD&quot;,
&quot;id&quot;: &quot;bde63d46-f074-4ad1-bba8-2afdc7c8f746&quot;,
&quot;rate&quot;: &quot;1.13208&quot;,
&quot;user_id&quot;: &quot;0d522e67-3239-4105-a534-df47ac541bf0&quot;
}</code></pre><p>GET <code class="inline">/api/users/:user_id/transactions</code></p><pre><code class="makeup sh"><span class="">curl --request GET \
</span><span class=""> --url http://localhost:4000/api/users/ab0f5215-42ca-45b2-a66d-2f8e44537a29/transactions \
</span><span class=""> --header &#39;Content-Type: application/json&#39;
</span></code></pre><p>O código HTTP de retorno deve ser 200 e o corpo esperado na resposta é:</p><pre><code class="json">[
{
&quot;amount&quot;: &quot;12&quot;,
&quot;amount_to&quot;: null,
&quot;created_at&quot;: &quot;2021-12-24T14:59:11&quot;,
&quot;currency_from&quot;: &quot;BRL&quot;,
&quot;currency_to&quot;: &quot;USD&quot;,
&quot;id&quot;: &quot;d29fd494-35eb-42d1-b91b-85257ef2af86&quot;,
&quot;rate&quot;: &quot;1.13208&quot;,
&quot;user_id&quot;: &quot;ab0f5215-42ca-45b2-a66d-2f8e44537a29&quot;
}
]</code></pre><h2 id="deploy" class="section-heading">
<a href="#deploy" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
Deploy
</h2>
<p>A aplicação está no <a href="https://www.gigalixir.com/">Gigalixir</a> no endereço <a href="https://jayacurrencyconverter.gigalixirapp.com.">https://jayacurrencyconverter.gigalixirapp.com.</a> Um dos motivos de utilizar o serviçõ é que não tem sleeps da aplicação no plano free.</p><h2 id="licença" class="section-heading">
<a href="#licença" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
Licença
</h2>
<p>Copyright (c) 2021, Frank Ferreira.</p><p>JayaCurrencyConverter is <a href="license.html">MIT licensed</a></p>
<div class="bottom-actions">
<div class="bottom-actions-item">
<a href="api-reference.html" class="bottom-actions-button" rel="prev">
<span class="subheader">
← Previous Page
</span>
<span class="title">
API Reference
</span>
</a>
</div>
<div class="bottom-actions-item">
<a href="changelog.html" class="bottom-actions-button" rel="next">
<span class="subheader">
Next Page →
</span>
<span class="title">
Changelog
</span>
</a>
</div>
</div>
<footer class="footer">
<p>
Find it on Hex:
<a href="https://hex.pm/packages/jaya_currency_converter/0.1.0" class="line footer-hex-package">Package</a>
<a href="https://preview.hex.pm/preview/jaya_currency_converter/0.1.0" class="line">Preview</a>
<a href="https://preview.hex.pm/preview/jaya_currency_converter/0.1.0/show/README.md">(current file)</a>
</p>
<p>
<span class="line">
Built using
<a href="https://github.com/elixir-lang/ex_doc" title="ExDoc" target="_blank" rel="help noopener" translate="no">ExDoc</a> (v0.26.0) for the
<a href="https://elixir-lang.org" title="Elixir" target="_blank" translate="no">Elixir programming language</a>.
</span>
<span class="line">
Designed by
<a href="https://twitter.com/dignifiedquire" target="_blank" rel="noopener" title="@dignifiedquire" translate="no">Friedel Ziegelmayer</a>.
</span>
</p>
<p>
<a href="api-reference.html" title="API reference" class="line footer-button">API Reference</a>
<button class="line footer-button display-shortcuts-help">
Display keyboard shortcuts
</button>
<button class="line footer-button display-quick-switch">
Go to a HexDocs package
</button>
<button class="line footer-button display-settings">
Settings
</button>
</p>
</footer>
</div>
</div>
</section>
</div>
</body>
</html>