Introdução ao NestJS #nodejs #typescript #backend #api #framework

00:18:29
https://www.youtube.com/watch?v=dFFpjjD9cj4

الملخص

TLDRO vídeo apresenta uma visão geral sobre como criar uma API utilizando o NestJS, um framework de backend que facilita o desenvolvimento de aplicações. O apresentador demonstra o processo de criação de um projeto, instalação de pacotes necessários, geração de recursos e configuração de rotas CRUD. Ele destaca a utilização de TypeScript, ESlint, Jest para testes, e TypeORM para interação com o banco de dados SQLite. O vídeo enfatiza a rapidez e eficiência do NestJS, além de incentivar os desenvolvedores a explorar a documentação do framework para aprofundar seus conhecimentos.

الوجبات الجاهزة

  • 🚀 NestJS facilita a criação de APIs rapidamente.
  • 📦 Geração automática de código para estruturação de projetos.
  • 🛠️ Integração com TypeORM para gerenciamento de banco de dados.
  • ✅ Validação de dados com class-validator.
  • 🔄 Injeção de dependência para melhor gerenciamento de serviços.
  • 📊 Suporte a testes unitários e de integração com Jest.
  • 📚 Documentação é essencial para resolver dúvidas rapidamente.
  • 💡 Utilização de DTOs para transporte e validação de dados.
  • 🔧 Configuração simples de rotas CRUD.
  • 🌐 Suporte a múltiplos bancos de dados.

الجدول الزمني

  • 00:00:00 - 00:05:00

    Neste vídeo, o apresentador introduz o NestJS, um framework robusto para desenvolvimento de APIs backend, destacando sua facilidade de uso e a estrutura de pastas que ele oferece. Ele demonstra como criar um novo projeto usando o comando 'nest new', selecionando o gerenciador de pacotes npm e instalando pacotes essenciais como nano ID, sqlite3 e typeorm. O apresentador também menciona a geração automática de código para a API, facilitando a criação de endpoints CRUD.

  • 00:05:00 - 00:10:00

    O apresentador gera um recurso para cadastro de desenvolvedores usando o comando 'nest g resource developers', optando por uma REST API. Ele demonstra como criar e testar endpoints para listar, criar, atualizar e deletar desenvolvedores, utilizando uma extensão chamada REST Client para facilitar as requisições HTTP. O código gerado automaticamente pelo NestJS é explicado, incluindo a estrutura do controller e a validação de dados com DTOs (Data Transfer Objects).

  • 00:10:00 - 00:18:29

    O vídeo avança para a configuração do TypeORM para interagir com o banco de dados SQLite, criando a entidade Developer e implementando a lógica de serviço para manipulação de dados. O apresentador explica a injeção de dependência no NestJS, mostrando como o repositório é injetado no serviço e como as operações de CRUD são realizadas. Ele finaliza o vídeo destacando a importância de ler a documentação do NestJS e os próximos passos para aprofundar o conhecimento, como testes e migrações.

الخريطة الذهنية

فيديو أسئلة وأجوبة

  • O que é NestJS?

    NestJS é um framework de backend para desenvolvimento de APIs, que utiliza TypeScript e oferece uma estrutura robusta e organizada.

  • Quais são os benefícios de usar NestJS?

    Ele facilita a criação de APIs, já vem com configurações padrão, suporte a testes e validações, e permite uma rápida implementação.

  • Como criar um projeto no NestJS?

    Você pode criar um projeto usando o comando 'nest new nome-do-projeto'.

  • O que é TypeORM?

    TypeORM é uma biblioteca que permite a interação com bancos de dados em aplicações Node.js, facilitando operações CRUD.

  • Como funciona a validação de dados no NestJS?

    A validação é feita através de classes DTO (Data Transfer Object) e decorators do pacote class-validator.

  • O que é injeção de dependência?

    É um padrão de design que permite que um objeto receba suas dependências de um provedor, facilitando a gestão de dependências.

  • Quais tipos de banco de dados podem ser usados com NestJS?

    NestJS suporta diversos bancos de dados, incluindo SQLite, PostgreSQL, MongoDB, entre outros.

  • Como posso testar a API criada?

    Você pode usar ferramentas como Postman ou REST Client para enviar requisições e verificar as respostas da API.

  • O que é um DTO?

    DTO (Data Transfer Object) é um objeto que transporta dados entre processos, utilizado para validação e estruturação de dados.

  • Como posso lidar com erros na API?

    Você pode usar exceções personalizadas e middleware para gerenciar erros e retornar respostas apropriadas.

عرض المزيد من ملخصات الفيديو

احصل على وصول فوري إلى ملخصات فيديو YouTube المجانية المدعومة بالذكاء الاصطناعي!
الترجمات
pt
التمرير التلقائي:
  • 00:00:00
    criar apis é uma das atividades mais
  • 00:00:02
    comuns na vida do desenvolvedor backend
  • 00:00:04
    Então tem que ter um jeito que é fácil e
  • 00:00:06
    rápido para você colocar até um api no
  • 00:00:08
    ar por dia se precisar e é por isso que
  • 00:00:10
    hoje a gente vai dar uma olhada no nest
  • 00:00:12
    JS um Framework de backend bem robusto
  • 00:00:15
    opinion e que já vem até com gerador de
  • 00:00:17
    código você nunca mais vai ter aquela
  • 00:00:20
    dúvida de qual é a estrutura de pastas
  • 00:00:22
    ideal para uma aplicação backend onde
  • 00:00:24
    coloca Model onde que vai a service essa
  • 00:00:26
    dúvida acabou já vem com typescript
  • 00:00:29
    instalado e configurado e ess lint
  • 00:00:31
    testes unitários e de integração com o
  • 00:00:33
    jest tudo funcionando é só maravilha
  • 00:00:36
    então bora pro
  • 00:00:37
    [Música]
  • 00:00:40
    vídeo bem-vindo ao fil code eu sou o fil
  • 00:00:43
    e eu tô aqui para te ajudar a ser 1%
  • 00:00:45
    melhor a cada dia Já criei a pasta do
  • 00:00:46
    projeto e dentro dela eu vou fazer nest
  • 00:00:49
    New ponto para criar o projeto dentro
  • 00:00:51
    dessa pasta ele tá perguntando aqui qual
  • 00:00:53
    gerenciador de pacote eu quero usar e
  • 00:00:55
    vai ser o npm mesmo Aguarda um pouco
  • 00:00:56
    para ele completar a instalação dos
  • 00:00:58
    pacotes pronto tá terminado olhando aqui
  • 00:01:00
    na pasta src ele já cria muita coisa pra
  • 00:01:03
    gente eu não vou entrar nos detalhes
  • 00:01:04
    disso aqui hoje hoje é mais uma visão
  • 00:01:06
    geral mas em outros vídeos eu vou
  • 00:01:07
    explicando um por um antes de avançar
  • 00:01:09
    vamos instalar aqui de uma vez os
  • 00:01:10
    pacotes que a gente vai utilizar hoje
  • 00:01:12
    npm install nano ID na versão 3 por
  • 00:01:15
    compatibilidade o sqlite 3 o typeorm que
  • 00:01:19
    vai ajudar a gente a lidar com banco de
  • 00:01:20
    dados o @
  • 00:01:23
    nestjs Type RM que é o pacote de
  • 00:01:25
    compatibilidade do Type RM com o nest JS
  • 00:01:28
    também o CL validator e o Class
  • 00:01:32
    Transformer pra gente fazer validações
  • 00:01:34
    espera instalar legal agora vamos
  • 00:01:36
    colocar o nest para trabalhar pra gente
  • 00:01:38
    digita aí nest g de generate resource
  • 00:01:42
    developers porque a gente vai fazer
  • 00:01:43
    cadastro de desenvolvedores aqui aperto
  • 00:01:46
    o enter a gente vai gerar uma API e ele
  • 00:01:48
    tá perguntando pra gente que formato de
  • 00:01:49
    api que a gente quer usar nós vamos com
  • 00:01:51
    rest api hoje e em outros vídeos a gente
  • 00:01:53
    pode explorar os outros formatos que tem
  • 00:01:55
    aqui já tá perguntando se eu quero que
  • 00:01:57
    gera para mim os end points de crud
  • 00:01:58
    Create Read update delite é claro olha
  • 00:02:01
    só repara que ele já criou uma pastinha
  • 00:02:03
    pra gente de novo não vou entrar muito
  • 00:02:04
    no detalhe mas a gente vai olhar algumas
  • 00:02:06
    dessas coisas então vamos começar logo
  • 00:02:08
    colocando o projeto para rodar npm Run
  • 00:02:11
    start dois p Dev Olha aí ele botou uns
  • 00:02:13
    logs pra gente mostrando que a solução
  • 00:02:15
    já tá rodando E acredite se quiser a
  • 00:02:17
    gente já tem uma API funcional aqui
  • 00:02:19
    vamos dar uma olhada e para isso caso
  • 00:02:21
    você ainda não tenha essa extensão aqui
  • 00:02:23
    ó rest client essa mesmo aqui ó do Rua
  • 00:02:25
    tchau mau se não tem instala porque olha
  • 00:02:28
    só a mão na roda vou voltando aqui no
  • 00:02:30
    projeto na partinha developers eu vou
  • 00:02:32
    criar um novo arquivo chamado developers
  • 00:02:34
    P http e nesse arquivo nós vamos fazer
  • 00:02:37
    primeiro uma consulta list developers
  • 00:02:39
    que vai ser um Get No http 2 p bar Barra
  • 00:02:42
    local host 2. 3000 bar developers olha
  • 00:02:46
    só que legal aquela extensão cria pra
  • 00:02:48
    gente esse botão send request em cima do
  • 00:02:50
    get com o endp que a gente escreveu
  • 00:02:52
    quando a gente clica já vê a resposta
  • 00:02:54
    aqui do lado e olha essa daqui já é a
  • 00:02:55
    nossa api funcionando repara que ele tá
  • 00:02:57
    falando this Action Returns all
  • 00:02:59
    developers isso aqui não é por acaso tem
  • 00:03:00
    a ver com o módulo de developers que a
  • 00:03:02
    gente criou aqui automaticamente com
  • 00:03:04
    gerador de código do nest vamos ver mais
  • 00:03:06
    copia essa requisição Coloca ela no
  • 00:03:07
    Barra um por exemplo e ela vai ser o get
  • 00:03:10
    developer certo send request Olha aí
  • 00:03:12
    essa ação retorna O developer número um
  • 00:03:14
    e para mostrar que não é nada fixo se eu
  • 00:03:16
    mudar aqui para TR da send request ele
  • 00:03:18
    já retornou aqui também o developer
  • 00:03:20
    número TR Então já vamos deixar pronto
  • 00:03:22
    aqui outros end points que a gente vai
  • 00:03:24
    usar o Create developer que vai ser um
  • 00:03:27
    post nessa URL o update developer que
  • 00:03:30
    vai ser um pet e o delete também vamos
  • 00:03:33
    mudar aqui para delete o verbo também é
  • 00:03:35
    delete testando ó essa aqui vai remover
  • 00:03:37
    o desenvolvedor essa vai atualizar essa
  • 00:03:39
    vai criar vai retornar e vai listar
  • 00:03:41
    fechando aqui tudo isso aqui tá
  • 00:03:43
    funcionando por causa do developers P
  • 00:03:45
    Controller que a gente tem aqui do lado
  • 00:03:47
    olha só que legal o Controller é uma
  • 00:03:48
    classe esse código aqui foi gerado
  • 00:03:50
    automaticamente pra gente o que lá no
  • 00:03:52
    express você fazia app. poost ou pget
  • 00:03:55
    especificava lá a sua rota e depois
  • 00:03:57
    colocava um handler com o hack e o ha
  • 00:04:00
    aqui fica um pouco diferente no seguinte
  • 00:04:01
    formato a nossa api é barra developers
  • 00:04:04
    por causa disso daqui esse é o nome do
  • 00:04:05
    endpoint a gente tem um método pro post
  • 00:04:08
    e ele sabe que é post por causa desse @
  • 00:04:10
    post aqui em cima o nosso get que
  • 00:04:12
    retorna a todos os desenvolvedores é
  • 00:04:13
    esse @get sem nada aqui dentro porque a
  • 00:04:16
    gente poderia especificar alguma outra
  • 00:04:17
    coisa aqui que daí seria barra
  • 00:04:19
    developers barra isso que tá aqui dentro
  • 00:04:21
    como a gente deixou em branco então vai
  • 00:04:22
    ser um get na rota bar developers mesmo
  • 00:04:25
    aqui embaixo tem o exemplo da Rota que é
  • 00:04:27
    bar developers bar uid só que daí tem
  • 00:04:29
    esses dois pontos aqui na frente porque
  • 00:04:31
    ele é um parâmetro certo ao invés de vir
  • 00:04:33
    escrito ID mesmo vai vir o parâmetro que
  • 00:04:35
    a pessoa digitou lá o número ou Qualquer
  • 00:04:37
    que seja o ID a mesma coisa aqui pro
  • 00:04:39
    update que é um pet e pro delite e olha
  • 00:04:41
    só que bacana ele já criou pra gente
  • 00:04:43
    duas classes especiais aqui ó o Create
  • 00:04:45
    developer dto e o update developer dto
  • 00:04:48
    que vão validar pra gente
  • 00:04:49
    automaticamente o payload da requisição
  • 00:04:51
    vamos dar uma olhada entrando aqui com
  • 00:04:52
    f12 nessa classe Ela ainda tá vazia
  • 00:04:54
    Vamos colocar umas coisas aqui o
  • 00:04:56
    cadastro do desenvolvedor vai ter o name
  • 00:04:58
    que vai ser uma string e-mail que vai
  • 00:05:00
    ser outro string date of birth que vai
  • 00:05:03
    ser outro string pro name eu vou validar
  • 00:05:05
    com esse is string que a gente vai
  • 00:05:08
    importar desse Class validator Não
  • 00:05:10
    esquece aqui de abrir e fechar parêntese
  • 00:05:11
    o e-mail a gente vai usar is email que
  • 00:05:14
    vem do mesmo pacote e aqui o date of
  • 00:05:16
    birth vai ser is datate string tá
  • 00:05:19
    acredite se quiser isso aqui já vai dar
  • 00:05:21
    pra gente a validação dos dados a gente
  • 00:05:23
    só tem que habilitar esse comportamento
  • 00:05:25
    aqui no nosso main.ts vou colocar tipo
  • 00:05:27
    um middleware aqui ó que vai ser o
  • 00:05:29
    app.us Global pipes como parâmetro a
  • 00:05:32
    gente passa New validation Pipe que é
  • 00:05:35
    esse aqui do nest common ele aceita
  • 00:05:37
    algumas opções e a gente vai passar
  • 00:05:39
    Transform true e WH list true também
  • 00:05:42
    hoje eu não vou entrar em muito detalhe
  • 00:05:44
    também mas por enquanto entende que isso
  • 00:05:45
    aqui tá ligando pra gente uma validação
  • 00:05:47
    automática tá vamos ver eu vou abrir de
  • 00:05:49
    novo o nosso developers P http e vou
  • 00:05:51
    mandar a requisição post para criar o
  • 00:05:53
    desenvolvedor na hora que eu clicar em
  • 00:05:55
    send request Olha aí já tá falando pra
  • 00:05:57
    gente que o nome tem que ser uma string
  • 00:05:58
    o e-mail tem que ser um e-mail e o date
  • 00:06:00
    of birth precisa ser uma data em formato
  • 00:06:03
    válido da iso 8601 para conseguir mandar
  • 00:06:06
    agora eu preciso colocar content Type
  • 00:06:09
    sendo application barjon nessa extensão
  • 00:06:12
    A gente precisa deixar um espaço em
  • 00:06:13
    branco aqui tá uma linha em branco senão
  • 00:06:15
    ele não vai reconhecer o payload mas
  • 00:06:17
    dito isso a gente vai colocar aqui nome
  • 00:06:19
    John e mandando esse cara agora ó o nome
  • 00:06:21
    já não é mais um problema passou a ser o
  • 00:06:23
    e-mail vamos duplicar essa linha colocar
  • 00:06:25
    aqui o e-mail Só que não é um e-mail
  • 00:06:27
    válido mandando a requisição esque de
  • 00:06:29
    tirar a vírgula aqui ó e-mail precisa
  • 00:06:31
    ser um e-mail Então vamos lá atender o
  • 00:06:33
    que ele tá pedindo colocar
  • 00:06:36
    john.doe pcom enviar beleza Tá faltando
  • 00:06:39
    só a data Então vamos colocar aqui a
  • 00:06:41
    data de nascimento como sendo uma data
  • 00:06:43
    válida que vai ser 1990 1 um enviando
  • 00:06:46
    Pronto agora ele passou foi até o final
  • 00:06:48
    voltou a dar a mensagem que ele dava
  • 00:06:50
    antes e o update já tá automaticamente
  • 00:06:52
    resolvido também por quê a definição do
  • 00:06:54
    dto de update ele é esse partial Type do
  • 00:06:57
    Create que que isso significa a gente já
  • 00:07:00
    definiu as regras de validação aqui no
  • 00:07:01
    Create developer dto e esse partial Type
  • 00:07:04
    aqui no update developer tá dizendo que
  • 00:07:06
    é para aproveitar tudo que tem lá com a
  • 00:07:08
    única diferença que as propriedades são
  • 00:07:09
    opcionais Vamos ver isso na prática aqui
  • 00:07:11
    no update developer eu vou usar o mesmo
  • 00:07:13
    payload que a gente usou no cadastro só
  • 00:07:15
    que Digamos que eu quero atualizar só o
  • 00:07:17
    e-mail então eu deixei aqui só o e-mail
  • 00:07:19
    e mandei a requisição por enquanto tá
  • 00:07:21
    passando porque o e-mail tá válido e
  • 00:07:23
    olha ele deixou passar mesmo sem o nome
  • 00:07:25
    e a data de nascimento porque as
  • 00:07:27
    propriedades são opcionais mas caso
  • 00:07:28
    exista ela tem que ser válida por
  • 00:07:30
    exemplo se eu colocar o e-mail aqui com
  • 00:07:32
    o e-mail inválido e mandar ele já
  • 00:07:34
    reclama pra gente no formato padronizado
  • 00:07:36
    retomando as coisas aqui o Controller é
  • 00:07:39
    a classe que é responsável por lidar com
  • 00:07:40
    a camada http da requisição ele recebe
  • 00:07:43
    os dados que estão vindo faz validação
  • 00:07:45
    faz o parse repassa para alguém tratar
  • 00:07:47
    que vai ser o nosso developer service
  • 00:07:49
    aqui que a gente já vai ver depois se
  • 00:07:51
    precisar ele faz algum tratamento final
  • 00:07:52
    alguma serialização e manda de volta a
  • 00:07:55
    resposta o papel do Controller a gente
  • 00:07:57
    acabou de ver que já tá sendo feito
  • 00:07:58
    vamos agora criar rapidinho a nossa
  • 00:08:00
    entidade pra gente poder interagir com o
  • 00:08:02
    banco de dados dentro do developer
  • 00:08:03
    service Essa vai ser a configuração do
  • 00:08:05
    Type RM ela vai ser feita em dois
  • 00:08:07
    lugares aqui no app module antes do
  • 00:08:10
    developer module dá aqui um enter para
  • 00:08:12
    criar espaço e faz Type or RM module P
  • 00:08:16
    for Root Esse é o método que você usa
  • 00:08:18
    quando você tá fazendo configuração a
  • 00:08:20
    nível da aplicação aqui dentro a gente
  • 00:08:22
    vai especificar que o nosso Type urm vai
  • 00:08:24
    trabalhar com type sqlite em outro vídeo
  • 00:08:26
    a gente faz outro banco de dados mas
  • 00:08:28
    hoje a ideia aqui é simplicidade
  • 00:08:29
    Database que vai ser o nome do arquivo
  • 00:08:31
    vai ser db.sql mesmo entities a gente
  • 00:08:35
    precisa que ele varra o projeto e pegue
  • 00:08:37
    automaticamente pra gente as
  • 00:08:39
    configurações de todas as nossas
  • 00:08:40
    entidades então para isso tem essa
  • 00:08:42
    sacadinha aqui ó pega o diretório da
  • 00:08:43
    aplicação e varre dentro de todas as
  • 00:08:45
    pastas todos os arquivos que terminam em
  • 00:08:48
    ponto entity pon TS ou PJS por fim uma
  • 00:08:51
    propriedade aqui ó sincronize true que
  • 00:08:54
    você não pode usar em aplicação de
  • 00:08:55
    produção tá isso aqui é só para
  • 00:08:57
    desenvolvimento mas o skite também é um
  • 00:08:59
    um banco que é mais apropriado para
  • 00:09:00
    desenvolvimento Isso aqui é uma demo
  • 00:09:01
    rápida a gente vai revisitar isso aqui
  • 00:09:03
    em outros vídeos trazendo um banco que
  • 00:09:04
    você pode levar pra produção e daí ao
  • 00:09:06
    invés de usar isso daqui sincronize true
  • 00:09:08
    a gente vai usar migrations Mas isso é
  • 00:09:10
    outro papo feita essa configuração aqui
  • 00:09:11
    no app modu a gente vai no developers
  • 00:09:14
    modu fazer uma coisa parecida então aqui
  • 00:09:16
    ele não tem a sessão imports a gente
  • 00:09:18
    cria coloca aqui o Type or RM módulo de
  • 00:09:20
    novo só que ao invés de ser for Root é
  • 00:09:22
    for feature e passa um Array com todas
  • 00:09:26
    as nossas entidades desse módulo que no
  • 00:09:28
    caso é só a developer que a gente já vai
  • 00:09:30
    ver agora isso aqui era só configuração
  • 00:09:32
    do Type RM tá pode fechar esses caras
  • 00:09:34
    vamos aqui no entities developer entity
  • 00:09:37
    essa classe aqui Vai representar o
  • 00:09:39
    registro do developer no nosso banco de
  • 00:09:40
    dados quais propriedades quais colunas
  • 00:09:43
    ela vai ter lá vamos começar abrindo
  • 00:09:44
    aqui o Create developer que a gente vai
  • 00:09:46
    aproveitar a maior parte fechei aqui
  • 00:09:48
    colei para cá a diferença é que a gente
  • 00:09:50
    não tem que fazer mais validação aqui a
  • 00:09:51
    gente só vai dizer que esses caras são
  • 00:09:53
    colum para serem colunas lá no banco de
  • 00:09:55
    dados a gente vai ter uma coluna
  • 00:09:57
    adicional que vai ser o ID a @primary
  • 00:09:59
    colum é a coluna chave aqui da nossa
  • 00:10:02
    tabela só que eu quero fazer uma graça
  • 00:10:03
    aqui pro nosso ID ter esse formato aqui
  • 00:10:06
    ó Dev underline uma cadeia de caracteres
  • 00:10:08
    Alfa numéricos para fazer isso a gente
  • 00:10:10
    vai importar a nossa biblioteca nano ID
  • 00:10:12
    que a gente instalou lá no começo tem
  • 00:10:14
    que usar o const nano ID fazendo um
  • 00:10:17
    require porque essa biblioteca aqui na
  • 00:10:19
    versão que a gente instalou ela só
  • 00:10:21
    funciona assim ela não faz Import o
  • 00:10:23
    typescript vai reclamar a gente manda
  • 00:10:24
    ele calar a boca aqui ó e daí eu vou
  • 00:10:26
    criar o método generate ID que vai ser o
  • 00:10:29
    responsável por gerar o ID da classe dis
  • 00:10:31
    pid igual uma interpolação que vai vir
  • 00:10:34
    Dev underline e dentro é só chamar nano
  • 00:10:37
    ID esse método vai ser chamado quando
  • 00:10:40
    before insert por último tem que anotar
  • 00:10:43
    a própria classe com entity eu vou
  • 00:10:46
    colocar aqui o nome developers no plural
  • 00:10:48
    para ele criar a tabela com esse nome
  • 00:10:49
    pronto com isso aqui a gente deu todas
  • 00:10:51
    as informações que o Type ORM precisa
  • 00:10:53
    para criar uma tabela com essas colunas
  • 00:10:56
    com essas configurações pra gente no
  • 00:10:57
    banco de dados então bora trabalhar com
  • 00:10:59
    ela aqui no developer service deixa eu
  • 00:11:01
    renomear esses dois caras aqui pra dto o
  • 00:11:03
    nest já traz embutido um negócio muito
  • 00:11:05
    legal que chama injeção de dependência
  • 00:11:07
    antes de avançar Vamos fazer uma mágica
  • 00:11:09
    aqui que eu já explico no construtor da
  • 00:11:11
    classe que eu tô escrevendo agora eu vou
  • 00:11:13
    receber uma Instância do banco de dados
  • 00:11:15
    Private readon repositório que vai ser
  • 00:11:18
    do tipo repositório mesmo lá do Type RM
  • 00:11:22
    do tipo developer que é a nossa entidade
  • 00:11:24
    que a gente acabou de definir isso que a
  • 00:11:26
    gente tá recebendo aqui no construtor é
  • 00:11:27
    o que a gente chama de uma dependência
  • 00:11:29
    essa classe aqui para funcionar ela vai
  • 00:11:32
    precisar receber o repositório de algum
  • 00:11:33
    lugar alguém vai ter que passar para ela
  • 00:11:35
    e não vai ser a gente por isso que eu
  • 00:11:37
    falei que é mágica Então olha só que
  • 00:11:38
    legal voltando aqui no developers
  • 00:11:41
    Controller a gente já tinha o mesmo
  • 00:11:42
    esquema acontecendo pro Controller
  • 00:11:44
    funcionar ele precisa de um developer
  • 00:11:46
    service aqui mas quem forneceu isso para
  • 00:11:48
    ele não foi a gente a gente não fez New
  • 00:11:50
    developers Controller em nenhum lugar
  • 00:11:52
    certo acontece que tem essa configuração
  • 00:11:54
    aqui do módulo ó onde a gente tá
  • 00:11:55
    especificando Quem são os controllers no
  • 00:11:57
    caso a gente só tem um e o nest colocou
  • 00:11:59
    isso aqui pra gente automaticamente
  • 00:12:01
    quando a gente gerou o código ele tem o
  • 00:12:03
    provider aqui ó que é uma lista de todas
  • 00:12:05
    as dependências que esse Controller ou
  • 00:12:07
    quaisquer outros podem vir a receber o
  • 00:12:09
    developer service se a gente vem aqui no
  • 00:12:11
    developer service ele tá marcado como
  • 00:12:12
    injectable aqui ó ele pode ser injetado
  • 00:12:15
    como Dependência em quem precisar dele
  • 00:12:17
    quem precisa dele o Controller tá
  • 00:12:20
    precisando dele aqui no Construtor Como
  • 00:12:21
    que o nest sabe amarrar tudo através
  • 00:12:23
    dessa configuração que a gente acabou de
  • 00:12:25
    dar uma olhada acontece que o developer
  • 00:12:27
    service agora precisa de uma nova
  • 00:12:29
    dependência a gente acabou de pedir aqui
  • 00:12:30
    no consultor uma Instância desse
  • 00:12:32
    repositório é o próprio nest que vai
  • 00:12:34
    fornecer E como que ele sabe quem ele
  • 00:12:36
    vai fornecer e como ele vai fornecer foi
  • 00:12:38
    aquela configuração que a gente fez aqui
  • 00:12:39
    no app module quando a gente importou o
  • 00:12:41
    Type RM modu e fez o for Root aqui a
  • 00:12:43
    gente tava configurando a conexão com o
  • 00:12:45
    nosso banco de dados depois disso O
  • 00:12:47
    nestjs cuida de chamar o Type ORM para
  • 00:12:50
    ele instanciar a conexão com o banco de
  • 00:12:51
    dados e ficar disponível para quem
  • 00:12:53
    precisar dele então por causa disso
  • 00:12:55
    quando a gente vem agora no developer
  • 00:12:56
    service e recebe aqui ou pede um
  • 00:12:59
    repositório de desenvolvedor o nest já
  • 00:13:01
    sabe como entregar isso aqui pra gente
  • 00:13:02
    por causa das configurações então aqui é
  • 00:13:04
    só usar para criar um desenvolvedor no
  • 00:13:06
    banco de dados Basta fazer um const
  • 00:13:08
    developer iG this. repositorio P Create
  • 00:13:12
    passando aqui o dto olha que legal ele
  • 00:13:14
    já devolve pra gente uma Instância de
  • 00:13:16
    developer daí é só dar um return dis P
  • 00:13:19
    repositório de novo Ponto save passando
  • 00:13:21
    no developer esse cara agora vai pro
  • 00:13:24
    banco de dados e nesse momento ele vai
  • 00:13:26
    executar aquele nosso generate ID para
  • 00:13:28
    criar o no formato que a gente pediu
  • 00:13:30
    como que a gente faz para retornar todos
  • 00:13:31
    os desenvolvedores do banco de dados
  • 00:13:33
    return this. repository PF no caso do
  • 00:13:37
    find One vai ser bem parecido com esse
  • 00:13:39
    então eu vou copiar e colar Só que vai
  • 00:13:40
    ser find One by passando para ele o ID
  • 00:13:44
    como propriedade de um objeto Lembrando
  • 00:13:46
    que agora o nosso ID é um string já
  • 00:13:47
    vamos aproveitar para consertar pra
  • 00:13:49
    string todos esses aqui de baixo como
  • 00:13:51
    que fica um update antes de atualizar eu
  • 00:13:53
    preciso encontrar o desenvolvedor então
  • 00:13:56
    eu vou substituir o que tá aqui por essa
  • 00:13:57
    linha só que eu vou fazer um const
  • 00:13:59
    developer igual a weight para isso o
  • 00:14:02
    nosso método precisa ser ayn chamo dis P
  • 00:14:05
    repositor pmer para jogar para dentro de
  • 00:14:08
    developer as propriedades que vieram no
  • 00:14:10
    dto depois eu faço um return this.
  • 00:14:12
    repositor P save de novo sem esquecer de
  • 00:14:15
    passar o developer aqui dentro só uma
  • 00:14:17
    coisa que a gente precisa verificar é se
  • 00:14:19
    não tiver desenvolvedor encontrado a
  • 00:14:21
    gente vai retornar nulo aqui para não
  • 00:14:23
    tentar operar em dado que não existe o
  • 00:14:25
    remove vai ser bem parecido então eu vou
  • 00:14:27
    copiar esse código aqui vou colocar o
  • 00:14:29
    remove como um assíncrono A diferença é
  • 00:14:31
    que aqui não tem atualização para fazer
  • 00:14:33
    e aqui eu só faço um remove salvei e a
  • 00:14:36
    nossa classe de serviço tá pronta veja
  • 00:14:38
    que o nosso Controller quebrou por qu
  • 00:14:40
    ele tá tentando converter o ID para
  • 00:14:42
    número antes de passar para dentro lá do
  • 00:14:43
    serviço a gente agora tá dizendo que é
  • 00:14:45
    string Então é só tirar esse mais e bora
  • 00:14:47
    fazer uns testes que api já deve estar
  • 00:14:48
    funcionando listando os desenvolvedores
  • 00:14:51
    e a conexão foi rejeitada bomba vamos
  • 00:14:53
    saber o que aconteceu Olha só ele tá
  • 00:14:55
    dizendo que não conseguiu resolver a
  • 00:14:57
    dependência do developer service não
  • 00:14:59
    conseguiu resolver o repositório vamos
  • 00:15:02
    ver aqui ah mas é claro quando tá
  • 00:15:04
    injetando o repositório com o Type RM
  • 00:15:06
    tem que fazer isso aqui ó
  • 00:15:08
    @inject repositor developer também por
  • 00:15:12
    que que tem que fazer essas coisas a
  • 00:15:13
    gente sabe que o JavaScript não é uma
  • 00:15:15
    linguagem tipada o typescript até É mas
  • 00:15:18
    ele é compilado para JavaScript no final
  • 00:15:20
    das contas e como o JavaScript não tem
  • 00:15:22
    tipos Então os tipos do typescript São
  • 00:15:24
    Perdidos na compilação a gente precisa
  • 00:15:25
    às vezes fornecer mais informações para
  • 00:15:28
    Engine do nest saber como é que ela tem
  • 00:15:30
    que operar é isso que a gente tá fazendo
  • 00:15:31
    com esses decorators aqui deve est
  • 00:15:33
    resolvido ó a aplicação já inicializou
  • 00:15:35
    numa boa e agora então sim deve
  • 00:15:37
    funcionar sim legal retornou pra gente
  • 00:15:39
    um arrei vazio não tem ninguém
  • 00:15:40
    cadastrado vamos cadastrar o nosso
  • 00:15:42
    primeiro Olha foi cadastrado e retornou
  • 00:15:44
    pra gente o desenvolvedor com o ID no
  • 00:15:46
    formato que a gente criou vou criar
  • 00:15:48
    vários aqui clicando aqui se pedir a
  • 00:15:50
    lista a gente já vê que tem vários no
  • 00:15:51
    banco de dados vamos pegar um ID do
  • 00:15:53
    primeiro e colocar na URL do nosso ent
  • 00:15:56
    Point para mandar o send request pronto
  • 00:15:58
    veio só ele vamos atualizar esse cara
  • 00:16:00
    ele tá com o e-mail joho @me.com vai
  • 00:16:02
    virar teste com esse ID send request
  • 00:16:05
    Pronto já devolveu pra gente alterado se
  • 00:16:07
    a gente pedir a lista dos
  • 00:16:08
    desenvolvedores Olha lá ele com o teste
  • 00:16:10
    acme e vamos tentar agora excluir esse
  • 00:16:13
    desenvolvedor send request Pronto ele
  • 00:16:15
    retornou pra gente o cara excluído
  • 00:16:17
    retornou 200 Ok bônus desse vídeo vamos
  • 00:16:20
    só dar uma ajeitada no Controller para
  • 00:16:21
    quando a gente der um get num cara com
  • 00:16:23
    ID que não existe ele vai retornar o 404
  • 00:16:26
    não encontrado e quando a gente excluir
  • 00:16:27
    um desenvolvedor ele também não precisa
  • 00:16:29
    retornar os dados do desenvolvedor
  • 00:16:31
    excluído e tem que retornar 204 no
  • 00:16:33
    content para isso Então vem aqui no
  • 00:16:35
    Controller e faz o seguinte o delete vai
  • 00:16:38
    trabalhar com http code
  • 00:16:41
    204 no caso do find One do update e do
  • 00:16:45
    remove eles vão ser assíncronos e o
  • 00:16:48
    corpo deles também vai mudar um
  • 00:16:49
    pouquinho ao invés de retornar logo de
  • 00:16:51
    cara vai ser const developer igual a
  • 00:16:54
    weight o resultado lá da camada de
  • 00:16:56
    serviço só que if not developer então
  • 00:17:00
    throw New not found Exception se deu
  • 00:17:03
    tudo certo return developer exceto no
  • 00:17:06
    caso do remove que a gente não quer
  • 00:17:08
    retornar developer nenhum com isso agora
  • 00:17:11
    se a gente fizer send request beleza not
  • 00:17:13
    found se eu tento excluir um
  • 00:17:15
    desenvolvedor que não existe também D
  • 00:17:16
    not found Mas vamos criar aqui um
  • 00:17:18
    desenvolvedor pegar ele por esse ID
  • 00:17:21
    consultar aqui para ver se continua
  • 00:17:22
    funcionando continua e ao excluir esse
  • 00:17:25
    desenvolvedor a gente tem que receber
  • 00:17:29
    sem nenhum conteúdo e é isso mesmo fala
  • 00:17:32
    aí Espero que você tenha gostado Esse
  • 00:17:34
    vídeo foi meio relâmpago Sem explicar
  • 00:17:36
    muita coisa mas eu só queria mesmo dar
  • 00:17:38
    uma visão geral e mostrar como pode ser
  • 00:17:40
    rápido botar uma pii no ar deixa um like
  • 00:17:42
    e se inscreve nos próximos vídeos eu
  • 00:17:44
    quero ir mostrando cada uma dessas
  • 00:17:45
    coisas com mais detalhes a gente vai
  • 00:17:47
    fazer teste unitário teste integrado
  • 00:17:49
    vamos trocar o banco de dados de um
  • 00:17:51
    selite para um postgre E aí a gente vai
  • 00:17:53
    ter que mexer com migration também
  • 00:17:55
    autenticação autorização um esquema
  • 00:17:57
    básico de permissão coisas que você
  • 00:17:59
    precisa numa aplicação real e nisso o
  • 00:18:02
    nest ajuda muito porque ele já vem com
  • 00:18:04
    compatibilidade com uma série de pacotes
  • 00:18:06
    da comunidade quer fila tem o bu quer
  • 00:18:08
    banco de dados tem o mongu pro Mongo e o
  • 00:18:11
    Type ORM para banco de dados relacionais
  • 00:18:13
    o desafio de hoje é simples abre lá a
  • 00:18:16
    documentação do nest e dá uma lida faz o
  • 00:18:19
    quick start dos caras não seja aquele
  • 00:18:21
    deve que prefere passar 5 horas
  • 00:18:23
    debugando um erro do que 5 minutos lendo
  • 00:18:25
    a documentação pô falou e até a próxima
  • 00:18:28
    l
الوسوم
  • NestJS
  • API
  • Backend
  • TypeScript
  • TypeORM
  • SQLite
  • CRUD
  • Validação
  • Injeção de Dependência
  • Desenvolvimento Rápido