<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
  xmlns:atom="http://www.w3.org/2005/Atom"
  xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>DevLog</title>
    <link>http://devlog.com.br/</link>
    <atom:link href="/feed.xml" rel="self" type="application/rss+xml"/>
    
    <description></description>
    <pubDate>Sun, 22 Apr 2018 16:43:36 GMT</pubDate>
    <generator>http://hexo.io/</generator>
    
    <item>
      <title>Obtendo Informações de Outras Linhas no Mesmo Select</title>
      <link>http://devlog.com.br/sql-next-rows/</link>
      <guid>http://devlog.com.br/sql-next-rows/</guid>
      <pubDate>Sun, 22 Apr 2018 16:41:30 GMT</pubDate>
      <description>
      
        
        
          &lt;h1 id=&quot;Obter-Informacoes-de-Outras-Linhas-no-Mesmo-Select&quot;&gt;&lt;a href=&quot;#Obter-Informacoes-de-Outras-Linhas-no-Mesmo-Select&quot; class=&quot;headerlink&quot;
        
      
      </description>
      
      <content:encoded><![CDATA[<h1 id="Obter-Informacoes-de-Outras-Linhas-no-Mesmo-Select"><a href="#Obter-Informacoes-de-Outras-Linhas-no-Mesmo-Select" class="headerlink" title="Obter Informações de Outras Linhas no Mesmo Select"></a>Obter Informações de Outras Linhas no Mesmo Select</h1><p>Tendo um banco de dados para controle de despesas:</p><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">select</span> * <span class="keyword">from</span> despesas</span><br></pre></td></tr></table></figure><table><thead><tr><th>id</th><th>valor</th><th>descricao     </th></tr></thead><tbody><tr><td>1</td><td>12,00</td><td>Almoço         </td></tr><tr><td>2</td><td>150,00</td><td>Gasolina       </td></tr><tr><td>3</td><td>30,00</td><td>Jantar         </td></tr><tr><td>4</td><td>61,00</td><td>Conta de água  </td></tr><tr><td>5</td><td>180,00</td><td>Conta de Luz   </td></tr><tr><td>6</td><td>100,00</td><td>Internet    </td></tr></tbody></table><p>Agora queremos exibir na mesma consulta, a despesa anterior, a atual e a próxima despesa do mês.<br>Para isso precisamos saber qual o valor da linha anterior e o valor da linha posterior do select.</p><p>Para isso precisamos fazer LEFT JOIN com a própria tabela. Veja o exemplo:</p><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">select</span> </span><br><span class="line">    prev.descricao <span class="keyword">as</span> DESPESA_ANTERIOR,</span><br><span class="line">    main.descricao DESPESA_ATUAL,</span><br><span class="line">    next.descricao <span class="keyword">as</span> DESPESA_POSTERIOR</span><br><span class="line"><span class="keyword">from</span> </span><br><span class="line">    despesas <span class="keyword">main</span> </span><br><span class="line">    <span class="keyword">left</span> <span class="keyword">join</span> despesas <span class="keyword">next</span> <span class="keyword">on</span> main.id = next.id - <span class="number">1</span></span><br><span class="line">    <span class="keyword">left</span> <span class="keyword">join</span> despesas prev <span class="keyword">on</span> main.id = prev.id + <span class="number">1</span></span><br><span class="line">    <span class="keyword">order</span> <span class="keyword">by</span> main.dia;</span><br></pre></td></tr></table></figure><p>Resultado:</p><table><thead><tr><th>DESPESA_ANTERIOR</th><th>DESPESA_ATUAL</th><th>DESPESA_POSTERIOR</th></tr></thead><tbody><tr><td>(null)</td><td>Almoço</td><td>Gasolina</td></tr><tr><td>Almoço</td><td>Gasolina</td><td>Jantar</td></tr><tr><td>Gasolina</td><td>Jantar</td><td>Conta de água</td></tr><tr><td>Jantar</td><td>Conta de água</td><td>Conta de luz</td></tr><tr><td>Conta de água</td><td>Conta de luz</td><td>Internet</td></tr><tr><td>Conta de luz</td><td>Internet</td><td>(null)</td></tr></tbody></table><p>Para saber as despesas anterioes e posteriores ao dia 3:</p><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">select</span> </span><br><span class="line">    prev.descricao <span class="keyword">as</span> DESPESA_ANTERIOR,</span><br><span class="line">    main.descricao DESPESA_ATUAL,</span><br><span class="line">    next.descricao <span class="keyword">as</span> DESPESA_POSTERIOR</span><br><span class="line"><span class="keyword">from</span> </span><br><span class="line">    despesas <span class="keyword">main</span> </span><br><span class="line">    <span class="keyword">left</span> <span class="keyword">join</span> despesas <span class="keyword">next</span> <span class="keyword">on</span> main.id = next.id - <span class="number">1</span></span><br><span class="line">    <span class="keyword">left</span> <span class="keyword">join</span> despesas prev <span class="keyword">on</span> main.id = prev.id + <span class="number">1</span></span><br><span class="line">    <span class="keyword">where</span></span><br><span class="line">        main.dia = <span class="number">3</span></span><br><span class="line">    <span class="keyword">order</span> <span class="keyword">by</span> main.dia;</span><br></pre></td></tr></table></figure><p>Resultado:</p><table><thead><tr><th>DESPESA_ANTERIOR</th><th>DESPESA_ATUAL</th><th>DESPESA_POSTERIOR</th></tr></thead><tbody><tr><td>Gasolina</td><td>Jantar</td><td>Conta de água</td></tr></tbody></table>]]></content:encoded>
      
      <comments>http://devlog.com.br/sql-next-rows/#disqus_thread</comments>
    </item>
    
    <item>
      <title>VS Code - Debugando módulos instalados em node_modules</title>
      <link>http://devlog.com.br/debug-vscode-node-modules/</link>
      <guid>http://devlog.com.br/debug-vscode-node-modules/</guid>
      <pubDate>Sun, 22 Apr 2018 16:41:30 GMT</pubDate>
      <description>
      
        
        
          &lt;h1 id=&quot;VSCode-Debugando-modulos-instalados-em-node-modules&quot;&gt;&lt;a href=&quot;#VSCode-Debugando-modulos-instalados-em-node-modules&quot; class=&quot;headerlin
        
      
      </description>
      
      <content:encoded><![CDATA[<h1 id="VSCode-Debugando-modulos-instalados-em-node-modules"><a href="#VSCode-Debugando-modulos-instalados-em-node-modules" class="headerlink" title="VSCode: Debugando módulos instalados em node_modules"></a>VSCode: Debugando módulos instalados em node_modules</h1><p>Para debugar códigos que estão na pasta node_modules, basta informar no <strong>launch.json</strong>, na propriedade <strong>outFiles</strong>, o caminho dos arquivos que o debugger deve colocar no seu escopo.</p><p>Pode exemplo, se quizermos que o debugger pare em algum breakpoint no módulo express:</p><figure class="highlight"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line">&#123;</span><br><span class="line">    // Use IntelliSense to learn about possible Node.js debug attributes.</span><br><span class="line">    // Hover to view descriptions of existing attributes.</span><br><span class="line">    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387</span><br><span class="line">    "version": "0.2.0",</span><br><span class="line">    "configurations": [</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="attr">"type"</span>: <span class="string">"node"</span>,</span><br><span class="line">            <span class="attr">"request"</span>: <span class="string">"launch"</span>,</span><br><span class="line">            <span class="attr">"name"</span>: <span class="string">"Launch Program"</span>,</span><br><span class="line">            <span class="attr">"program"</span>: <span class="string">"$&#123;workspaceRoot&#125;/dist/main.js"</span>,</span><br><span class="line">            <span class="attr">"sourceMaps"</span>: <span class="literal">true</span>,</span><br><span class="line">            <span class="attr">"outFiles"</span>: [</span><br><span class="line">                <span class="string">"$&#123;workspaceRoot&#125;/node_modules/express/lib/**/*.js"</span></span><br><span class="line">            ],</span><br><span class="line">            <span class="attr">"console"</span>: <span class="string">"integratedTerminal"</span></span><br><span class="line">        &#125;</span><br><span class="line">    ]</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>O trecho abaixo faz com que o debugger do node inclua todos arquivos javascript da pasta lib do módulo express, assim podemos colocar breakpoints neles.</p><figure class="highlight"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">&#123;</span><br><span class="line">    ...</span><br><span class="line">    "outFiles": [</span><br><span class="line">        <span class="string">"$&#123;workspaceRoot&#125;/node_modules/express/lib/**/*.js"</span></span><br><span class="line">    ],</span><br><span class="line">    ...</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>]]></content:encoded>
      
      <comments>http://devlog.com.br/debug-vscode-node-modules/#disqus_thread</comments>
    </item>
    
    <item>
      <title>Integração Contínua com Travis CI no Repositório GitHub</title>
      <link>http://devlog.com.br/usando-travis-ci-github/</link>
      <guid>http://devlog.com.br/usando-travis-ci-github/</guid>
      <pubDate>Sun, 23 Apr 2017 16:16:00 GMT</pubDate>
      <description>
      
        
        
          &lt;p&gt;O uso de integração contínua é cada vez mais indispensável para garantir a qualidade e o de um projeto, especialmente se for opensource.&lt;
        
      
      </description>
      
      <content:encoded><![CDATA[<p>O uso de integração contínua é cada vez mais indispensável para garantir a qualidade e o de um projeto, especialmente se for opensource.</p><h2 id="O-que-e-Integracao-Continua"><a href="#O-que-e-Integracao-Continua" class="headerlink" title="O que é Integração Contínua?"></a>O que é Integração Contínua?</h2><p>Em termos simples, integração contínua é a forma de garantir que seu projeto está funcionando a cada modificação do reposítorio, commit ou build. Este processo possibilita testar e fazer build do seu projeto em várias versões de runtime ou em vários ambientes de forma frequente, garantindo a qualidade e o funcionamento daquele módulo. Por exêmplo, a cada push para o GitHub a ferramenta irá clonar o projeto, baixar as dependências e executar os testes.<br>A ferramenta de integração contínua será tão eficiente quanto os testes implementados no seu projeto. Por isso é importante ter uma boa cobertura de testes.</p><p>A ferramenta <a href="https://travis-ci.org/" target="_blank" rel="noopener">Travis CI</a> faz isso de forma fácil, rápida e simples de configurar. Para habilitar o Travis no seu repositório github é só seguir os passos a baixo.</p><h2 id="Pre-requisitos"><a href="#Pre-requisitos" class="headerlink" title="Pré-requisitos"></a>Pré-requisitos</h2><ul><li>Um projeto nodejs no github</li><li>Implementação de testes</li></ul><p>Caso queira poderá clonar ou consultar o <a href="https://github.com/DevLogger/travis-ci-example" target="_blank" rel="noopener">repositório de exemplo</a> deste post no GitHub do Devlog</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git clone git@github.com:DevLogger/travis-ci-example.git</span><br></pre></td></tr></table></figure><h2 id="Configurar-execucao-dos-testes-do-projeto-NodeJS"><a href="#Configurar-execucao-dos-testes-do-projeto-NodeJS" class="headerlink" title="Configurar execução dos testes do projeto NodeJS"></a>Configurar execução dos testes do projeto NodeJS</h2><p>O Travis CI roda por padrão o comando <strong>npm test</strong> para executar os testes do projeto.<br>Configure o sript <strong>test</strong> no seu <strong>package.json</strong> para executar os testes com sua ferramenta preferida. No exemplo abaixo usamos o <a href="https://mochajs.org/#getting-started" target="_blank" rel="noopener">Mocha</a> para execução dos testes.</p><figure class="highlight"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">"scripts": &#123;</span><br><span class="line">    "test": "mocha"</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="Criar-arquivo-travis-yml-na-raiz-do-projeto"><a href="#Criar-arquivo-travis-yml-na-raiz-do-projeto" class="headerlink" title="Criar arquivo .travis.yml na raiz do projeto"></a>Criar arquivo .travis.yml na raiz do projeto</h2><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">language:</span> <span class="string">node_js</span></span><br><span class="line"><span class="attr">node_js:</span></span><br><span class="line"><span class="bullet">  -</span> <span class="string">"5"</span></span><br><span class="line"><span class="bullet">  -</span> <span class="string">"6"</span></span><br><span class="line"><span class="bullet">  -</span> <span class="string">"7"</span></span><br></pre></td></tr></table></figure><p>O campo <strong><em>node_js</em></strong> indica para quais versões do NodeJS queremos que o Travis CI rode o processo de integração contínua. Neste caso ele fará o build e rodará os testes 3 vezes: uma para versão 5, outra para versão 6 e outra para a versão 7 do NodeJS.</p><p>Agora faça push de todas as alterações par ao GitHub</p><h2 id="Criar-uma-conta-no-Travis"><a href="#Criar-uma-conta-no-Travis" class="headerlink" title="Criar uma conta no Travis"></a>Criar uma conta no Travis</h2><ul><li>Acesse o site do <a href="https://travis-ci.org/" target="_blank" rel="noopener">Travis CI</a></li><li>Crie uma conta. Podemos fazer o login através da conta do GitHub</li><li>Habilite seu projeto</li></ul><h2 id="Teste"><a href="#Teste" class="headerlink" title="Teste"></a>Teste</h2><p>Agora faça uma modificação em algum arquivo, commite e faça um push para o GitHub.<br>Pronto, verifique lá no site do <a href="https://travis-ci.org/" target="_blank" rel="noopener">Travis CI</a> que ele está executando o build do seu projeto e executando os testes.</p><p>Pronto! Seu projeto já estará rodando uma Integraçao Contínua.</p><h1 id="Exibindo-Status-do-Build-no-GitHub"><a href="#Exibindo-Status-do-Build-no-GitHub" class="headerlink" title="Exibindo Status do Build no GitHub"></a>Exibindo Status do Build no GitHub</h1><ul><li><p>No site do travis clique na imagem:<br><img src="build-status.png" alt="Build Status"></p></li><li><p>Escola a opção markdown<br><img src="build-status2.png" alt="Build Status Markdown"></p></li><li><p>Coloque no seu readme.md</p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">[<span class="string">![Build Status</span>](<span class="link">https://travis-ci.org/linck/protontype.svg?branch=develop</span>)](<span class="link">https://travis-ci.org/linck/protontype</span>)</span><br><span class="line"></span><br><span class="line">Exemplo de Integração Contínua com Travis CI</span><br></pre></td></tr></table></figure></li><li><p>Resultado<br><img src="build-status3.png" alt="Build Status Resultado"></p></li></ul><p>Obs: Verifique se o parâmetro <strong>?branch=develop</strong> está apontando para branch correta</p>]]></content:encoded>
      
      <comments>http://devlog.com.br/usando-travis-ci-github/#disqus_thread</comments>
    </item>
    
    <item>
      <title>Fazendo deploy de aplicativo Ionic no Heroku</title>
      <link>http://devlog.com.br/deploy-ionic-heroku/</link>
      <guid>http://devlog.com.br/deploy-ionic-heroku/</guid>
      <pubDate>Sun, 05 Mar 2017 16:16:30 GMT</pubDate>
      <description>
      
        
        
          &lt;p&gt;O Heroku se torna um meio muito útil e free para disponibilizar um build do app Ionic para testes em um servidor na nuvem.&lt;br&gt;Pra fazer i
        
      
      </description>
      
      <content:encoded><![CDATA[<p>O Heroku se torna um meio muito útil e free para disponibilizar um build do app Ionic para testes em um servidor na nuvem.<br>Pra fazer isso basta seguir os passos abaixo:</p><h1 id="Preparando-o-projeto"><a href="#Preparando-o-projeto" class="headerlink" title="Preparando o projeto"></a>Preparando o projeto</h1><ul><li>Criar um repositório no github</li><li>Criar um projeto npm com a dependência do express</li></ul><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">npm init</span><br><span class="line">npm install express --save</span><br></pre></td></tr></table></figure><ul><li>Copiar a pasta www do projeto ionic para o projeto criado</li><li>Criar um servidor em node + express para servir o index.html da pasta www</li><li>Crie um arquivo <strong>server.js</strong> na raiz do projeto:</li></ul><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> express = <span class="built_in">require</span>(<span class="string">'express'</span>),</span><br><span class="line">    app = express();</span><br><span class="line"></span><br><span class="line">app.use(express.static(<span class="string">'www'</span>));</span><br><span class="line"></span><br><span class="line"><span class="comment">// CORS (Cross-Origin Resource Sharing) headers to support Cross-site HTTP requests</span></span><br><span class="line">app.all(<span class="string">'*'</span>, <span class="function"><span class="keyword">function</span>(<span class="params">req, res, next</span>) </span>&#123;</span><br><span class="line">    res.header(<span class="string">"Access-Control-Allow-Origin"</span>, <span class="string">"*"</span>);</span><br><span class="line">    res.header(<span class="string">"Access-Control-Allow-Headers"</span>, <span class="string">"X-Requested-With"</span>);</span><br><span class="line">    next();</span><br><span class="line">&#125;);</span><br><span class="line"></span><br><span class="line">app.set(<span class="string">'port'</span>, process.env.PORT || <span class="number">5000</span>);</span><br><span class="line"></span><br><span class="line">app.listen(app.get(<span class="string">'port'</span>), <span class="function"><span class="keyword">function</span> (<span class="params"></span>) </span>&#123;</span><br><span class="line">    <span class="built_in">console</span>.log(<span class="string">'Express server listening on port '</span> + app.get(<span class="string">'port'</span>));</span><br><span class="line">&#125;);</span><br></pre></td></tr></table></figure><ul><li>Commit e push seu projeto no repositório criado</li></ul><h1 id="Fazendo-Deploy-no-Heroku"><a href="#Fazendo-Deploy-no-Heroku" class="headerlink" title="Fazendo Deploy no Heroku"></a>Fazendo Deploy no Heroku</h1><ul><li>Crie uma conta no Heroku</li><li>Acesse <a href="https://dashboard.heroku.com/" target="_blank" rel="noopener">https://dashboard.heroku.com/</a></li><li>Vá na opção new &gt; create new app</li><li>Dê um nome pro projeto e clique em “Create new app”</li><li>Na sessão “Deployment method” escolha GitHub</li><li>Escolha o projeto criado nos passos a cima</li><li>Clique em “Automatic Deploy” para fazer o deploy sempre que fizer um push</li><li>Clique em em “Deploy Branch”</li><li>Clique em View</li></ul><p>Pronto! Agora é só aproveitar</p><h1 id="Repositorio-Exemplo"><a href="#Repositorio-Exemplo" class="headerlink" title="Repositório Exemplo"></a>Repositório Exemplo</h1><p><a href="https://github.com/DevLogger/heroku-github" target="_blank" rel="noopener">https://github.com/DevLogger/heroku-github</a></p>]]></content:encoded>
      
      <comments>http://devlog.com.br/deploy-ionic-heroku/#disqus_thread</comments>
    </item>
    
    <item>
      <title>Usando Emmet Snippets no VSCode</title>
      <link>http://devlog.com.br/usando-emmet-vscode/</link>
      <guid>http://devlog.com.br/usando-emmet-vscode/</guid>
      <pubDate>Thu, 12 Jan 2017 01:52:32 GMT</pubDate>
      <description>
      
        
        
          &lt;p&gt;Você conhece o Emmet Snippets? Ele é muito legal, permite escrevermos códigos html repetitivos usando expressões simples.&lt;br&gt;O VSCode nos
        
      
      </description>
      
      <content:encoded><![CDATA[<p>Você conhece o Emmet Snippets? Ele é muito legal, permite escrevermos códigos html repetitivos usando expressões simples.<br>O VSCode nos permite usar essa maravilha, somente por escrevermos a expressão e apertamos Tab. Veja abaixo:</p><p><img src="emmet1.gif" alt="Emmet1"></p><p><img src="emmet2.gif" alt="Emmet1"></p><p>Simples não é?</p><p>Agora é só se divertir olhando a infinidade de expressões que podemos usar aqui: <a href="http://docs.emmet.io/cheat-sheet/" target="_blank" rel="noopener">http://docs.emmet.io/cheat-sheet/</a></p><p>Para saber mais:</p><ul><li><a href="http://docs.emmet.io/" target="_blank" rel="noopener">http://docs.emmet.io/</a> (Dá uma olhada no vídeo de demonstração)</li><li><a href="https://code.visualstudio.com/Docs/languages/html" target="_blank" rel="noopener">https://code.visualstudio.com/Docs/languages/html</a></li></ul>]]></content:encoded>
      
      <comments>http://devlog.com.br/usando-emmet-vscode/#disqus_thread</comments>
    </item>
    
    <item>
      <title>TypeScript - Declarando propriedades de uma classe direto no construtor</title>
      <link>http://devlog.com.br/typescript-construtor/</link>
      <guid>http://devlog.com.br/typescript-construtor/</guid>
      <pubDate>Sat, 03 Dec 2016 01:27:51 GMT</pubDate>
      <description>
      
        
        
          &lt;p&gt;No TypeScript é possivel declarar as propriedades de uma classe direto no construtor. Vamos entender melhor no exemplo.&lt;/p&gt;
&lt;p&gt;O que norm
        
      
      </description>
      
      <content:encoded><![CDATA[<p>No TypeScript é possivel declarar as propriedades de uma classe direto no construtor. Vamos entender melhor no exemplo.</p><p>O que normalmente faríamos assim:</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">Task</span> </span>&#123;</span><br><span class="line">    public title: string;</span><br><span class="line">    public done: boolean;</span><br><span class="line">    public creationDate: <span class="built_in">Date</span>;</span><br><span class="line">    public finishDate: <span class="built_in">Date</span>;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">constructor</span>(title: string, done: boolean, creationDate: Date, finishDate: Date) &#123;</span><br><span class="line">        <span class="keyword">this</span>.title = title;</span><br><span class="line">        <span class="keyword">this</span>.done = done;</span><br><span class="line">        <span class="keyword">this</span>.creationDate = creationDate;</span><br><span class="line">        <span class="keyword">this</span>.finishDate = finishDate;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">var</span> task: Task = <span class="keyword">new</span> Task(<span class="string">'My Task'</span>, <span class="literal">false</span>, <span class="keyword">new</span> <span class="built_in">Date</span>(), <span class="keyword">new</span> <span class="built_in">Date</span>());</span><br><span class="line"><span class="built_in">console</span>.log(task.title); <span class="comment">//&gt; My Task</span></span><br></pre></td></tr></table></figure><p>Podemos fazer assim:<br><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">Task</span> </span>&#123;</span><br><span class="line"> <span class="keyword">constructor</span>(public title: string, public done: boolean, public creationDate: Date, public finishDate: Date) &#123;&#125;</span><br><span class="line"></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">var</span> task: Task = <span class="keyword">new</span> Task(<span class="string">'My Task'</span>, <span class="literal">false</span>, <span class="keyword">new</span> <span class="built_in">Date</span>(), <span class="keyword">new</span> <span class="built_in">Date</span>());</span><br><span class="line"><span class="built_in">console</span>.log(task.title); <span class="comment">//&gt; My Task</span></span><br></pre></td></tr></table></figure></p><p>Simples! Resumimos o conteudo da classe em uma linha de código.</p><p><em>Obrigado <a href="https://twitter.com/plinionaves" target="_blank" rel="noopener">Plínio Naves</a> pela dica!</em></p>]]></content:encoded>
      
      <comments>http://devlog.com.br/typescript-construtor/#disqus_thread</comments>
    </item>
    
    <item>
      <title>Testando APIs REST com Postman</title>
      <link>http://devlog.com.br/testando-apis-rest-postman/</link>
      <guid>http://devlog.com.br/testando-apis-rest-postman/</guid>
      <pubDate>Sun, 20 Nov 2016 17:22:30 GMT</pubDate>
      <description>
      
        
        
          &lt;p&gt;Antes de qualquer coisa coloque esta música pra tocar &lt;a href=&quot;https://www.youtube.com/watch?time_continue=15&amp;amp;v=58VIY1gBmns&quot; target=&quot;
        
      
      </description>
      
      <content:encoded><![CDATA[<p>Antes de qualquer coisa coloque esta música pra tocar <a href="https://www.youtube.com/watch?time_continue=15&amp;v=58VIY1gBmns" target="_blank" rel="noopener">The Beatles - Mr Postman</a>. Caso prefira pode  escutar pelo <a href="https://open.spotify.com/track/5IIBY9M2GxHcVja6DA6wsF" target="_blank" rel="noopener">Spotify</a></p><p>Agora sim, podemos testar nossa API com o este fantástico chrome app: <a href="https://www.getpostman.com/" target="_blank" rel="noopener">Postman</a></p><h1 id="Instalacao"><a href="#Instalacao" class="headerlink" title="Instalação"></a>Instalação</h1><p>Como já disse ali em cima, o <a href="https://www.getpostman.com/" target="_blank" rel="noopener">Postman</a> é um Chrome App, então, caso esteja usando Windows ou Linux você precisara ter o <a href="https://www.google.com/chrome/" target="_blank" rel="noopener">Chrome instalado</a>. Caso esteja usando Mac poderá usar o app feito com o <a href="http://electron.atom.io/" target="_blank" rel="noopener">Electron</a> disponibilizado no site do <a href="https://www.getpostman.com/" target="_blank" rel="noopener">Postman</a>. Então:</p><ol><li>Baixe o Postman aqui: <a href="https://www.getpostman.com/" target="_blank" rel="noopener">https://www.getpostman.com/</a></li><li>Divirta-se</li></ol><h1 id="Levantando-API-para-teste"><a href="#Levantando-API-para-teste" class="headerlink" title="Levantando API para teste"></a>Levantando API para teste</h1><p>Vamos usar uma API de exemplo já pronta criada em cima do projeto <a href="https://github.com/linck/protontype" target="_blank" rel="noopener">ProtonType</a>. Falei um pouco sobre ele aqui <a href="http://devlog.com.br/2016/11/15/ProtonType/">neste post</a>. </p><p>Você precisará do <a href="https://nodejs.org/en/" target="_blank" rel="noopener">NodeJS 6.x</a> ou maior para usar esta API de exemplo. Claro que poderá usar qualquer API que você tenha controle para testar. Caso queira usar esta sugerida siga os passos abaixo:</p><p><strong>Clone o projeto</strong><br><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git <span class="built_in">clone</span> https://github.com/linck/protontype-example.git</span><br></pre></td></tr></table></figure></p><p><strong>Levante a api</strong><br><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">cd</span> protontype-example</span><br><span class="line">npm install</span><br><span class="line">npm start</span><br></pre></td></tr></table></figure></p><p>Esta API nos possibilita criar, alterar, deletar e consultar Tasks e Users.<br>Para ver os endpoints disponíveis acesse no seu browser:<br><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">https://localhost:3000</span><br></pre></td></tr></table></figure></p><h1 id="Usando-o-Mr-Postman"><a href="#Usando-o-Mr-Postman" class="headerlink" title="Usando o Mr. Postman!"></a>Usando o Mr. Postman!</h1><p>Nossa API está escutando na porta 3000 e usa https, portanto a base da nossa URL será <strong><a href="https://locahost:3000" target="_blank" rel="noopener">https://locahost:3000</a></strong></p><p>Ao abrir o Postman iremos nos deparar com a tela a baixo:<br><img src="inicial.png" alt="Initial"></p><h2 id="Criando-um-Usuario"><a href="#Criando-um-Usuario" class="headerlink" title="Criando um Usuário"></a>Criando um Usuário</h2><p>Na tela inicial:</p><ul><li>Escolha a opçao <strong><em>POST</em></strong> </li><li>Coloque a url: <strong><em><a href="https://localhost:3000/users" target="_blank" rel="noopener">https://localhost:3000/users</a></em></strong></li><li>Vá para a aba <strong><em>body</em></strong> escolha a opção <strong><em>raw</em></strong> e <strong><em>JSON</em></strong></li></ul><p>No campo de texto a baixo adicione o JSON abaixo:<br><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">&#123;</span><br><span class="line">    <span class="attr">"name"</span>: <span class="string">"DevLog"</span>,</span><br><span class="line">    <span class="attr">"password"</span>: <span class="string">"123456"</span>,</span><br><span class="line">    <span class="attr">"email"</span>: <span class="string">"devlog@devlog.com.br"</span></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure></p><p>Sua configuração ficará como na figura abaixo:<br><img src="post_user.png" alt="Post User"></p><p>Depois clique em <strong><em>Send</em></strong> para cadastrar um usuário.</p><h2 id="Testando-Autenticacao-do-Usuario"><a href="#Testando-Autenticacao-do-Usuario" class="headerlink" title="Testando Autenticação do Usuário"></a>Testando Autenticação do Usuário</h2><p>Agora vamos testar a autenticação deste usuário cadastrado. Nossa API implementa um tipo de autenticação chamada <a href="https://jwt.io/" target="_blank" rel="noopener">JWT</a>. Vejamos como fazer isso no Postman.</p><h3 id="Gerando-o-Token"><a href="#Gerando-o-Token" class="headerlink" title="Gerando o Token"></a>Gerando o Token</h3><p>Primeiro devemos solicitar a um token através da url <strong><em><a href="https://localhost:3000/token" target="_blank" rel="noopener">https://localhost:3000/token</a></em></strong>.</p><p>Coloque esta url no Postman assim como foi feito com o usuário, através do método POST, e enviando o JSON:</p><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">&#123;</span><br><span class="line">    <span class="attr">"password"</span>: <span class="string">"123456"</span>,</span><br><span class="line">    <span class="attr">"email"</span>: <span class="string">"devlog@devlog.com.br"</span></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>Sua configuração ficará assim:<br><img src="token.png" alt="Token"></p><p>Clique em <strong><em>send</em></strong> e receberá a resposta com um token:<br><img src="token_result.png" alt="Token"></p><p>Pronto, agora você está autenticado. Copie este token e guarde para o próximo passo.</p><h2 id="Criando-uma-Task"><a href="#Criando-uma-Task" class="headerlink" title="Criando uma Task"></a>Criando uma Task</h2><p>Agora vamos criar um task. Usando o método POST envie uma solicitação para url <strong><em><a href="https://localhost:3000/tasks" target="_blank" rel="noopener">https://localhost:3000/tasks</a></em></strong> com o JSON abaixo:</p><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">&#123;</span><br><span class="line"><span class="attr">"title"</span>: <span class="string">"Task Teste"</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>Após clicar em <strong><em>Send</em></strong>, receberemos o resultado:<br><img src="add_task_unauth.png" alt="Token"></p><p>Isso aconteceu porque não informamos na requisição http o <strong><em>token</em></strong> de autenticação gerado no passo anterior. Então vamos configurar.</p><ul><li>Vá na aba <strong><em>Headers</em></strong></li><li>No campo <strong><em>key</em></strong> digite <strong><em>Authorization</em></strong>.</li><li>No campo value coloque <strong><em>JWT [token_gerado]</em></strong> (por exemplo: <strong><em>JWT eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6MX0.otx8FgAk8oHHmqY9-dOKmnF3kXOpm2Fxs5Krl985JKI</em></strong>)</li></ul><p><img src="add_task_token.png" alt="Token"></p><p>Com esta configuração, estamos enviado o <strong><em>token</em></strong> que geramos no cabeçalho Authorization do http, possibilitando nossa API autenticar sua requisição. </p><p>Agora sim, clique em <strong><em>Send</em></strong> e teremos uma Task criada!</p><p>Com o Postman você terá uma ótima ferramente para testes de sua API. Agora você pode desbravar as suas outras funcionalidades de acordo com sua necessidade. Teste os outros endpoints da API. Faça bom uso!</p>]]></content:encoded>
      
      <comments>http://devlog.com.br/testando-apis-rest-postman/#disqus_thread</comments>
    </item>
    
    <item>
      <title>TypeScript - Resolvendo o Duplicate Identifier Error</title>
      <link>http://devlog.com.br/typescript-duplicate-identifier/</link>
      <guid>http://devlog.com.br/typescript-duplicate-identifier/</guid>
      <pubDate>Thu, 17 Nov 2016 00:59:42 GMT</pubDate>
      <description>
      
        
        
          &lt;h1 id=&quot;TypeScript-Resolvendo-o-Duplicate-Identifier-Error&quot;&gt;&lt;a href=&quot;#TypeScript-Resolvendo-o-Duplicate-Identifier-Error&quot; class=&quot;headerlink&quot;
        
      
      </description>
      
      <content:encoded><![CDATA[<h1 id="TypeScript-Resolvendo-o-Duplicate-Identifier-Error"><a href="#TypeScript-Resolvendo-o-Duplicate-Identifier-Error" class="headerlink" title="TypeScript - Resolvendo o Duplicate Identifier Error"></a>TypeScript - Resolvendo o Duplicate Identifier Error</h1><p>Um dos problemas mais chatos que você pode encontrar quando for usar TypeScript é:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Duplicate identifier...</span><br></pre></td></tr></table></figure><p>Isto acontece quando o compilador tenta carregar o mesmo módulo ou definição (.d.ts) mais de uma vez, identificando que este está duplicado. Quando se instala uma dependência via <strong><em>npm install</em></strong>, o <strong><em>npm</em></strong> já identifica se o módulo está baixado evitando duplicação, mas, se você esta usando módulos locais com <strong><em>npm link</em></strong>, é quase certo que terá este problema.</p><p>Este erro não impede que o JavaScript seja gerado, mas aqui pra nós, é muito chato ver milhares de erro no seu console quando mandamos executar ou compilar algo.</p><h2 id="Resolucao"><a href="#Resolucao" class="headerlink" title="Resolução"></a>Resolução</h2><h4 id="Atualize-a-versao-do-TypeScript"><a href="#Atualize-a-versao-do-TypeScript" class="headerlink" title="Atualize a versao do TypeScript"></a>Atualize a versao do TypeScript</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install typescript -g</span><br></pre></td></tr></table></figure><h4 id="Configuracao-do-compilador"><a href="#Configuracao-do-compilador" class="headerlink" title="Configuração do compilador"></a>Configuração do compilador</h4><p>Coloque esta configuração do seu <strong>tsconfig.json</strong>:</p><figure class="highlight"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="string">"compilerOptions"</span> &#123;</span><br><span class="line">     ....</span><br><span class="line">    "baseUrl": "./",</span><br><span class="line">    "paths": &#123;</span><br><span class="line">        "*": [ "node_modules/@types/*", "*"]</span><br><span class="line">    &#125;</span><br><span class="line">   ...</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>Isto informará ao compilador que quando ele for resolver um módulo qualquer, procure primeiro em  <code>.\node_modules\@types\</code> e so depois nos demais locais, evitando a duplicidade do carregamento.</p><h2 id="Referencias"><a href="#Referencias" class="headerlink" title="Referências"></a>Referências</h2><ul><li><a href="https://www.typescriptlang.org/docs/handbook/module-resolution.html" target="_blank" rel="noopener">https://www.typescriptlang.org/docs/handbook/module-resolution.html</a></li><li><a href="https://github.com/Microsoft/TypeScript/issues/11916#event-853609143" target="_blank" rel="noopener">https://github.com/Microsoft/TypeScript/issues/11916#event-853609143</a>   </li></ul><p><em>Obrigado <a href="https://github.com/mhegazy" target="_blank" rel="noopener">@mhegazy</a> pela dica!!</em></p>]]></content:encoded>
      
      <comments>http://devlog.com.br/typescript-duplicate-identifier/#disqus_thread</comments>
    </item>
    
    <item>
      <title>Crie sua API REST usando Typescript com ProtonType</title>
      <link>http://devlog.com.br/crie-api-rest-protontype/</link>
      <guid>http://devlog.com.br/crie-api-rest-protontype/</guid>
      <pubDate>Tue, 15 Nov 2016 17:22:30 GMT</pubDate>
      <description>
      
        
        
          &lt;p&gt;Protontype é um módulo Node que ajuda na criação de APIs RESTfull. Tem como objetivo facilitar a criação de objetos de banco de dados, ro
        
      
      </description>
      
      <content:encoded><![CDATA[<p>Protontype é um módulo Node que ajuda na criação de APIs RESTfull. Tem como objetivo facilitar a criação de objetos de banco de dados, rotas, middlewares e autenticação, tudo isso usando Typescript</p><h1 id="Quick-Start-Criando-uma-API-em-5-passos"><a href="#Quick-Start-Criando-uma-API-em-5-passos" class="headerlink" title="Quick Start - Criando uma API em 5 passos"></a>Quick Start - Criando uma API em 5 passos</h1><h2 id="Estrutura-de-pastas-e-configuracoes-iniciais"><a href="#Estrutura-de-pastas-e-configuracoes-iniciais" class="headerlink" title="Estrutura de pastas e configurações iniciais"></a>Estrutura de pastas e configurações iniciais</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line">mkdir proton-quickstart</span><br><span class="line"><span class="built_in">cd</span> proton-quickstart</span><br><span class="line">npm init</span><br><span class="line">mkdir src</span><br><span class="line">npm install protontype --save</span><br></pre></td></tr></table></figure><p>Criar o arquivo tsconfig.json na raiz do projeto</p><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line">&#123;</span><br><span class="line">  <span class="attr">"compilerOptions"</span>: &#123;</span><br><span class="line">    <span class="attr">"target"</span>: <span class="string">"es5"</span>,</span><br><span class="line">    <span class="attr">"module"</span>: <span class="string">"commonjs"</span>,</span><br><span class="line">    <span class="attr">"emitDecoratorMetadata"</span>: <span class="literal">true</span>,</span><br><span class="line">    <span class="attr">"experimentalDecorators"</span>: <span class="literal">true</span>,</span><br><span class="line">    <span class="attr">"outDir"</span>: <span class="string">"dist"</span></span><br><span class="line">  &#125;,</span><br><span class="line">  <span class="attr">"exclude"</span>: [</span><br><span class="line">    <span class="string">"node_modules"</span>,</span><br><span class="line">    <span class="string">"dist"</span></span><br><span class="line">  ]</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="Model"><a href="#Model" class="headerlink" title="Model"></a>Model</h2><p>Criar um arquivo ParticlesModel.ts</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line"><span class="keyword">import</span> &#123; BaseModel, SequelizeBaseModelAttr, Model, DataTypes &#125; <span class="keyword">from</span> <span class="string">'protontype'</span>;</span><br><span class="line"></span><br><span class="line">@Model(&#123;</span><br><span class="line">    name: <span class="string">"Particles"</span>,</span><br><span class="line">    definition: &#123;</span><br><span class="line">        name: &#123;</span><br><span class="line">            type: DataTypes.STRING</span><br><span class="line">        &#125;,</span><br><span class="line">        symbol: &#123;</span><br><span class="line">            type: DataTypes.STRING</span><br><span class="line">        &#125;,</span><br><span class="line">        mass: &#123;</span><br><span class="line">            type: DataTypes.BIGINT</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">    &#125;</span><br><span class="line">&#125;)</span><br><span class="line"><span class="keyword">export</span> <span class="class"><span class="keyword">class</span> <span class="title">ParticlesModel</span> <span class="keyword">extends</span> <span class="title">BaseModel</span>&lt;<span class="title">Particle</span>&gt; </span>&#123;</span><br><span class="line"></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">export</span> interface Particle extends SequelizeBaseModelAttr &#123;</span><br><span class="line">    name: string;</span><br><span class="line">    symbol: string;</span><br><span class="line">    mass: number;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="Router"><a href="#Router" class="headerlink" title="Router"></a>Router</h2><p>Criar arquivo ParticlesRouter.ts</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line"><span class="keyword">import</span> &#123; ParticlesModel &#125; <span class="keyword">from</span> <span class="string">'./ParticlesModel'</span>;</span><br><span class="line"><span class="keyword">import</span> &#123; BaseCrudRouter, RouterClass &#125; <span class="keyword">from</span> <span class="string">'protontype'</span>;</span><br><span class="line"></span><br><span class="line">@RouterClass(&#123;</span><br><span class="line">    baseUrl: <span class="string">'/particles'</span>,</span><br><span class="line">    modelInstances: [<span class="keyword">new</span> ParticlesModel()]</span><br><span class="line">&#125;)</span><br><span class="line"><span class="keyword">export</span> <span class="class"><span class="keyword">class</span> <span class="title">ParticlesRouter</span> <span class="keyword">extends</span> <span class="title">BaseCrudRouter</span> </span>&#123;</span><br><span class="line"></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="Main"><a href="#Main" class="headerlink" title="Main"></a>Main</h2><p>Criar arquivo Main.ts</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line"><span class="keyword">import</span> &#123; ParticlesRouter &#125; <span class="keyword">from</span> <span class="string">'./ParticlesRouter'</span>;</span><br><span class="line"><span class="keyword">import</span> &#123; ProtonApplication &#125; <span class="keyword">from</span> <span class="string">'protontype'</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">new</span> ProtonApplication()</span><br><span class="line">    .addRouter(<span class="keyword">new</span> ParticlesRouter())</span><br><span class="line">    .bootstrap();</span><br></pre></td></tr></table></figure><p><strong>Compilando e Rodando Aplicação</strong><br><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line">tsc</span><br><span class="line">node dist/Main.ts</span><br></pre></td></tr></table></figure></p><h2 id="Testando-a-API"><a href="#Testando-a-API" class="headerlink" title="Testando a API"></a>Testando a API</h2><p>Por padrão, a aplicação usará um banco de dados sqlite.<br>Será criado um arquivo proton.sqlite na raiz do projeto.</p><p>Os endpoints abaixo já estarão disponíveis:</p><ul><li><strong>GET /particles</strong> - Lista todos os registos da tabela Particles</li><li><strong>POST /particles</strong> - Cria um registro na tabela Particles</li><li><strong>GET /particles/:id</strong> - Consulta um registro da tabela Particles</li><li><strong>PUT /particles/:id</strong> - Atualiza um registro da tabela Particles</li><li><strong>DELETE /particles/:id</strong> - Remove um registro da tabela Particles</li></ul><p>Podera testar através do app <a href="https://www.getpostman.com/" target="_blank" rel="noopener">Postman</a> ou outro da sua preferência.</p><p><strong>Código completo do quick start</strong></p><p><a href="https://github.com/linck/proton-quickstart" target="_blank" rel="noopener">https://github.com/linck/proton-quickstart</a></p><h2 id="Exemplo"><a href="#Exemplo" class="headerlink" title="Exemplo"></a>Exemplo</h2><p><a href="https://github.com/linck/protontype-example" target="_blank" rel="noopener">https://github.com/linck/protontype-example</a></p><h2 id="Projeto"><a href="#Projeto" class="headerlink" title="Projeto"></a>Projeto</h2><p><a href="https://github.com/linck/protontype" target="_blank" rel="noopener">https://github.com/linck/protontype</a></p><h2 id="Documentacao"><a href="#Documentacao" class="headerlink" title="Documentação"></a>Documentação</h2><p><a href="https://linck.github.io/protontype-docs" target="_blank" rel="noopener">https://linck.github.io/protontype-docs</a></p>]]></content:encoded>
      
      <comments>http://devlog.com.br/crie-api-rest-protontype/#disqus_thread</comments>
    </item>
    
  </channel>
</rss>
