<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: angelo rogerio rubin</title>
    <description>The latest articles on DEV Community by angelo rogerio rubin (@angelorubin).</description>
    <link>https://dev.to/angelorubin</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F245214%2F31054a6a-0766-498d-888a-259337a44caf.jpeg</url>
      <title>DEV Community: angelo rogerio rubin</title>
      <link>https://dev.to/angelorubin</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/angelorubin"/>
    <language>en</language>
    <item>
      <title>Onde devo armazenar os arquivos dto do Nest.js?</title>
      <dc:creator>angelo rogerio rubin</dc:creator>
      <pubDate>Wed, 08 Mar 2023 18:57:03 +0000</pubDate>
      <link>https://dev.to/angelorubin/onde-devo-armazenar-os-arquivos-dto-do-nestjs-2g6h</link>
      <guid>https://dev.to/angelorubin/onde-devo-armazenar-os-arquivos-dto-do-nestjs-2g6h</guid>
      <description>&lt;p&gt;Olá Pessoal,&lt;/p&gt;

&lt;p&gt;Hoje trago uma dica rápida de organização para os arquivos DTO (Data Transfer Object) do Nest.js.&lt;/p&gt;

&lt;p&gt;Os arquivos DTO no Nest.js são comumente colocados em um diretório dto dentro do módulo correspondente. Por exemplo, se você tem um módulo chamado users, você pode criar um diretório dto dentro dele e colocar os arquivos DTO lá. A estrutura do diretórios pode ficar assim:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;users/
├── dto/
│   ├── create-user.dto.ts
│   ├── update-user.dto.ts
│   └── user.dto.ts
├── users.controller.ts
├── users.module.ts
└── users.service.ts

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Depois de criar os arquivos DTO, você pode importá-los em seus controladores e serviços, como mostrado no exemplo abaixo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { Controller, Post, Body } from '@nestjs/common';
import { CreateUserDto } from './dto/create-user.dto';
import { UsersService } from './users.service';

@Controller('users')
export class UsersController {
  constructor(private readonly usersService: UsersService) {}

  @Post()
  async create(@Body() createUserDto: CreateUserDto) {
    return this.usersService.create(createUserDto);
  }
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Note que, no exemplo acima, estamos importando o CreateUserDto do diretório dto.&lt;/p&gt;

&lt;p&gt;Espero que a dica tenha sido útil a todos !&lt;/p&gt;

&lt;p&gt;Bons estudos.&lt;/p&gt;

</description>
      <category>nestjs</category>
      <category>dto</category>
      <category>armazenar</category>
    </item>
    <item>
      <title>Como utilizar transactions de forma simples no framework Nest.js</title>
      <dc:creator>angelo rogerio rubin</dc:creator>
      <pubDate>Wed, 08 Mar 2023 12:25:24 +0000</pubDate>
      <link>https://dev.to/angelorubin/como-utilizar-transactions-de-forma-simples-no-framework-nestjs-5h60</link>
      <guid>https://dev.to/angelorubin/como-utilizar-transactions-de-forma-simples-no-framework-nestjs-5h60</guid>
      <description>&lt;p&gt;O Nest.js fornece suporte para transações usando a biblioteca TypeORM, que é uma biblioteca ORM popular para Node.js. &lt;/p&gt;

&lt;p&gt;Para utilizar transações em Nest.js, você pode seguir os seguintes passos:&lt;/p&gt;

&lt;p&gt;1 - Importe a classe Connection da biblioteca TypeORM:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { Connection } from 'typeorm';
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;2 - Injete a conexão do TypeORM no seu serviço ou controlador:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { Injectable } from '@nestjs/common';
import { InjectConnection } from '@nestjs/typeorm';
import { Connection } from 'typeorm';

@Injectable()
export class MyService {
  constructor(
    @InjectConnection() private connection: Connection,
  ) {}
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;3 - Utilize o método transaction do objeto connection para executar uma transação:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;await this.connection.transaction(async (manager) =&amp;gt; {
  // Execute as operações de banco de dados aqui
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dentro da função passada para transaction, você pode executar as operações de banco de dados que desejar, como inserções, atualizações ou exclusões. Se uma exceção for lançada dentro da função, a transação será revertida automaticamente.&lt;/p&gt;

&lt;p&gt;Por exemplo, se você quiser criar um novo usuário e um novo post ao mesmo tempo em uma transação, pode fazer algo assim:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;await this.connection.transaction(async (manager) =&amp;gt; {
  const user = await manager.create(User, { name: 'John' });
  const post = await manager.create(Post, { title: 'Hello, World!', content: 'This is my first post.' });
  await manager.save(user);
  await manager.save(post);
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Observe que estamos usando o método create do gerenciador de entidades do TypeORM para criar novos objetos do usuário e do post, e depois estamos salvando esses objetos usando o método save. Essas operações são executadas dentro da transação. Se algo der errado, a transação será revertida e nenhum usuário ou post será salvo no banco de dados.&lt;/p&gt;

&lt;p&gt;Isso deve ajudá-lo a entender como utilizar transações de forma simples no framework Nest.js com o TypeORM.&lt;/p&gt;

&lt;p&gt;Bons estudos!&lt;/p&gt;

</description>
      <category>transaction</category>
      <category>nestjs</category>
      <category>typeorm</category>
      <category>transacoes</category>
    </item>
    <item>
      <title>ECMAScript 2016/2017 Dicas - Array.prototype.includes</title>
      <dc:creator>angelo rogerio rubin</dc:creator>
      <pubDate>Thu, 07 Jan 2021 20:36:32 +0000</pubDate>
      <link>https://dev.to/angelorubin/ecmascript-2016-2017-dicas-array-prototype-includes-472d</link>
      <guid>https://dev.to/angelorubin/ecmascript-2016-2017-dicas-array-prototype-includes-472d</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fcaahx1ydo3i62x9ylkj4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fcaahx1ydo3i62x9ylkj4.png" alt="includes" width="800" height="400"&gt;&lt;/a&gt;&lt;br&gt;
Olá pessoal,&lt;/p&gt;

&lt;p&gt;Este é o primeiro de uma série de vários artigos que pretendo escrever sobre as novas implementações do ECMAScript 2016/2017.&lt;/p&gt;

&lt;p&gt;O foco principal é aperfeiçoar meus conhecimentos em Javascript e ao mesmo tempo compartilhar todo o conhecimento adquirido com vocês.&lt;/p&gt;

&lt;p&gt;Pretendo ser bem didático quanto aos exemplos como forma de ajudar principalmente os que estão iniciando na linguagem.&lt;/p&gt;

&lt;p&gt;Bem, chega de papo e vamos ao que interessa!&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A partir de agora chamarei o ECMAScript 2016/2017 de ES16/17 para facilitar nossas vidas.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;O ES16/17 nos trouxe um novo método chamado includes. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Não confundir com o &lt;a href="https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/String/includes" rel="noopener noreferrer"&gt;método includes&lt;/a&gt; do objeto global String.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;O método includes está disponível no objeto global Array. Caso você não saiba do que estou falando pode ver mais sobre o objeto global Array &lt;a href="https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Array" rel="noopener noreferrer"&gt;aqui&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  A assinatura do método
&lt;/h2&gt;

&lt;p&gt;Primeiramente vamos dar uma olhada na assinatura do método que é a seguinte:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Array.prototype.includes(value : any) : boolean&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Como podemos observar, este método aceita qualquer tipo (value: any) como valor e nos retorna um booleano como resposta.&lt;/p&gt;

&lt;p&gt;Vejamos um exemplo:&lt;/p&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/angelorubin/embed/ExgRLRM?height=600&amp;amp;default-tab=js&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;No primeiro exemplo podemos notar que o método includes recebe o valor (3), percorre o array e verifica se encontra o valor dentro do array, caso o método encontre o valor ele nos retorna verdadeiro (true) e caso não encontre nos retorna falso (false).&lt;/p&gt;

&lt;p&gt;No segundo exemplo ele recebe um número (4) que não existe no array e como é de se esperar nos retorna falso (false).&lt;/p&gt;

&lt;p&gt;Simples e objetivo !&lt;/p&gt;

&lt;p&gt;O curioso é que o método includes() é similar a um método que já existe no Javascript, este método é conhecido como indexOf():&lt;/p&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/angelorubin/embed/zYKaybX?height=600&amp;amp;default-tab=js&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Mas você pode estar se perguntando, se já existe um método que resolve o problema, para que criaram outro?&lt;/p&gt;

&lt;p&gt;Na verdade existem pequenas diferenças entre eles e a primeira delas é que o método indexOf() não verifica &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NaN" rel="noopener noreferrer"&gt;NaN&lt;/a&gt; (propriedade do objeto global), já o método includes possui esse tipo de verificação.&lt;/p&gt;

&lt;p&gt;Vejamos um exemplo:&lt;/p&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/angelorubin/embed/MWjqpvo?height=600&amp;amp;default-tab=js&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;A segunda diferença é que o método includes() não diferencia -0 e +0, pois o Javascript tenta minimizar isto nos dando a impressão que só existe um zero, quando na verdade existem dois zeros (-0 e +0). &lt;/p&gt;

&lt;p&gt;Como não pretendo me aprofundar na explicação deste tópico do (zero negativo) em particular para não deixar o artigo muito extenso, deixo um link para vocês &lt;a href="https://pt.wikipedia.org/wiki/Zero_negativo" rel="noopener noreferrer"&gt;aqui&lt;/a&gt; onde explica em detalhes o problema.&lt;/p&gt;

&lt;p&gt;Vejamos um exemplo:&lt;/p&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/angelorubin/embed/ZEpjpEJ?height=600&amp;amp;default-tab=js&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;No exemplo acima vemos que o método includes() trata o (-0) e o (+0) como iguais, quando na verdade eles não são.&lt;/p&gt;

&lt;p&gt;É isso ai pessoal!&lt;/p&gt;

&lt;p&gt;Espero que tenha ficado claro o uso do método includes e que vocês tenham gostado do artigo.&lt;/p&gt;

&lt;p&gt;Qualquer dúvida, crítica ou sugestão serão bem vindas.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Spoiler&lt;/strong&gt; : No próximo artigo pretendo falar um pouco sobre uma novidade muito interessante do ES16/17 que são os &lt;strong&gt;operadores de exponenciação&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Até breve e espero por vocês!&lt;/p&gt;

</description>
      <category>ecmascript</category>
      <category>includes</category>
      <category>es2016</category>
      <category>dicas</category>
    </item>
  </channel>
</rss>
