observemos o detalhe aqui de que nós ainda não Subimos nem o comite local e nem mesmo para a nuvem não fizemos também o push né pra nuvem mas antes da gente fazer essa essa subida é importante que a gente tenha o código minimamente pronto pra gente poder ter uma pequena versão ali pra subida não ir com um monte de sujeira guardada ali naquela versão que a gente quer guardar né então considerando isso né vamos fazer aqui algumas alterações Vamos criar aqui um no controler né um novo Controller para de fato nós lidarmos com uma determinada
entidade eu vou considerar aqui o contexto de cliente tá então vamos criar aqui um Controller adicionar controlador aqui no adicionar controlador a gente tem olha que interessante controlador vazio controlador com ações de leitura e gravação tá então nós vamos nós vamos utilizar aqui o controlador com leitura ações de leitura e gravação aparecendo aí a opção Apenas mvc quando a gente clicar aqui por exemplo ó api né tem aqui a opção controlador api com ações e leitura e gravação já aparece aqui uma outra interface né que não tá mais aplicando aqueles filtros que tá dividido em
grupos de de controladores de uma categoria e de outro tá mas tá basicamente todos eles ainda aqui a gente vai precisar agora é atribuir o nome para o nosso Controller vou chamar aqui de cliente às vezes é optado colocar no plural tá clientes Tá mas eu costumo sempre utilizar aqui no sngulo lá cliente controler adicionar e mantenho esse padrão para todas as outras que eu vou adicionando todos os outros controllers eu vou adicionando então esse cliente Controller ele já veio aqui ó tanto com a mesma construção se gente abrir aqui wef C A gente vai
ver que tá basicamente né basicamente igual né ou seja nós temos aqui o Controller base nós temos os end points né Se a gente for verificar aqui ó é do mesmo jeito né os end points Então a gente vai deixar de usar esse wef cache e vamos passar a utilizar esse cliente outro controle que a gente vai precisar vai ser o da autenticação Então vamos criar aqui um adicionar novamente o controlador vou manter aqui ainda com leitura e gravação a gente não deve não deve utilizar com leitura e gravação tá api com leitura e gravação
O que são esses ações de leitura e gravação aquelas ações né de delete get by ID get list né Por que leitura e gravação tô fazendo tanto leitura dos dados trazendo como também gravação fazendo update né enfim adicionar e vamos chamar aqui de autentic au autentic cal Controller e vamos adicionar aqui ao nosso projeto sempre lembrando que cada adição que a gente tá fazendo ó vem aqui para alterações do Git e o que que nós estamos percebendo aí ó que elementos que foram adicionados né ó um azinho aqui status adicionado tem outro bem aqui status
adicionado temos aqui com o M status modificado e temos Ó demais aqui foram status modificado então né tivemos aí essa adição desses arquivos autenticação nós vamos mover o que tá aqui em weather for Cash tá a autenticação que nós construímos lá no wether for Cash apenas para ver a estrutura do de geração do Token né criamos o endp lá a vai mover para a nossa entidade correta agora né então vamos ver aqui ó htt push login x vamos aqui para nossa autenticação esses demais end points eles poderiam existir em que escopo no escopo que eu
queira por exemplo criar uma nova um novo registro de autenticação Eu quero alterar meus dados de autenticação Professor mas não faria mais sentido se fosse usuário contro pode ser também tá o seu objetivo nessa Entidade fazer a gestão de um de um determinado usuário de vários usuários trazer listas de usuários né encontrar um usuário específico independente que seja para fazer um login né Se for esse objetivo então faria mais sentido usuário controle no objetivo que nós queremos que é um controlle que vai apenas fazer uma validação de autenticação a gente vai colocar o endp para
fazer a autenticação nesse Nosso propósito já tem de legal esse autenticação Então vou vou remover esses esses end points aqui tá esses métodos delete que a gente tá vendo bem aí e legal que já tá trazendo aqui ó explicando ó vai rodar uma chamada do método delete chamando né api o que seria esse api seria o diretório api que é o que tá apontado bem aqui ó no Hot né roteamento da aplicação não tá só Controller né Então nesse H api vai chamar o autenticar controler que é a nossa o nosso Controller barra 5 e
nesse exemplo que tá exibindo aqui não tá exibindo mostrando o nome http delete aqui por quê Porque o delete já tá implícito na solicitação do método delete do protocolo http o cinco tá sendo enviado por parâmetro que nem foi configurado aqui é tema que a gente já discutiu em outra em outra aula nas iniciais sobre a especificação e o funcionamento desses end points então por isso que a gente não utilizou geração automática Tá mas a gente conhece absolutamente todos esses comandos aqui ó from Body né esse aqui vem no corpo da chamada Olha esse aqui
de cima vem tanto um parâmetro pela URL como também vem valor no corpo da chamada né nesse http então ficou legal isso aí né combinação dos dois então enfim né eu V deixar já Ah eu vou apagar tudo isso aqui porque a gente tem basicamente essas mesmas implementações na outra no outro controler que Nós criamos que é o Controller cliente Controller Então vou remover esses aqui nós vamos deixar basicamente o que nós acabamos de construir nós acabamos de copiar na verdade lá o weather for Cash né foi a controladora principal que foi construída que foi
gerada quando Nós criamos o nosso o nosso projeto tá e a gente teve sempre mexendo nesse we forecast apenas para rabiscar e discutir conceitos mas agora a gente vai começar a estruturar melhor o nosso projeto observemos né que tem uma anotação aqui ó a permitindo anônimo né Aow anonimus esse L anonimus ficou atribuído essa anotação especificamente no endp o que ficou especificado como a gente falou em outra aula na aula anterior porque o a nossa o nosso controler tá estava assinado como autorize com autorização pra gente dizer especificamente que aquele endp iria se comportar diferente
nós precisamos colocar aquele Alô anônimos nesse caso aqui que essa autenticação ela sempre vai acontecer de forma anônima a gente vai ter um end Point único pelo menos por enquanto então eu vou definir esse essa permissão de anônimo já na própria no próprio controle tá Então vai herdar o nosso endp aqui de login vai herdar automaticamente esse esse essa mesma autorização tá que é anônima eu vou tirar aqui esse esse login tá porque agora que a nossa autenticação Controller é a nossa entidade oficial né o nosso controlador oficial para fazer essa autenticação Então eu quero
que o método P desse autenticação contol já seja por o nosso login eu não quero que ele acesse uma rota com por exemplo barra login Pode ser que a gente depois mude de ideia e faça modificação no decorrer do andamento das nossas implementações mas para esse primeiro momento faz sentido pra gente deixar apenas o htt P Então como é que nós chamaremos esse essa entidade vou até trazer aqui a colinha que é feita do aqui a gente tá usando um p né usar essa colinha aqui que é usada para explicar usar essa colinha só para
explicar então o que que ele vai fazer aqui ó ele vai chamar pelo método push não o cliente controler mas o autenticação Controller a pii né que é a rota barra autenticação Controller e o e e não vai ter parâmetro aqui do lado por que que não vai ter parâmetro aqui barra um código a gente não tá recebendo nem o valor por parâmetro na nossa nossa assinatura aqui na nossa especificação aqui então como não tá tendo a gente vai ah a gente vai receber pelo from bury porque a gente especificou que quer receber esse valor
pelo corpo da chamada Tá eu vou tirar isso aqui ou ou deixo vou deixar né Por enquanto F api autenticação Controller e ficamos apenas com esse end Point observemos que a cópia não gerou absolutamente nenhum problema ah embora no momento Inicial esse jwt não existisse aqui nos nossos Us aqui nos noss using mas quando a gente copiou lá do para cá ele já trouxe como el como aplicação já sabia esses elementos né Essas entidades classe aqui tava associada a esse Import esse using automaticamente qu a gente fez a cópia já veio junto então using já
foi colado aqui gente precis fazer absolutamente nada então fizemos aqui né vamos ainda melhorar porque a gente quer que receber pelo fromb a quer receber a entidade de usuário tem muita coisa aqui pra gente corrigindo mas ainda mantém por enquanto com usuário temos que lembrar também de fazer essa configuração aqui no app settings pra gente receber aqui com configuration Tá mas vamos seguindo bem então tiramos isso aqui do e for Cash né que que nós temos ainda de implementações aqui acho que Basicamente nada né tudo foi só discussão de conceitos conceitos aqui para os retornos
né conceitos aqui para os by codes né os tipos de status de retorno né então foi basicamente isso e nós já temos a gente vem para cá ó a get by codde tá retornando uma lista aqui de exemplo né no cliente Controller nós acabamos de criar temos também aqui um R return e tá dando um exemplo aqui de um valor que tá sendo retornado né aqui no P Ah tá um void não tá retornando valor né porque tô fazendo um p mas poderia est retornando algo n no nosso P por exemplo verificar Aqui é do
nosso include a gente tem a gente tá tendo um Action result a gente tá retornando um sucesso ou não né a gente pode fazer essa modificação para que o nosso controle aqui do P faça dessa mesma forma ele retorne Action result e a gente possa devolver o status do resultado dessa inclusão né no caso aqui se tiver sucesso código 200 e verdadeiro ou uma entidade né A Entidade de como ela ficou construída no Banco por exemplo para ele poder ver o código que foi gerado em banco né enfim eu vou copiar isso aqui pra gente
herdar isso aqui porque acho que isso aqui ficou legal pra gente fazer a utilização Vamos ver outro demais aqui né Nós temos o da o o o da atualização né ao da atualização a gente fez algo muito parecido também a Action result pode fazer isso também aqui na atualização podemos ah levar essa mesma estrutura né código 200 né o stus do código de resultado dessa solicitação de atualização então aqui funcionou legal e temos o do delete né como é que ficou o delete aqui que a gente fez o nosso eu verificar get by code delete
sete também com a Action result trazendo o resultado que teve sucesso ou não tá e a gente pode fazer também a combinação ó aqui a gente tá observemos o seguinte aqui a gente tá no no get ID né e no e num get simples a gente poderia trazer todos a gente não colocou o ition result devolver por exemplo um estado a gente tá considerando que mesmo que não en todos uma lista de pessoas mas qual seria o resultado seria vazio tá a mesmo eu não eu não encontro essa pessoa com esse código qual seria o
resultado Um item em branco encontrei ele né ou poderia ser um not found também então a gente poderia tentar fazer uma combinação utilizando o Action result string para nós darmos a opção de fazermos o nosso retorno aqui na aplicação condicionalmente mandando I Action result ou mesmo mandando essa string tá e nada impede também de que nesse nosso I Action result eu retornasse um New deixa eu ver aqui ah New Object só para ver se se vai funcionar observemos o seguinte ó eu tô retornando no status do meu Action result o código do status Mas eu
também consigo adicionar no parâmetro seguinte um objeto de tipo não especificado no caso aqui por exemplo um novo objeto genérico qualquer então nós conseguimos também no Action res result retornar esse tipo de dado Tá mas nesse caso aqui a gente especificou vai retornar por exemplo um string Como pode retornar o resultado da nossa ação tá então se eu tiver por exemplo um erro né Vou colocar aqui eu poderia estar tendo um erro nesse nosso return Ctrl D aqui só para eu multiplicar e poderia estar fazendo um retorno do I Action result aqui também olha aqui
aceitou a gente fazer o retorno do I Action result diferente se eu não tivesse essa especificação dizendo explicitamente de que eu posso retornar com ação do resultado tá então aqui eu consegui retornar Action result consegui retornar apenas o string Eu também poderia no code do meu Action result também mandar essa mesma string não impediria bem então fizemos isso aí né ah outra coisa que a gente pode fazer também ah Professor Será que consigo fazer esse Action result vem aqui Action result I enumerable string será que funciona também e olha aí funciona também então deixamos toda
a nossa estrutura dessa forma tá com os Action results lista de string Action result R tornando string um Action result simples que a gente também pode retornar valores mas a gente especificando qual foi o sucesso mensagem que poderia estar especificando aqui olha ah deu deu um problema aqui deu um erro de permissão e o problema foi esse ah deu tivemos um erro aqui foi um erro de disponibilidade de um serviço e foi por causa disso então a gente consegue passar essas informações muito bem então trouxemos todo aqui incluir essa linha né nó temos tudo isso
para cá vou deixar esses comentários aí por enquanto tá porque a gente não mexeu nos parâmetros então esses comentários que estão aqui em cima sobre a estrutura dessa chamada estão fiéis tá que a gente tá vendo na estrutura da chamada do endp né O Retorno que nós mexemos é que ficou diferente tá ainda não temos Services para fazer a implementação de alguns algoritmos da do processo de inclusão né Para dar o nosso serviço fazer uma ah ter injetado no nosso serviço uma uma referência uma Instância para o banco de dados e fazer modificação porque isso
aí vão ser outros elementos vão defender depender de outras implementações bem Só que tem um item legal aqui que a gente não trouxe para cá ainda que foi a o autorize nós queremos que essa entidade esteja executando de forma autorizada ou seja esses end Points que nós estamos vendo aí eles devem ser executados quando eu tiver gerado um token e esse token foi enviado no corpo da chamada tá vamos excluir esse RF Cash aqui não salvar eu acho que a gente pode fazer exclusão desse for fazer só um delete dele aqui ó e fazer a
exclusão temos essas duas entidades não mexemos ainda aqui nos Observe que o set gente deve falar tem we settings hã geral e temos Website develop tá ã Esse develop é muito utilizado qu a gente tá trabalhando ali em ambientes que já tá indo para produção a gente quer fazer modificações para testar localmente mas enfim são outros assuntos vamos rodar aqui a aplicação aplicação executando que que a gente tá vendo aí né olha aí um controlle de autenticação ah a rota tá aqui api autenticação tá aqui porque foi gerado quando a gente gerou a os nossos
controles ali naquele modelo de adicionar El já adicionou a palavra api na rota Mas a gente pode remover e ficar sem também mas achei que ficou legal assim e vou manter dessa forma bem então observemos o seguinte eu vou tentar fazer uma chamada aqui do cliente que a gente sabe que tá com autoriz try Execute que é que nós tivemos ó response status é 401 né é de permissão nós não tivemos permissão para acessar esse endpoint agora vamos tentar primeiro gerar Nossa autenticação através aqui do controle de autenticação observemos que ficou apenas a pi autenticação
não está aqui com barra login por exemplo Então porque a gente removeu né a aquele nome então quate e vamos definir vamos deixar aqui string né vai dar problema tá pegando só o nome então ó deu ainda acesso negado né não autorizado agora vamos fazer aqui com a palavra teste que é o que nós usamos naquele exemplo lá vamos clicar aqui em executar e tivemos nosso token gerado com sucesso tá vamos copiar aqui esse token e vamos fazer a nossa autorização nessa autorização que foi gerada através daquela configuração nós fizemos no program.cs de código tá
no vídeo anterior dessa playlist então basicamente é só essa essa implementação a gente vai colocar aqui barer espaço e colamos aqui a nossa autorização autorize gerou essa essa essa interface aqui formando que tá autorizado mas mas essa autenticação ela vai ser enviada toda vez que a gente vai fazer solicitações então ó se nós executarmos aqui a o console abrir aqui o console a gente vai perceber de que a chamada agora vai est mandando no cabeçalho o token do que nós geramos todas essas chamadas que vão estar sendo executadas aqui vão estar enviando tokem no cabeçalho
da chamada para poder autenticar essa solicitação então abr aqui o o inspecionar né aqui aberto a gente verificar aqui em Network Network ó vou executar agora cliente tá eu já tô autorizado tá já mandei lá o token vou executar aqui essa autenticação PR gente verificar ó que que gerou gerou um get Qual foi o caminho local host apay cliente que é o nosso controler Ah e mandou essa autorização aqui no cabeçalho ó pera e mandou esse código se a gente vi aqui em Network e tentar explorar a gente também vai ver ó que tá aqui
ó na na no nas requisições né nas aquisições de cabeçalho tá aqui ó a informação da autorização pera e tá aqui o código que nós geramos previamente no login que nós processamos então ah através desse dado a nossa aplicação pegou essa autenticação verificou e quando válido retornou esse valor tá e tudo isso aconteceu quando válido apenas como quando a gente colocou isso aqui ó quando colocou autorize isso aqui a aplicação já entende é autorizado então beleza vou ter que receber no cabeçalho um um token e esse token tem que ser válido e tudo isso automaticamente
ó nós não fizemos absolutamente nada aqui no nosso controler para que essa autentificação fosse feito como por exemplo Ah aqui dentro do meu endp eu vou pegar esse esse token vou fazer uma chamada do jwt perguntando o jwt se esse tokem tá certo se não tá vou desviar não sei para onde né a gente não tem esses comportamentos sendo implementados porque eles já estão existindo implicitamente na nossa configuração que já foi feita mas implicitamente na chamada desse autorize onde no autoriz tá especificando pro nosso Nossa aplicação de que só pode com esse tokem validado e
isso vai acontecer de forma implícita Tá bem então vimos aí que funcionou né Beleza e no no próximo vídeo a gente vai fazer a configuração pra gente poder receber usuário com usuário e sem Então vai ter que receber com fromb como também vamos ter que configurar para que algumas chamadas de valores né são valores fixos por exemplo o código a chave para geração do nosso token 16 dígitos fique ali né dentro do nosso código a gente vai colocar lá no Apps Vamos fazer uma pequena configuração no app settings para fazer a utilização esse mecanismo precisamos
também né antes do encerramento dessa dessa aula fazer também um comite né a gente já fez algumas melhorias já tá um pouquinho mais limpo né Tem coisinha aqui que tem que corrigir Vou colocar até o comentário aqui app set app setting deixando esse comentário aqui pra gente não esquecer tá e o mesmo lá na configuração do program CS Então vamos fazer aqui o comite Eu acho que isso aqui não é algo muito grave que seja impeditivo da gente fazer nosso comit Já temos um código menos bagunçado então alterações do Git que a gente tá vendo
aqui nessa estrutura autenticação Controller que foi adicionado autenticação cliente cont que foi adicionado temos aqui ó que estava esse weather for tá agora com de delete excluo tá então tá aqui com xinho diend foi excluído temos aqui o program CS que foi modificado em outra aula e temos aqui o o CS PR também foi modificado em outra aula nós fizemos a inclusão do qu authentication do jwt Bear Tá então vamos fazer aqui o envio para nuvem Nós temos duas opções V fazer aqui implementação hã da autenticação autenticação H JW token da autenticação token perfeito então
fizemos essa esse pequeno comentário lembrando de que eu estou aqui na Brent Brent Master que foi a Brent foi gerada automaticamente quando nós fizemos a versão Inicial e Subimos tanto geramos tanto Nossa Máquina local como também para o github tá nesse exato momento nós estamos utilizando o Git local como também podemos subir para o github a qualquer momento ou qualquer outro Git né Git Lab tá azuri enfim Então tá nessa Brand nós poderíamos construir uma outra Brand né ó quero construir um outro Brand levando essas alter e fazer o comit em um outro pacote separado
então o que que eu teria aí eu teria um um repositório Zinho né dentro da mesma caixa eu teria um embrulho zinho com o conjunto de códigos e dentro dessa mesma caixa outro embrulho Zinho outro conjunto de códigos que esse primeiro eu estaria chamando de Master e esse outro eu estaria chamando de outro nome por exemplo Tá mas quando a gente faz o comit diretamente aqui na própria Master que a gente já tá utilizando o que que eu tô fazendo ó eu tô pegando esse embrulho Zinho que tá dentro da minha caixa chamado Master e
tô fazendo alterações só que essas alterações eu não estou esquecendo das alterações antigas se algum momento eu decidi voltar PR antiga eu consigo voltar coloquei uma camisa azul mas eu lembro que eu tava com a camisa preta eu não quero mais azul eu volto pra camisa preta então quando a gente lança outros comites aqui a gente muda o estado do nosso da nossa do nosso projeto nosso repositório mas a gente guarda uma lembrança do Estado antigo que nos permite a qualquer momento voltar para o estado antigo quando Nós criamos Brand Nós criamos vários estados diferentes
cada um com seu conjunto de lembranças como o propósito da da da aula não é especificamente o Git em si mas a utilização do Git eu acho que esses pontos devem ter servido para orientar mas para quem possa ter mais dúvidas né Deve eu não tenho nenhuma playlist montada mas deve existir outras playlists ah muito boas ou mesmo material que posso trazer exemplos figurinhas mostrando ali um gráfico né montando as branes é muito interessante você estar bem familiarizado com a utilização do Git bem então vamos subir isso aqui né a gente tem algumas opções confirmar
tudo a gente pod que a gente também poderia só preparar né Poderia clicar aqui aqui ó preparar o que que opa não tá salvo algumas coisas aqui ó não tá salvo ó o asterisco aqui salvei botar aqui pro gerenciamento ó para aqui a aplicação só para bem ah a gente poderia só preparar eu só quero que as alterações da da adição desse dessa entidade que seja que seja comit seja guardada Nessa versão eu tô gerando clicava aqui no sinalzinho de Plus dema então ele tá com do dois com duas árvores árvore de alteração alterações Preparadas
e a árvore alterações Gerais né então aqui ó já mudou o nome aqui ó Preparadas Eu quero confirmar As Preparadas não confirmar as alterações Gerais tá então se eu quiser fazer o comite apenas com essas alterações que foram Preparadas então eu confirmando Aqui só essa autenticação que vai subir para a minha versão local e ou para minha nuvem tá no caso eu quero que todas eu eu cliquei aqui no sinalzinho de menos ele voltou para cá ó geral tá a gente também consegue fazer alterações ó também consegue fazer alterações só de um trecho ó Eu
quero confirmar só esse pedaço aqui que foi alterado esse pedaço aqui ah é o pedaço que a gente tá fazendo a configuração do ah do WT esse pedacinho que tá fazendo a configuração do suega né pra gente fazer aquela entrada do Token na interface web do suega então se eu clicar aqui em adicionar ó preparação preparar observemos o seguinte adicionou a tanto program aqui como tem um program aqui por quê Porque esse program aqui tá indo apenas com esse trechinho aqui que eu pedi para preparar e esse outro program que ficou bem Aqui é o
que permaneceu o trecho que eu também alterei eu ainda não disse que quero prepará-lo para alteração tá então se eu clicar aqui no menos novamente ó aí vai voltar para o program então a gente tá vendo as duas alterações de novo juntas tá no meu caso no nosso caso a gente vai subir já tudo mesmo já vai todo esse geral então nem vou preparar Nenhum porque todos já estão já vão né então confirmar tudo V confirmar tudo a gente vai confirmar localmente isso quer dizer o quê que vai est na minha máquina o confirmar tudo
emv push eu vou confirmar localmente guardei o comit aqui nas versões da do Git que tá instalado da minha máquina e também estou subindo esse comit para as versões que estão lá no no servidor web que tá fazendo o armazenamento na nuvem dessas minhas versões como por exemplo github tá e eu confirmar tudo e sincronizar aqui nós estamos confirmando tudo na minha máquina tô sincronizando que é sincronizar tô mandando tudo que eu tenha que possa precisar ir pra nuvem com push como tô pedindo a nuvem tudo que tenha lá ela possa me devolver fazendo de
fato uma sincronização tá então vou confirmar tudo e enviar push Eu poderia usar o sincronizar teria o mesmo resultado tô usando o push porque eu tenho absoluta consciência de que não tem outra alteração visto que o código tá privado pelo menos por enquanto eu acho que ainda vou liberar para copiar código tá privado como também ã Mesmo que tivesse público se a outra pessoa não tivesse implementando fazendo modificação também não teria entradas então confirmar tudo e enviar push aqui nesse exato momento ó já confirmou localmente na sequência iniciou push né ó enviado com sucesso para
origem Master solicitação de push a aí Aqui nós fizemos né enviado com sucesso né Se eu quisesse criar um pull request eu poderia fazer outras outras tarefas aqui também mas a gente já obteve sucesso Olha aí sumiu né as confirmações as alterações que até então eu tinha feito agora não estão mais marcando como verde né de que foi adicionado uma nova linha Então finalizamos essa nossa alteração com a a geração dessa pequena versão em um comit tanto localmente como no nosso repositório do github