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