Olá pessoal eu sou a Juliana Bezerra e nesse vídeo vamos resolver mais um desafio de vaga e esse é especificamente para backing de Júnior Pois é a gente vai explorar agora Um Desafio diferente e ao longo do desafio vou passar muitas dicas valiosas mas só para quem assistir até o final Ok por isso fica por aqui no vídeo esse aqui é o desafio que a gente vai resolver tá E parece algo clichê mas de fato é um desafio para uma vaga e é para uma vaga Junior de back and Então faz todo sentido a gente
tem a famosa tudo list aqui só que é claro gente todo mundo já deve ter implementado a sua tudo list então para você se destacar aqui nesse desafio Você precisa fazer algo mais algo que os teus colegas não fizeram e a proposta aqui é a gente conseguir fazer uma implementação que realmente traga algum conteúdo adicional para que os avaliadores fiquem impressionados com o nosso resultado então é por isso que a gente vai fazer aqui a melhor Tudo lixo possível no tempo que temos e aqui olhando a descrição perceba que a gente pode usar qualquer linguagem
de programação e Framework É claro que eu vou usar o Java e o Spring o Spring boot para isso e a aplicação precisa ser um sistema de gerenciamento de tarefas com as opções de criar tarefa visualizar editar e excluir essa é a descrição dada a partir daí a gente toma tira né as nossas conclusões e escolhe como a gente vai projetar o nosso projeto como a gente vai projetar o projeto como a gente vai implementar o nosso código E aí tem alguns requisitos também eles pedem explicitamente para usar um banco de dados não é fazer
tudo lista em memória Tá certo tem que usar um banco aqui ele também informa os campos mínimos para essa entidade de tarefa de tudo que é o nome da inscrição realizado e prioridade e informa que a gente vai ter que criar esse cruze que é basicamente uma implementação de todas essas funcionalidades que eu listei aqui em cima e finalmente aqui no desafio temos algumas instruções para resolvê-lo Então veja aqui que ele pede né para trabalhar com convites convites pequenos documentar como executar essa aplicação de escrever as funcionalidades por causa disso já sabemos que precisamos de
um Reading por projeto Ok então basicamente é seu desafio que a gente vai resolver e agora a gente vai para o código para implementar a nossa solução então estou aqui na minha ideia você pode usar a ideia que você preferir tem gente que gosta de inteligente eu uso Por simplicidade vs code ele me atende nas minhas necessidades Tá certo Por isso a gente vai começar aqui então criando o projeto para isso eu vou usar o comando shift contra o p para abrir o menu a gente vai criar com Springs era um projeto maven vou usar
aqui a versão mais atual do springboot estável nesse momento que atrás colocar aqui um pacote vou chamar aqui de tudo lista desafio tudo lista é um jarro 17 e a gente vai usar aqui algumas dependências Então a gente vai usar aqui o Spring web para implementar essa payra sfo a gente vai usar o Spring data JPA a gente vai usar também o débitos para facilitar o desenvolvimento nessa solução a gente vai usar o banco mais quero por enquanto é isso vou dar enter aqui ou clicar Vou salvar meu projeto aqui nessa pasta e projeto já
pode ser aberto vou abrir aqui e agora a gente tem o projeto criado agora a gente vai fazer aqui a estrutura desse projeto de pacotes e você Júnior não precisa se preocupar em aprender a criar quem aprender hexagonal e aprender essas arquiteturas feitas para sistemas que são mais robustos que são maiores que precisam realmente de um desacoplamento de freio a gente pode usar aqui a forma mais simples de divisão de pacotes a divisão em camadas Então vou criar aqui um pacote para entidade um pacote para repositório um pacote para o Service um pacote para camada
web para os controles Vão colocar controle fica bem cara de mvc isso aqui e por enquanto é isso seriam esses pacotes aqui tá algo bem intuitivo mesmo então projete estruturado já concluímos o segundo passo aqui embora eu não esteja aqui comitando cada alteração o indicado aqui em cada etapa dessas que eu tô mostrando você vai fazendo os pequenos convites o importante é claro que os convites sejam sempre de códigos que executam para você não introduzir no convite um código com bug Ok o código precisa compilar e executar então finalizada aqui a estrutura de camadas agora
a gente vai começar trabalhando com domínio dessa aplicação ou seja entidades repositório e service esse serve esse aqui é basicamente o corda Nossa aplicação vai ter todas as regras de negócio Então primeiramente a gente começa definindo aquela entidade tudo que foi especificada lá no desafio então isso aqui é uma entidade por isso eu coloco essa anotação do JPA eu vou informar o nome da tabela porque eu quero que ela seja chamada de tudo sempre no plural Isso é uma convenção se você prefere chamar no singular não tem problema eu gosto de usar essa convenção do
plural E aí a gente vai descrever cada propriedade dessa tudo uma propriedade que não foi listada lá mas que é necessário quando a gente trabalha com banco de dados é o id o identificador único desse registro Então a gente tem que ter essa propriedade e essa propriedade ela é uma de isso aqui é que sinaliza para mim que ela vai ser o ardida essa entidade e eu posso criar uma estratégia geração de valores para que esse é disso seja gerado de forma sequencial lá no banco e eu não preciso informá-lo Quando eu for criar um
estudo então vou usar uma estratégia aqui de a ideia show agora a gente vai ter as outras propriedades então vou ter o nome vou ter também a descrição [Música] vou ter aqui a informação se essa tarefa foi realizada ou não Acho que o nome lá que tá escrito realizado e uma prioridade e prioridade são essas informações pedidas nos desafio e como isso aqui é uma classe né a gente tem que gerar os gats E saters então vamos colocar aqui para gerar gathers gerados e com isso a gente conclui a configuração da entidade Tudo ótimo já
concluímos essa parte aqui do domínio da aplicação E aí agora a gente vai criar o repositório para a gente poder interagir com o banco de dados essa aplicação é importante ressaltar que ela vai ter acesso ao banco então ela vai buscar tudo do banco vai criar vai atualizar tudo isso interagindo com o banco mas que é l no nosso caso e por causa disso a gente vai criar aqui uma tudo repositório os repositórios com Spring da pele sempre são interfaces que estendem uma interface provida pelo próprio Spring e nesse caso que a gente tá usando
JPA seria interface JPA Opa JPA repositório na verdade esse aqui e aqui no genérics a gente informa A Entidade e o tipo da do ID da santidade então com isso a gente já se especificou aqui o repositório e ele já está pronto para interagir com o banco simples assim e com o repositório Pronto agora a gente vai criar o serviço que vai ter as regras de negócio então a gente vai criar aqui a tudo Service esse cara para ser um serviço no spring para ser passível de injeção a gente anota com arroba Surf essa anotação
e aqui a gente vai colocar todas as operações que a gente vai fazer e agora entra uma parte importante de desafios e até da sua conduta como profissional de ti Quer pensar aqui de forma crítica A única especificação que é dada que essa aplicação vai ser um Api para tudo isso e se você já usou algum Tudo lixo você sabe que normalmente a gente visualiza todas as tarefas lá na tela só Então faz sentido aqui é uma possibilidade tá nesse caso a gente pode assumir que todas as operações vão retornar sempre a lista completa de
tudo isso atualizada para Fronte Isso fica muito mais tranquilo né de trabalhar porque ele não tem que fazer uma operação e depois atualizar internamente a lista de tudo isso porque api já está fazendo isso para ele então é muito interessante a gente como programador back-ind pensar nas integrações com outros times né com Outras aplicações nesse caso com aplicação de Frontier por isso que todas as nossas operações aqui vão retornar uma lista de tudo então vou ter o create eu vou ter deixa eu colocar pública aqui importar a lista eu vou ter o create eu vou
ter a listagem de todos eu vou ter também o update e eu vou ter o de Elite e para executar todas essas operações no serviço o que que a gente precisa a gente precisa do repositório que a gente acabou de criar então a gente declara ele aqui a gente vai usar uma injeção com Construtora isso aqui é importante tá para quem é Júnior e não trabalha muito tempo com Spring Existem duas formas de fazer injeção dos das dependências dos componentes de software via tributo na verdade três tá via tributo aqui com o alto Wire via
método caso eu tivesse criado um getset para atributo aqui e via Construtor e essa forma via construtora que eu não preciso colocar esse autoire ele tá implicitamente sendo utilizado pelo frame então normalmente a gente vê a galera do Framework mesmo recomendando fazer injeção com esse tipo se você tiver curiosidade sobre mais detalhes a respeito de injeção de dependência eu vou deixar um card aqui de um vídeo muito legal muito prático para você assistir Tá bom então voltando aqui para nossa aplicação a gente vai ter esse tudo repositório sendo injetado e a gente vai poder usar
ele para fazer todas as operações no caso da criação o método de criação receberia tudo e aqui a gente só salvaria tudo então já temos essa operação sendo realizada na listagem a gente não recebe nada é só para retornar todas as estruturas então a gente manda retornar tudo aqui tá certo e uma coisa legal que a gente pode fazer e é novamente aí pensando nesse senso crítico de você como programador embora tenham tido poucos requisitos para o desafio isso normalmente é o que acontece tá o cliente às vezes não descreve bem o que ele quer
e aí a gente acaba descobrindo quando entrega o software e ele fica insatisfeito então uma coisa que sempre a gente encontra nessas tudos é ordenação a gente quer ver primeiro na lista as maiores prioridades e depois uma ordenação ali por nome né por string por texto ordenação alfabética então para isso a gente vai usar aqui um recurso de ordenação tá então a gente vai usar aqui o objeto e aqui a gente pode usar o método bye estático para informar que propriedades a gente vai usar para ordenação então aqui por exemplo eu quero usar um sorte
vai e eu vou ordenar primeiro por prioridade e eu quero as maiores prioridades em cima então eu vou ordenar de forma descendente depois disso a gente pode encadear com outra cláusula de ordenação Colocaram um índio aqui e aqui dentro do Andy a gente colocaria o sorte bye E aí colocaria as próximas propriedades nesse caso eu quero um nome da tarefa também sendo considerado e para ele vai ser uma ordem ascendente então esses carinhas aqui me Retornam um objeto do tipo sorte que é um objeto de ordenação e eu posso passar esse objeto de ordenação aqui
para consulta e retornar o resultado encontrado Então agora eu tenho uma consulta ordenada primeiro pela prioridade de forma descendente maiores prioridades em cima e depois pelo nome da Dudu tava conferir aqui se é nome mesmo é nome tá bom então tá tudo certo agora o Create aqui ele tá criando o tudo mas não tá listando e por isso que eu quis fazer o list primeiro porque uma coisa importante aqui dentro da programação é você não se repetir É o princípio e por causa disso a gente não vai fazer aqui a chamada dali do findel né
da listagem montando objetos sorte não a gente só precisa chamar um método que já tem essa implementação que é esse list e todo mundo que retornar a lista vai retornar esse mesmo método aqui então a gente colocaria aqui para todo mundo retornar de forma centralizada essa lógica de listagem ordenada muito bacana isso aqui né Isso aqui é importante tá se você se pegar repetindo o código lembra de refaturar depois para remover as repetições Então agora que o update como é que ele vai acontecer a gente vai receber a tudo o que precisa ser atualizada E
aí a gente vai chamar o tudo repositório para salvar essa atualização só isso então é algo simples e no de Elite mesma coisa a gente vai chamar aqui o de Elite só que o de Elite a gente vai receber apenas o ID da tarefa a gente não vai receber a tarefa completa Tá certo Normalmente quando a gente faz api com delação a gente só passa o identificador único daquele recurso que você quer remover E aí eu uso o método que delite bye e Prontinho eu já tenho meu serviço todo implementado fazendo criação consulta atualização e
remoção no banco de dados com isso a gente conclui essa parte do domínio agora o próximo passo é a gente fazer aqui a camada web que é basicamente onde a gente vai interagir com o nosso serviço então a gente vai criar aqui um tudo Controller a gente vai usar aqui Opa a gente vai usar aqui um resto Controller ele vai atender na rota tudo isso Ok E aí a gente vai ter todas as operações que a gente listou aqui no service Então a gente vai ter um Create Create que Retornam a lista de tudo esse
Cray que vai receber tudo vamos importar aqui tudo que precisa ser importado show a gente vai ter também a lista a listagem de tudo a gente vai ter o update de tudo e a gente vai ter a deleção de Elite de tudo e para executar todas essas operações no controle a gente só precisa ter um Service tudo certo que foi o que a gente acabou de criar por isso que a gente está fazendo nessa ordem porque uma ordem intuitiva de trabalhar tá começando lá da entidade do domínio e subindo as camadas E aí com essa
tudo a gente faz a injeção que a gente já conhece então vamos lá injeção via Construtor legal fizemos aqui E aí a gente usa tudo para retornar tudo service retornar o create a gente usa ela aqui também para retornar a lista de todos a gente usa ela aqui para retornar a atualização de tudo isso inclusive esse cara vai receber uma tudo aqui para atualizar e finalmente a gente usa aqui para remover tudo também passando que a gente ainda não criou vou criar aqui como parâmetro desse método o ID para remoção Ok eu montei a estrutura
do meu controlador Agora eu preciso Expor essas operações para criarem de points para criar os pontos de acesso ao meu serviço web então Create por exemplo a gente vai expor ao verbo post o verbo http post e a gente tem uma notação para isso chamada post map só que além de expor esse anti Point para o verbo post Ou seja eu vou chamar essa rota aqui passando post como verbo http eu preciso dizer que essa tudo vai estar sendo enviada no corpo da requisição aqui para listagem a gente vai fazer algo similar só que aqui
a gente usa o get como verbo E aí a gente não precisa passar nada aqui nos parâmetros aqui agora a gente vai usar o verbo de atualização e nesse caso aqui a gente também vai passar um corpo de requisição né a tudo que precisa ser atualizada com os dados de atualização e finalmente no de Elite a gente vai usar esse verbo de Elite do http só que aqui tem um detalhe a mais a gente vai passar o ID para deleção então a gente precisa passar um parâmetro aqui na rota é o que a gente chama
de pés E aí a gente coloca ela entre chaves para dizer que esse valor vai ser recuperado da requisição então quando eu fizer lá minha requisição do Elite barra tudo barra um esse um vai ser interpretado como esse parâmetro de caminho de pé e aí ele vai ser injetado aqui nessa variável então vou ter o valor um nela e vou conseguir remover a tudo um Tá certo e é basicamente isso então a gente já tem aqui o controlador pronto para ser utilizado com isso a gente conclui a configuração do controlador e agora falta o último
passo para a gente fechar aqui a primeira versão executável da nossa pi que é configurar as propriedades da aplicação essa é uma aplicação que vai ser conectar um banco de dados Então eu preciso informar a forma de se conectar Qual é a URL de conexão usuário senha para isso e algumas propriedades do JPA para a gente ter as estruturas de dados criadas automaticamente Então a gente vai usar essas propriedades aqui tá certo para a gente poder usar esse banco na nossa aplicação Você vai precisar acessar o seu mais ql no meu caso eu tenho uma
versão local aqui instalada com esse usuário e essa senha essas credenciais e aqui dentro eu vou usar o comando create E aí eu posso usar o tudolist como o meu banco e mostrar aqui que não tem nenhuma tabela no momento criada E aí a gente tem várias estratégias para criar essas tabelas que representam as entidades da nossa aplicação nesse caso a tabela que vai representar as tubos aqui Por simplicidade a gente vai fazer essa criação das tabelas automaticamente com o JPA então JPA faz o quê ele vai ler essa entidade observar essas anotações aqui e
vai criar as propriedades os campos as colunas respectivas no banco de dados ele vai fazer um mapeamento né É isso que um RM faz o RM nesse caso é o hibernante é implementação da especificação JP que a gente tá usando então usando esse valor update a gente vai ter tudo isso de forma automática e agora a gente já pode executar a nossa aplicação Então vamos rodar aqui aplicação rodou nem deu erro muito bom vamos aqui para o terminal e eu vou mostrar aqui que já foi criada a tabela tudo a gente pode inclusive descrever as
suas propriedades veja que tudo foi criado nos tipos correspondentes inclusive o Adi como chave primária e alto incrementável então tá Lindo tá perfeito tá funcionando vamos ver na prática agora se fazendo as requisições aqui isso funciona de fato vamos primeiro criar uma tarefa com o http eu vou deixar o link dessa ferramenta na descrição aqui do vídeo para vocês mas é uma ferramenta bem bacana para fazer requisições htp de forma simples se você gosta do Postman use o Postman também tem outros plugins aqui no algumas instituições diversos code para usar eu gosto dessa ferramenta porque
eu tô acostumada a fazer com linha de comando tá então aqui o que eu tô fazendo criando a requisição post passando essas propriedades Então vou dar entre aqui veja que foi criada e foi retornada a tarefa código 200 então a gente até pode criar mais uma tarefa para brincar aqui vamos lá mais uma tarefinha aqui ó mais uma apareceu temos duas cenas listadas podemos usar também a listagem de todos e olha só aparecem as duas tarefas a gente também pode fazer atualização aqui da tudo um vamos lá fiz atualização perceba as propriedades realmente foram trocadas
de acordo tá até Vou colocar aqui o realizado também vamos ver se ele atualiza atualizou tudo então atualização também tá funcionando e agora a gente pode remover essa tarefa com esse comando Então vamos remover a tudo um e agora sua listada a tudo 2 então a gente conseguiu aqui fazer a implementação de uma tudolist rapidamente com os requisitos que foram dados para o desafio agora que a gente concluiu aqui o desenvolvimento do projeto e já testamos e vemos que tá tudo funcionando falta um detalhe super importante que precisa estar presente em todos os teus projetos
de portfólio ou nos projetos que você faz para resolver esses desafios de vagas o que falta são testes automatizados Tá certo isso aqui é um requisito super importante as empresas hoje em dia trabalham com testes entendem a sua importância na entrega de software de qualidade por isso você como Júnior precisa ser capaz de testar suas aplicações de forma automatizada o que a gente fez aqui foi um teste manual agora a gente vai escrever um teste automatizado para nossa aplicação E para isso a gente vai usar essa classe que foi criada para ser o nosso Switch
de testes aqui dentro da pasta de testes perceba que já foi criado esse arquivo isso já mostra que o frameworks como Spring esperam que você sempre implemente testes nas suas aplicações Tá ok e qual é a ideia aqui dos Testes a gente precisa explorar cenários de sucesso que é o que a gente se chama de caminho feliz e cenários de erro também para todas as funcionalidades Então a gente vai fazer aqui o primeiro cenário de teste para funcionalidade de criação de tudo para que fique claro como a gente implementa esse tipo de teste Tá bom
então vamos lá vamos começar primeiramente a gente vai criar um método aqui chamado teste Crate tudo sucesso Esse é o teste do Sucesso E aí a gente vai ter também o cenário de falha então Sempre vamos ter pelo menos um cenário de sucesso e pelo menos um cenário de falha se fizer sentido né no caso para cada funcionalidade E aí a gente como a gente quer criar aqui uma tudo vamos criar uma variável tudo para ser utilizada aqui na criação então a gente pode colocar um nome aqui tudo uma descrição de tudo um a realizado
falso e prioridade 1 por exemplo mas é claro tá dando erro de compilação porque eu não criei um Construtor com essas propriedades Então a gente vai criar esse Construtor na tudo vamos ver se tá tudo ok a gente vai ter aqui o nome eu até não vou criar assim tá eu vou criar pelo Wizard do vscode porque aí os nomes já saem corretos Então vamos criar aqui um Construtor com tudo menos o ID vou dar OK agora sim E aí a gente tem a tudo criada para o cadastro e o que falta é chamar aquele
de ponte de criação de tudo isso e a gente faz isso com o cliente htp então vou ter que injetar esse cliente com o autoire aqui como atributo dessa classe de testes e eu vou usar o webts Clint que é um cliente de testes reativo ou seja ele não é como o resto template que funciona com abordagem sim esse cara aqui é uma versão assim como né Desse resto template Por simplicidade entenda que ele é isso tá só que se a gente tentar importar esse cara aqui tentar usar na nossa aplicação a gente precisa também
adicionar a dependência do webs então adiciona ele aqui Weber Flex foi adicionado aqui tá a gente até Pode colocar um escopo de teste para ele ele só vai ser usado para testes volto para cá e aí a gente vai fazer a requisição Então vamos lá eu vou usar o apps client vou fazer uma chamada post ao recurso com identificador/todos que foi o que eu configurei no meu controlador o corpo da requisição vai ser a tudo que eu acabei de criar aqui a gente usa o método na verdade Body velho não é esse Body tá Seria
o body velho e aí a gente passa o objeto o objeto que vai ser ser realizado nessa requisição a gente faz a requisição e Esperamos um status aqui nesse caso a gente está usando o ok e a gente espera que a resposta seja um dia e som com várias propriedades Então esse Jason para a gente conferir o que que vem na resposta a gente usa o Jason pass e a gente informa para se referir a o nó raiz som a propriedade de raiz o cifrão Tá bom então quando a gente faz isso a gente está
se referindo à lista de tudo isso e aí a gente pode verificar isso aqui é um arreio E além disso a gente pode checar cada propriedade então por exemplo tamanho dessa Rei Qual é Então a gente coloca aqui o cifrão para se referenciar o rei ponto e a gente referencia um método né e aqui a gente pode ver se esse tamanho é igual a o valor esperado que é um como a gente tá usando um teste aqui que vai ter um banco vazio a gente pode considerar que o tamanho é um E aí a gente
vai fazer agora a verificação de cada propriedade Então a gente tem as propriedades nome descrição realizado e prioridade que são a única tudo presente nessa lista de todos que está sendo listada e a gente verifica se as propriedades retornadas foram iguais as propriedades que eu informei aqui certo e aí a gente tem um teste de sucesso só que antes de rodar esse teste a gente precisa informar qual vai ser o banco de dados que a gente vai usar se a gente não informa nada a gente vai usar o nosso maisql que é o banco de
produção é o banco da aplicação então uma alternativa aqui é a gente usar o banco H2 então a gente pode chegar aqui adicionar o H2 no projeto a gente pode também adicionar aqui dentro de teste uma pasta Resorts e informar um application pro pets E aí a gente pode informar que a URL do banco vai ser a de um banco H2 em memória para a gente diferenciar do banco que está sendo usado na aplicação que é o maisql então agora a gente vai usar nos testes o banco H2 Tá certo e aqui para a gente
conseguir rodar essa aplicação num contexto web para subirmos o serviço web de fato a gente tem que configurar aqui um web em vários informar que essa aplicação vai rodar na porta aleatória tá bom E com isso a gente já tem a configuração do primeiro teste e aí a gente pode executar aqui e verificar que ele já tá passando agora que a gente terminou o cenário de sucesso a gente pode pensar no cenário de erro a gente pode fazer a mesma requisição aqui de cima só que agora a gente pode passar uma tudo que a gente
consideraria inválida que seria um nome vazio com a descrição vazia as outras propriedades como são tipos primitivos elas teriam esses valores nulos esses valores de fogo perdão mas essas duas propriedades aqui passadas como vazias tornam essa tudo inválido a gente quer que na nossa aplicação toda tudo tem um nome uma descrição Então a gente tem que fazer um teste para garantir que a aplicação tá funcionando dessa forma e aí a gente faz a requisição aqui e podemos esperar um status bed request dessa forma aqui tá bom É claro que se a gente rodar agora o
que que vai acontecer a gente tem 200 tem um ok porque a gente nunca disse que esses dados aqui vazios seriam Inválidos então agora a gente encontrou um erro no teste e a gente corrige na nossa aplicação então o que que eu vou fazer aqui eu vou abrir a tudo o controle e aqui na criação de tudo a gente tem que dizer que esse objeto precisa ser válido e para fazer essa validação a gente usa uma dependência nova chamada bem invalidez Então vou colocar ela aqui para o projeto vou adicionar como ela foi adicionada aqui
embaixo era uma dependência de desenvolvimento eu vou tirar daqui que é a parte de testes e vou colocar ela mais para cima aqui aqui embaixo não mais quero Ok e agora eu posso dizer que essa tudo precisa ser um objeto válido com essa notação aqui do jacar tá valedation então vou importar eu disse que ele precisa ser validado esse objeto mas eu não disse Quais as restrições associadas a cada campo é isso que eu vou fazer agora então existe algumas anotações que eu posso usar para dizer por exemplo que o nome não pode ser Branco
posso dizer também que a descrição não pode ser branca e eu tenho essa anotação para isso eu também posso criar anotações de validação customizada caso eu precise de alguma regra mais elaborada então isso aqui é muito legal de usar para fazer validação nas apis e por isso eu tô mostrando aqui para você já deixar o seu projeto de tudo bem robusto bem resiliente tá ok feito isso será que agora vai funcionar vamos rodar aqui para ver o teste e olha só já temos Bad request E com isso a gente já fez o cenário de sucesso
de erro para testar a criação de tudo agora eu deixo como dever de casa para você fazer os outros cenários Depois me conta como é que ficou sua implementação então depois de você realizar esses testes a gente também pode adicionar algumas funcionalidades legais aqui uma dessas funcionalidades é a documentação Swagger dessa p.i o Swagger ele é muito usado para criar o que a gente chama de contrato de api que é uma visão que facilita os usuários da nossa p.i a utilizá-la eles conhecem Quais são os antipontes KP possui e o que cabem de point espera
receber e para a gente usar o swagga é muito simples basta adicionar uma dependência aqui nova que é do spring dogs então quando a gente adiciona dependência o Spring Dog vai procurar os controladores da nossa aplicação usem de points marcados com essas anotações e vai gerar um interface bonitinha ali para a gente visualizar tudo isso Calma que eu não vou te deixar na curiosidade vamos rodar aqui para você ver como é que isso aqui funciona vou Executar aplicação rodando e aqui na URL a gente vai digitar o endereço da aplicação/weger e why que é uma
referência ao visualizadora aqui do SWAG Então vou dar enter acho que é ponto HTML tá bom dessa forma vou dar entre Agora sim a gente tem aqui wendpoint com todas as rotas da aplicação seus verbos o que elas esperam receber então se eu rodar aqui ó a listagem vamos executar aqui ó olha que legal ele mostrou aqui a tudo a gente pode também fazer atualização isso aqui é o corpo da requisição ele já monta aqui baseado naquela entidade a criação de tudo e a delação Então isso é uma forma da gente testar Api para ver
como ela funciona beleza e apenas com uma dependência Você já conseguiu habilitar essa feature na sua aplicação tá muito legal isso aqui isso aqui pode ser um diferencial então lembra de sempre adicionar o swag para facilitar os testes com a sua p.i e finalmente para a gente fechar aqui essa implementação do desafio a gente vai ter a criação do arquivo redmi e Isso aqui é uma parte muito importante do processo porque ela trabalha a sua capacidade de se expressar e de explicar como a sua aplicação funciona o que ela faz sua capacidade comunicativa mesmo tá
bom é importante que você saiba que embora possa parecer intuitivo para você o uso da sua aplicação você tem que lembrar que foi você que desenvolveu quem não conhece a aplicação não sabe quem de points ela possua e não sabe como subir ela como executá-la e é por isso que você precisa criar esse arquivo Ready e ele é um arquivo com extensão MD que se refere a uma anotação chamada Mark Down existem uma sintaxe dessa linguagem vou deixar também um link sobre o mar que dá um aqui para você dar uma olhada aqui na descrição
do vídeo e a gente vai usar um modelo de Reading que eu gosto muito de usar que é esse modelo aqui que eu já tenho pronto eu uso até em outros vídeos aqui do canal que é um modelo bem simples ele ele informa o nome da aplicação uma descrição básica aqui as tecnologias usadas isso aqui é importante para avaliadores é necessário colocar esse tipo de informação para ele saberem que você conhece springbuth mvc Spring data tudo isso tá E também até as práticas adotadas então a gente falou aqui de dry a gente também usou sólido
embora não tenha ficado explícito mas esse modelo que o Framework se propõe ele pensa em única responsabilidade em várias outras questões que são contempladas no sólidos a gente fez uma pay-oeste Então tudo isso aqui é para informar a quem tá avaliando o seu projeto o que você usou conscientemente para elaborá-lo depois é necessário colocar as instruções de execução do programa Java e finalmente Como testar então aqui a gente tá colocando os endpoints mesmo e os modelos aqui para fazer as requisições com http nesse caso que até tá linkado aqui ó nesse redmi Tá bom então
tem tudo aqui é um redmi completo para que a pessoa que queira testar sua pi seja capaz de utilizá-la essa pessoa inclusive vai te agradecer no final é isso essa foi a resolução aqui do desafio de tudo list para vaga de back Angel Júnior e também tem algumas dicas para você incrementar ainda mais essa pi da onde estudada em detox insegurança no docker na bem reativa do Spring dá uma estudada nesses conceitos porque eles podem deixar a sua aplicação Tudo lixo ainda mais diferenciada dos seus colegas Então tem muito dever de casa para você eu
espero que você tenha curtido esse conteúdo vou deixar alguns vídeos de recomendação para você assistir depois então não sai agora do canal ficamos por aqui espero ver vocês nos próximos vídeos [Música]