Curso Completo | WEB API com .NET 8 e SQL Server | CRUD Repository Pattern 💻

14.61k views17954 WordsCopy TextShare
Crislaine D'Paula
NOVO CURSO: https://clpaula3007.hotmart.host/pagina-de-vendas-2be22fe4-1d67-4f92-9813-bd3478b37383 ...
Video Transcript:
Fala galera beleza aqui quem fala é cristec e nesse vídeo aqui nós vamos estar criando uma web api utilizando o dnet 8 o que vocês estão vendo na tela de vocês nesse momento é o nosso projeto já pronto como vocês podem ver nesse vídeo nós vamos estar desenvolvendo uma web api que contém duas entidades sendo a tabela de autor e a tabela de livros e para cada uma dessas entidades nós temos alguns end points que nós vamos poder estar utilizando nós vamos passar rapidamente por cada um deles para que vocês entendam o funcionamento final de
toda essa aplicação para que assim a gente consiga estar começando o desenvolvimento então Perfeito nós temos aqui alguns end points no caso do autor nós temos o endp de get autor pra gente conseguir pegar a todos os autores que tem dentro do banco então eu dou um Execute e ele me traz todos os autores já cadastrados Lembrando que cada um desses dados está sendo persistido dentro do nosso banco nós estamos utilizando o SQL server como banco de dados para nós estarmos desenvolvendo essa aplicação e tudo isso tá sendo persistido Então nesse endpoint de get autor
eu consigo pegar todos os dados que eu já salvei de autores dentro do meu banco no caso de exemplo aqui eu salvei dois autores para que a gente consiga est fazendo alguns testes no nosso end Point então nós temos aqui o Rafael montes e temos o harlan cen Basicamente já salvos nós temos aqui outros end points por exemplo a gente tem o buscar autor por ID então eu consigo colocar um ID específico de algum autor específico e dar um Execute e ele me traz aquele autor e os dados desse autor aqui para nós Lembrando que
nós estamos também utilizando um modelo para tratativa de dados um modelo para nos mostrar os dados não tá aparecendo apenas o objeto de autor mas sim um outro objeto aonde nós temos os dados a mensagem e o status dessa forma fica mais fácil caso a gente vai utilizar essa api se comunicar com essa api com algum front-end e a gente precise mapear mensagens de erro e mensagens de sucesso nós conseguimos verificar isso a partir do momento que eu coloco um ID que não existe eu dou um Execute e eu recebo essa seguinte mensagem de erro
os meus dados estão nulos porque não encontrou nenhuma informação a mensagem ela vem como nenhum registro localizado e o status de True porque a solicitação foi feita a única questão é que nenhum dado foi encontrado dentro do banco então esse objeto de resposta por assim dizer é bastante interessante Quando nós vamos ter alguma comunicação com o front-end dessa forma a gente consegue tratar as mensagens de erros de sucesso como da mesma forma que conseguimos tratar os dados que nós recebemos perfeito então é basicamente isso continuando pelos nossos end points nós temos esse terceiro endp aonde
a gente consegue buscar um autor por ID de livro específico então eu repasso o id de um livro cadastrado e eu tenho como retorno o autor desse livro específico Lembrando que essas duas entidades Elas têm um relacionamento entre si um autor ele pode ter vários livros e um livro pertence a um autor específico Então a gente tem esse relacionamento de vários para um de um para muitos basicamente perfeito Então esse endp ele só nos comprova esse relacionamento em que a gente consegue colocar o id de um livro e ter como resposta o autor desse livro
específico Nós já vamos testar esse endp nós temos esse outro Point aqui aonde nós conseguimos cadastrar autores então a gente consegue criar um novo autor dentro do nosso banco então vamos cadastrar mais um autor aqui nós podemos colocar o nome do autor e o sobrenome do autor aqui nesse Campo na parte de baixo dar um Execute e Prontinho nós temos um autor cadastrado com o seu ID identificador específico e o nome e o sobrenome Que Nós criamos perfeito então a gente já consegue criar um novo autor conseguimos editar um autor existente então a gente pode
colocar aqui O id3 que foi o autor que nós acabamos de criar podemos colocar aqui basicamente ele então colem hoover aqui embaixo e da eu posso colocar um editado no final editado no final Então a gente vai estar editando esse registro podemos dar um Execute e agora aquele registro que nós havíamos acabado de criar agora está editado com essas novas informações que nós inserimos Perfeito nós conseguimos também deletar o um autor específico então eu posso dar um try out posso dar um três aqui antes disso vamos só copiar pra gente poder criar ele novamente aqui
colocamos um três vamos dar um Execute Prontinho aquele registro ele já não existe mais dentro do nosso banco de dados vamos criar ele novamente aqui pra gente conseguir criar alguns testes dentro ali dos nossos end points de livros então a gente criou novamente um outro ID agora não é o id3 é o id4 porque é um novo registro perfeito então Aqui nós temos agora os endpoints de livros A gente pode buscar igualmente por todos os livros que nós temos no banco no caso nós temos o jantar secreto que é do autor Rafael montes e o
título silada que seria do autor harlan cen nós temos esses dois livros já cadastrados nós conseguimos pegar então todos os livros salvos nós podemos buscar os livros por ID conforme nós da mesma forma que conseguimos buscar por autor então aqui colocamos o id de um livro específico e esse livro é retornado para nós junto com informações de qual o autor desse livro nós conseguimos também buscar um livro por ID de acordo com o autor então nós conseguimos colocar o o id de um autor e temos como resultado todos os livros que esse autor tem cadastrado
então eu posso vir aqui e colocar o id de um autor podemos colocar o id dois que é um autor que já possui um livro cadastrado damos um Execute e prontinho vem o livro referente a esse autor que nós colocamos se colocar o id de do autor um vai vir o livro que esse autor no caso Rafael Montes possui cadastrado se esse autor tivesse mais de um livro cadastrado iria aparecer uma lista de livros com todos os livros que esse autor teria perfeito então a gente consegue ter todo o Retorno dos livros cadastrados referente a
um autor nós podemos cadastrar o novo livro também aonde eu coloco o título do livro eu posso colocar verit e o id o qu para entrar na autora Colen hoover não preciso marcar o nome não preciso marcar o sobrenome porque isso vai ser buscado automaticamente então eu posso dar um Execute aqui e Basicamente já criou já colocou aqui que o tit verit é da autora de id4 no caso a quin hoover perfeito Então tudo isso já tá andando e caminhando e tudo funcionando perfeitamente bem a gente consegue est Ed também então a gente pode colocar
aqui o id3 verit vai continuar o título verit editado Vamos mudar o autor agora vai ser o autor dois vamos dar um Execute e Prontinho nós mudamos o autor agora é harlan cen e o verit editado agora é o nome então a gente consegue estar fazendo essa modificação e essa brincadeira junto com todos os nossos registros e por fim nós conseguimos estar excluindo um registro já existente damos um cute e Prontinho excluiu aquele registro perfeito agora a outro teste que nós podemos fazer é com o nosso end Point de buscar autor referente ao id de
um livro nós já verificamos que nós possuímos alguns livros cadastrados Aqui nós temos dois livros um livro de id1 um livro de id2 nós temos que o livro de id1 é o jantar secreto e o autor é o Rafael Montes então se eu colocar o id1 aqui é para ele nos retornar o Rafael Montes damos Execute Rafael Montes é é retornado damos o dois aqui o harlon cen é retornado então nós Já conseguimos verificar que todos os nossos end points estão funcionando e que a comunicação entre as duas entidades está acontecendo agora nós podemos efetivamente
iniciar o desenvolvimento do nosso projeto e criar essa web api utilizando o nosso dnet 8 Então eu vou abrir aqui o meu visual Studio nós vamos começar o desenvolvimento vamos vir aqui em criar um projeto e nós vamos criar então um projeto de web api aqui no campo de busca eu posso colocar api e basicamente seria esse o projeto que nós vamos criar uma app e web do aspnet Core lembrando sempre de verificar se é o c sharp que está aparecendo como linguagem de programação porque nós temos um outro aqui logo abaixo que é o
mesmo nome porém é F Sharp no nosso caso vamos utilizar csharp para todo o desenvolvimento Então vamos clicar aqui no csharp Vamos dar um próximo e a gente a gente vai criar aqui uma web api.net 8 e esse daqui é o projeto do nosso vídeo você pode escolher o local aonde você quer criar esse projeto eu vou criar no disco local C no disco local D coloca aqui o nome da solução o nome do projeto Vamos dar um próximo já está marcado aqui como dnet 8 se o de vocês não estiver analizado isso baixe o
dnet 8 e sinalize o dnet 8 que é a versão que vamos estar utilizando eu recomendo que vocês utilizem a mesma versão que eu para que assim a gente não tenha nenhum tipo de erro relacionado a versionamento agora a gente vai deixar aqui configurado para https vamos habilitar o suporte de Open api dessa forma a gente vai conseguir utilizar o nosso swager nas validações dos nossos endpoints e vamos utilizar controllers perfeito Então vamos dar um criar aqui e vamos criar o nosso projeto especificamente nosso projeto está criado já criou aqui com as pastas padr que
nós temos quando criamos algum projeto do tipo api Aqui nós temos os nossos controllers dentro dos controllers nós já temos um controler padrão que é criado automaticamente quando criamos o projeto é criado para testes basicamente no nosso caso nós vamos estar excluindo porque não vamos utilizar esse controler específico nós temos o nosso app settings Onde vamos colocar a conexão com o nosso banco de dados o program que é o arquivo que inicia todo o nosso nosso projeto então aqui a gente vai colocar algumas referências referente a nossas injeções de dependência nós vamos entender um pouquinho
melhor sobre isso mais para frente quando estivermos utilizando e temos também esse modelo né que é um modelo já automático que vem gerado é uma Model basicamente é um objeto que tava sendo utilizado naquele Controller que nós acabamos de excluir então nós podemos estar excluindo esse modelo nós não vamos utilizar nós vamos criar os nossos próprios controles e os nossos próprios modelos nesse projeto então agora nós já estamos prontos para começar esse outro arquivo aqui é um arquivo para nós conseguirmos realizar alguns eh algumas solicitações então a gente pode estar utilizando tanto o nosso swager
quanto esse arquivo aqui esse é um arquivo novo que veio com o dnet 8 então eu poderia ter realizado todos os meus Gets todos os meus posts nossos puts delites todas as solicitações dos nossos end points por esse arquivo nós não vamos utilizar esse arquivo nessa aula aqui porque eu creio que vai ficar bem mais intuitivo e mais prático utilizar o sweger que já tá cadastrado e já tá instalado aqui no nosso projeto mas só para vocês terem um entendimento do Pr de para que que serve esse arquivo é basicamente para criar solicitações dentro do
próprio visual Studio Ok então esses são os arquivos padrões que nós temos baixados né Nós temos criados a partir do momento que Nós criamos um projeto aqui no nosso visual Studio um projeto de web api então sem mais delongas vamos iniciar com o desenvolvimento a primeira coisa que nós vamos estar fazendo é criar a nossa conexão com o banco de dados para que a gente consiga efetivamente persistir as nossas informações dentro do banco então é uma das ações principais que nós temos que tomar então para iniciar a nossa criação nós vamos criar aqui uma nova
pasta essa nova pasta vai se chamar de data e é nela que nós vamos criar o nosso contexto Então vamos criar uma nova classe dentro dessa data que nós vamos chamar de app Dib context é o nosso contexto é o que vai criar todo o nosso meio de campo entre o nosso código e entre o nosso código CP especificamente e o nosso banco de dados Então a gente vai se comunicar com o nosso banco de dados através desse contexto que nós estamos criando então quando a gente quiser acessar alguma tabela fazer algum insert buscar algum
dado dentro do banco nós vamos estar utilizando esse contexto como meio de campo e como ferramenta para criar essa conexão e essa comunicação Então antes de nós criarmos o nosso contexto especificamente nós precisamos baixar alguns pacotes newg para que a gente tenha algumas ferramentas a mais no nosso projeto e com essas ferramentas seja possível a gente utilizar o en Framework para que consigamos aí criar toda essa comunicação e efetivar a o formato de código code first que é onde nós programamos primeiro e depois através a partir dos nossos códigos criados em csharp Nós criamos todo
o nosso banco de dados então sem mais delongas vamos começar aqui baixando as nossas ferramentas então a gente pode vir em ferramentas gerenciador de pacotes do newg e gerenciar pacotes do newg para solução então aqui nós vamos baixar os pacotes que nós precisamos com as novas funcionalidades as novas ferramentas para est conseguindo inserir o ent Framework aos nossos projeto então a gente pode colocar aqui no campo de busca entity e aqui já aparece basicamente a maioria do dos pacotes en Framework que nós temos aqui para est instalando o primeiro que nós vamos estar utilizando é
o en Framework Core Então vamos estar adicionando ao nosso projeto vamos pegar a a versão mais recente então tente baixar Tudo na mesma versão que eu estou baixando para que vocês não tenham nenhum tipo de erro de versionamento Vamos dar um instalar aqui aplicar eu aceito perfeito já instalou o an Framework Core o próximo que nós vamos instalar é o an Framework Core SQL server porque esse é o banco que nós vamos estar utilizando para persistir todas as nossas informações vamos baixar o design também assim nós vamos ter possibilidade de criar algumas migrações e é
através dessas migrações Que Nós criamos né o nosso banco de dados e por último o an Framework Core Tools vamos instalar aplicar eu aceito acabamos de instalar todos os pacotes necessários então foram quatro o an Framework Core o an Framework Core design o an Framework Core SQL server e o an Framework Core Tools Esses são os pacotes necessários pra gente conseguir criar todo o nosso projeto agora nós podemos voltar pro nosso app de b context e podemos herdar desse app Deb context o Dib context esse Dib context vem do pacote an Framework Core que nós
acabamos de instalar agora nós conseguimos criar todo o nosso contexto para criar o contexto a gente pode colocar um setor criar o nosso Construtor esse Construtor ele precisa receber algumas opções e algumas informações de conexão como ele vai fazer o meio de campo entre o nosso código e o nosso banco de dados ele precisa de informações referentes a qual o servidor desse banco de dados Qual o banco que nós estamos se conectando Qual a forma de conexão que nós estamos est fazendo e assim por diante então o Construtor ele precisa receber um Dib context options
opções de conexões basicamente E essas opções vão ser utilizadas dentro do nosso appdb context que é o nome da classe que nós acabamos de criar então dentro do balãozinho a gente coloca o app Deb context e essas informações que nós vamos estar recebendo nós vamos dar o nome de options quando nós a recebermos e como base desse Construtor a gente vai vai ter essas opções que serão recebidas Então essa é a configuração Inicial que nós precisamos fazer quando nós estamos criando o nosso projeto então basicamente nós já passamos pro nosso construtor da classe do context
que ele precisa receber algumas opções e algumas informações de conexão para que ele consiga fazer o serviço de meio de campo então dentro do nosso banco nós precisamos ter algumas tabelas nós precisamos tanto da tabela de autor para persistir os dados de todos os nossos autores como mas nós precisamos também ter a tabela de livros para persistir os dados dos nossos livros Então vamos criar esses modelos que servirão como base para a criação dessas tabelas então eu vou fechar aqui esse arquivo que tá aberto nós vamos vir no no web api o vídeo que é
o nome do nosso projeto e vamos adicionar uma nova pasta essa pasta vai ser a pasta das nossas models dos nossos modelos são os modelos que serão mapeados e transformados nas nossas tabelas dentro do banco e aqui eu vou criar basicamente uma nova classe essa classe que eu vou criar a primeira delas vai ser o autor Model vai ser a classe que vai ser mapeada e vai servir como base para a criação da nossa tabela de autor e vamos colocar aqui as propriedades que essa tabela vai ter no caso essa quais são seriam as propriedades
que essa classe vai ter e serão mapeadas mais para frente em colunas então cada propriedade será cada coluna da nossa tabela Então a primeira propriedade verdade barra coluna que nós vamos ter vai ser um inteiro do tipo ID Então a gente vai ter a nossa coluna de identificador a próxima vai ser o nome que seria o nome do autor então do tipo string nós vamos ter também a propriedade do tipo string que será o sobrenome agora vamos criar um novo modelo esse novo modelo vai ser o livro Model vai ser a tabela de livros especificamente
ele também vai ter uma propriedade do tipo inteiro que vai ser o nosso id e vai ter uma propriedade do tipo string título então será o nosso título do livro agora como eu já comentei anteriormente essas duas tabelas elas vão ter uma relação entre si então cada autor ele pode ter vários livros cadastrados em seu nome e cada livro pode ter apenas um autor então para isso eu vou vir aqui no meu modelo de autor e vou colocar que além de cada uma dessas propriedades o id o nome o sobrenome ele também vai conseguir ter
todos os livros pode ter uma quant ele pode ter dentro dele vários livros cadastrados então o id1 o autor de id1 pode ter cinco livros cadastrados em seu nome e assim por diante depende da quantidade de livros que aquele autor tiver mas ele pode ter vários para isso eu tenho que criar uma propriedade dentro do meu modelo autor Model que diz que eu posso ter uma lista de livros Então vai criar aqui uma propriedade aonde nessa propriedade ela vai ser do tipo I Collection porque eu posso ter uma coleção de livros independente do tamanho dessa
coleção então é uma coleção de livros então o tipo dessa coleção é livros Model que foi o modelo que nós já criamos então eu posso ter vários desse objeto dentro do meu autor Model e nós vamos dar o nome de livros porém um livro ele pode ter um autor específico então eu vou colocar que dentro do meu livro Model eu posso ter um uma propriedade do tipo autor Model que seria o meu autor Vamos colocar aqui o meu autor dessa forma quando eu criar a nossa migração para criar as nossas tabelas dentro do banco ele
automaticamente já vai ver essa ligação ele vai ver dentro do autor Model que eu posso ter uma lista de livros dentro dele e vai ver dentro do meu livro Model que eu posso ter um autor cada referenciado a cada um dos livros perfeito então um livro pode ter um autor e um autor pode ter vários livros cadastrados em seu nome então dessa forma eu já consigo criar a relação entre eles aqui dentro do livros dentro do autor Model eu vou colocar uma diretiva que vai ser o Jason ignor por que que eu tô colocando essa
diretiva Jason ignor porque quando eu tô criando um autor perceba aqui no nosso endp se eu vou criar um autor eu não preciso direto quando eu tô criando o autor já preencher todos os livros que ele tem registrado eu simplesmente coloco o nome e o sobrenome do autor nesse meu Jason não aparece a lista de livros e eu automaticamente na criação de o autor já tenho que colocar todos os livros que ele tem em seu nome não eu crio o autor apenas com nome sobrenome então a lista ela vai estar vazia de livros né vai
vai estar uma lista como nula e depois eu posso ir adicionando livros a esse autor então colocando esse Jason ignor nesse Jason de criação ele não vai aparecer a lista de livros porque ele vai ignorar na parte do Jason essa propriedade aqui e é o que eu quero porque essa propriedade ela serve apenas para fazer a correlação entre o meu livro Model e o meu autor Model eu não vou utilizar essa propriedade para efetivamente criar os livros no momento que eu tô criando o autor perfeito então a gente coloca esse Jason ignor para que esse
trecho de código seja ignorado então eu posso salvar tudo aqui nós já temos os nossos modelos criados agora eu posso ir lá no meu meio de campo entre o código e o banco e aqui eu vou falar quais são as tabelas que eu quero criar então quando eu criar a minha conexão com o banco de dados eu já quero que algumas tabelas sejam criadas com as devidas relações de cada um delas de cada uma delas Então dentro do meu contexto eu preciso colocar quais são essas tabelas e quais são os modelos que vão ser utilizados
para a criação de cada uma delas então eu vou colocar um Public aqui porque ela vai poder ser acessada de qualquer lugar um dibs porque a gente vai ser setar essa tabela essa tabela vai ser de qual formato primeiro nós vamos criar a tabela de autor eu criei já um modelo aonde eu tenho as propriedades dentro desse modelo e cada propriedade vai ser transformada em uma coluna Então ela é basicamente como se fosse a forma para a criação da minha tabela e eu quero criar a minha tabela de autor então qual vai ser a forma
para a criação da tabela de autor é o modelo autor Model perfeito então o autor Model é o modelo que eu vou utilizar para criar a tabela de autores qual vai ser o nome da tabela autores e daí eu posso dar o meu get set perfeito então eu já falei que eu quero criar a tabela de autores usando como base o autor Model e eu faço exatamente a mesma coisa no caso dos livros usando o livro Model eu quero criar a tabela de livros dou meu getset OK agora que nós já temos tudo mapeado aqui
agora nós precisamos efetivamente passar as informações para dentro do nosso contexto a gente já viu que pelo Controller ele recebe algumas informações de informações de conexão mesmo informações referente a qual servidor do banco que nós vamos nos conectar o nome do banco de dados a forma de conexão que nós estamos realizando e assim por diante para passar essas informações primeiro primeiro eu preciso ter essas informações salvas em algum local aonde eu vou deixar essas informações salva salvas dentro do nosso app settings Então dentro do app settings nós vamos criar uma string de conexão aonde nós
vamos ter todas as informações que o nosso contexto precisa para se conectar ao banco então eu vou criar uma nova sessão aqui no nosso web settings nessa nova sessão eu vou criar ela com o nome de Connection Strings e dentro dela eu vou criar uma nova sessão com o nome default Connection Então essa é a conexão que nós vamos estar criando eu poderia criar várias conexões aqui dependendo do tamanho do meu projeto eu poderia ter várias Connection Strings referenciando a diversos bancos diferentes de acordo com a minha necessidade então por isso que eu tenho que
colocar um nome específico nesse caso nós vamos utilizar apenas uma conexão que vai será a defold Connection mas se eu fosse utilizar várias Eu precisaria colocar um nome para cada uma delas e assim dentro do nosso código nós iremos e utilizando e consumindo cada uma perfeito no nosso caso nós vamos utilizar apenas uma e nós precisamos passar algumas informações Primeiro qual é o servidor de banco que nós vamos se conectar segundo qual é o nome do banco de dados que vai ser criado ou se ele já estiver criado que vai ser utilizado o servidor nós
podemos pegar da seguinte forma Nós abrimos o nosso SQL server e dentro do nosso no SQL server nós podemos vir aqui nessa tomadinha vindo na tomadinha aqui aparece o nome do nosso servidor a gente pode est copiando o nome desse servidor e colocando dentro do nosso código o nome do Database será o nome do banco de dados que nós vamos criar nesse caso eu vou criar o banco de dados web api aula vídeo agora vamos para algumas outras informações que a gente precisa na nossa string de conexão que seria o tr Connection igual a true
O que que significa esse trusted Connection igual a true quando eu vou entrar dentro do meu banco de dados eu tô utilizando a autenticação do Windows dessa forma eu não preciso colocar nem nome de usuário nem senha eu simplesmente dou um conectar e eu estou conectada se eu utilizasse a autenticação do SQL server Eu precisaria colocar o meu login e a minha senha para me conectar no caso o que eu tô falando pro meu código é que eu tô utilizando efetivamente o Windows authentication por estar utilizando o Windows authentication eu não preciso colocar nem o
user ID nem a password nem o usuário nem a senha Se eu não estivesse utilizando o Windows authentication eu teria que colocar um user id e o nome do meu login e um password e a minha senha assim o meu código saberia como se conectar no meu banco o trusted Connection como true basicamente eu estou dizendo não preciso dessas informações eu quero me conectar automaticamente utilizando Windows authentication então perfeito e a próxima informação que a gente precisa é o trust server certificate igual a true esse daqui vai servir para nos dizer que nós estamos confiando
no certificado que o nosso código está gerando então a gente não tá gerando Um certificado próprio nosso tudo bem estruturado nós estamos aceitando o certificado que tá sendo criado afins de projetos de teste projetos de estudo conforme nós estamos fazendo aqui isso daí serve perfeitamente bem nós podemos utilizar o trust server certificate sem nenhum tipo de problema agora se fosse algum projeto de produção seria interessante a gente ter um certificado realmente confiável para est hospedando ali todo o nosso projeto então perfeito criamos a nossa string de conexão se certifica de que tudo tá escrito perfeitamente
correto para que você não tenha pro problemas mais pra frente se alguma palavra estiver escrito de forma divergente no momento de criar a nossa migração você provavelmente vai enfrentar algum problema então se certifica de que tudo tá escrito da forma que deve ser Ok Nossa string de conexão está aqui porém agora nós temos que dar um jeito de passar essa string de conexão para dentro do nosso app context app Deb context como que a gente vai fazer isso a partir do nosso program.cs como esse daqui é o arquivo que inicia o nosso projeto nós podemos
fazer algumas configurações antes do nosso arquivo Ter iniciado antes dele ter sido construído e é aqui que a gente vai falar o seguinte antes de construir o nosso projeto você precisa pegar a string de conexão que tá no app Deb context que tá no nosso app settings desculpe pegar a string de conexão que tá lá e mandar pro nosso app Deb context para isso a gente vem aqui e vai colocar um builder.services.add Dib context vamos adicionar um contexto esse contexto vai ser de que tipo vai ser o tipo app Dib context que é o nome
da classe Que Nós criamos então se você tiver criado com um nome divergente você coloca o nome diferente que você criou aqui e para essa classe nós precisamos receber algumas informações o nosso Construtor recebe informações Então a gente vai receber os nossos options e que options são essas quais são essas opções a primeira coisa que a gente tem que passar aqui é Qual o banco que nós vamos estar utilizando no nosso caso a gente vai utilizar o SQL server perfeito nosso código já sabe que a gente vai utilizar o SQL server agora Quais as informações
desse banco qual qual a string de conexão aí nós vamos falar entre no arquivo app settings e pega a string de conexão de lá de dentro Então a gente pode colocar um Builder configuration esse trecho de código basicamente diz que nós estamos entrando dentro do nosso app settings pon get Connection string então pegue a string de conexão Connection string e qual string de conexão colocando get Connection string ele já tá entendendo que eu quero pegar essa caixinha aqui que são a de Connection Strings agora como aqui eu poderia ter várias conexões ele tá me pedindo
qual string de conexão dentro da Connection string no nosso caso é a default Connection então a gente coloca aqui entre aspas default Connection perfeito dessa forma já é para est estruturado toda a nossa conexão Toda a forma de conexão que nós vamos estar utilizando então nós podemos efetivamente continuar todo o processo nós podemos vir aqui em ferramentas gerenciador do pacote newg e console do gerenciador de pacotes aqui nós vamos criar as nossas migrações que é onde a gente vai dizer Pronto as nossas conexões já está to toda correta pode criar as tabelas dentro do banco
pode se conectar ao banco e criar as tabelas dentro do banco para isso a gente simplesmente coloca um Ed migration e logo ao lado o nome da migração que nós estamos criando no nosso caso eu vou criar vou colocar criando banco de dados vamos dar um enter e vai começar a construção aqui do nosso banco de dados especificamente resta nós aguardar aguardarmos criou basicamente a nossa string de conexão e aqui já abriu um novo arquivo que seria o arquivo de migração aonde nós conseguimos olhar e verificar tudo que vai ser criado então Aqui nós temos
que a gente vai criar uma tabela com o nome de autores essa tabela vai ter essas colunas a coluna de ID de nome de sobrenome e a chave primária é o nosso ID perfeito é da forma que nós queremos aqui embaixo ele tá fazendo a mesma questão Tá criando a tabela livros que vai ter o ID do livro o título do livro e o autor ID porque ele tem uma relação cada livro ele tem um autor ID cada livro tem apenas um autor enquanto que o autor pode ter vários livros perfeito então aqui tá tá
sendo criada aquela relação que Nós criamos mais para frente Aqui nós temos a chave primária temos a chave estrangeira que seria o nosso autor ID perfeito e aqui tá sendo criado alguns index então ok tudo tá sendo criado conforme nós desejamos nós podemos aumentar aqui a parte de baixo para nós entrarmos no nosso console do G iniciador de pacotes e dar um update Database para efetivamente criar essas modificações dentro do banco perfeito tudo criado agora se eu me conecto no meu banco dou um atualizar Aqui tá o banco que Nós criamos web api e aqui
web api aula vídeo nós podemos dar um maisin tabelas e aqui tem as tabelas Que Nós criamos a a tabela de autores ID nome sobrenome e a tabela de livros ID título e autor id e elas estão interligadas entre si então eu posso fazer o seguinte eu posso vir aqui em autor e dar um editar linhas superiores e colocar autor a sobrenome a Criei um autor perfeito Criei um autor direto no nosso banco de dados agora eu posso vir em livros e editar 200 linhas superiores eu posso posso colocar o título livro A e o
ID do autor vai ser o id1 por quê Porque eu tenho um id1 que seria o ID do autor esse autor é id1 eu posso colocar livro b id1 então a gente já percebe que um livro pode ter apenas um autor mas um autor específico já está com dois livros cadastrados Então a nossa relação de um para muitos já está acontecendo agora se eu viesse aqui E excluísse esse registro excluísse esse registro automaticamente se eu desse um refres aqui executar SQL tudo seria excluído porque não tem como eu ter um livro de um autor que
não existe então a gente consegue comprovar dessa forma que o relacionamento entre as tabelas elas estão ela essa relação está acontecendo Então perfeito agora nós podemos partir para o nosso código especificamente nós vamos fechar tudo que tá aqui para não nos confundirmos vou abaixar essa parte aqui para não ficar atrapalhando a nossa visualização e agora nós vamos começar o nosso desenvolvimento primeira coisa que nós vamos fazer é criar a estrutura de pastas que nós vamos estar utilizando como nós vamos utilizar o repository pattern como padrão de desenvolvimento nós precisamos ter serviços E interfaces por que
que nós vamos ter isso basicamente nós não queremos que todo o nosso código fique dentro do nosso Controller pra gente não criar controllers gordos fat controllers com muita informação fica difícil de nós darmos manutenção mais pra frente então o que nós vamos fazer é o seguinte dentro do nosso Controller ele vai ter apenas uma conexão com a nossa interface ele vai se conectar com a nossa interface é a interface que vai ter diversos métodos que vão precisar ser executados e a implementação desses métodos vão estar sendo vai estar sendo desenvolvida dentro dos nossos serviços então
o nosso Controller se conecta com a nossa interface e a interface se conecta com o serviço e é o serviço que vai se conectar com o banco de dados fazer as solicitações as inserções as remoções e revolver as informações para o nosso Controller perfeito Então vamos criar essas estruturas de pastas então primeiro eu vou criar aqui uma pastinha com o nome Services que é para os serviços e dentro daqui eu vou criar uma nova pasta que vai ser autor porque vai ter um serviço específico tanto para autores como para livros nós vamos começar com os
autores então a gente coloca o autor aqui vamos criar uma nova classe que vai ser o nosso autor service aonde vai ficar a implementação de todos os nossos métodos e vamos criar mais uma classe que no caso será uma interface que vai ser aí autor interface que é a nossa interface então agora dentro do autor service eu posso colocar que ela é referenciada e ela respeita as regras que estão no nosso autor interface agora a autor interface está interligada com o autor service porém o nosso código ele já entendeu que o autor service ele tem
os métodos implementados tem implementa os métodos que estão na autor interface porém a autor interface em nenhum momento nós colocamos o nosso código para que ele entenda que os métodos que vão estar aqui aqui estão implementados dentro da service a service sabe que precisa implementar os métodos da interface mas interface não sabe que os métodos que ela tem estarão implementados dentro do serviço então para isso a gente precisa vir em program e vamos colocar aqui um builder P Services PED scoped e dentro desse AD scoped a gente vai falar que o nosso e autor interface
os métodos que estão na e autor interface estão implementados no autor service perfeito agora a relação deles está completa eles conseguem se comunicar perfeitamente bem Ok podemos salvar isso daqui e agora eles já estão se comunicando e já temos aqui o processo e o a estrutura de pastas que nós necessitamos uma coisa que nós vimos aqui no nosso projeto é o seguinte se eu venho aqui e eu busco todos os meus autores eu venho aqui nesse endpoint e vou dar um Execute ele não tá me trazendo apenas os objetos de autores ele está me trazendo
um outro objeto que é formado pelos dados que me trazem os autores por uma mensagem que me traz uma mensagem de sucesso ou de erro ou algo que eu venha configurar e me traz um status que pode ser true se a solicitação deu tudo certa ou pode ser falsa se a solicitação deu alguma coisa errada perfeito então a gente precisa criar esse objeto que vai ser esse objeto que vai padronizar as nossas respostas Então a gente vai vir aqui dentro dos nossos modelos e vamos criar uma nova classe essa nova classe que a gente vai
criar vai ser a response Model que vai ser basicamente a nossa Model de resposta e ela vai ter algumas propriedades então ela vai ter um prop uma propriedade de um tipo que nós já vamos ver [Música] dados vai ser o nome dados outra prop outra propriedade Opa propriedade Vamos colocar novamente aqui porque não tá nosso intellicode não tá entendendo Então vai ser uma outra propriedade que vai ser Public do tipo string mensagem então a gente pode colocar o nosso get set e ela inicia com uma string vazia Então se a gente não colocar nada ela
vai ser uma string vazia embaixo nós temos uma outra propriedade que vai ser do tipo buano que é o nosso status também podemos colocar o nosso getset e se a gente não marca nada no nosso status ele é true agora com relação ao tipo perceba a gente vai utilizar esse response Model tanto pros tipos de autores como para o tipo de livros para eu não precisar criar vários response Model um para autor e um para livros a gente vai ter um tipo genérico ou seja um tipo qualquer a gente pode receber qualquer tipo para esse
modelo Então o a resposta esse modelo a gente pode ter um response modo tanto para autor como para livro para isso a gente vai colocar que é um tipo genérico a gente coloca aqui em cima tipo Genérico e o tipo de dados que nós vamos receber também É genérico É um t por quê Porque a gente pode ter dados tanto do tipo autor como do tipo livro e se mais para frente a gente quiser colocar usuário ou algum outro tipo de produto a gente pode estar utilizando esse mesmo response Model e vamos colocar que o
dados ele pode ser nulo porque ele pode vir nulo quando a gente não encontra nada dentro do banco Se der algum erro ele vai ser nulo também e assim por diante Então ele pode ser nulo a gente coloca essa interrogação para exemplificar isso para dizer isso para ditar que ele pode ser nulo certo podemos salvar aqui já estamos com os nossos a o nosso response Model criado agora nós podemos criar a nossa Controller vamos adicionar aqui uma nova Controller que vai ser o nosso a nosso Controller do tipo api então marca a api aqui Controller
api vazio vamos adicionar e a Controller que nós vamos criar é a nossa autor Controller adicionar perfeito agora nós vamos começar e vamos seguir uma linha de raciocínio na nossa criação nós já sabemos que a nossa Controller ela se comunica com a interface e a interface se comunica com o service nós vamos começar a nossa programação da seguinte forma primeiro nós vamos ditar Quais são os métodos que nós precisamos na nossa interface depois nós vamos implementar os métodos no nosso serviço e assim por final nós vamos chamar esses métodos na nossa Controller Então nós vamos
iniciar com o nosso com a nossa interface então na interface nós vamos colocar os métodos que a gente precisa primeiro método que a gente quer vai ser o o método de listar todos os autores então ele vai retornar um tesque tesque porque vai ser um método assíncrono daqui a pouco eu já explico um pouquinho mais sobre métodos assíncronos mas por ser o método assíncrono ele vai retornar um tesque o tipo de retorno vai ser um response Model que vai ser o tipo de resposta que nós acabamos de criar o response Model com os dados mensagem
e status e esse response Model que é o do tipo genérico nesse caso aqui vai ser o tipo autor Model do tipo autor Model não vai ser o tipo list autor Model porque se ele vai retornar todos os autores que nós temos ele vai retornar uma lista então list autor Model e o nome desse método vai ser listar autores Ele não recebe nada ele simplesmente vai listar nós já podemos colocar um outro método aqui que vai ser o tesk response Model que ele torna Aí sim um autor Model porque ele vai listar vai esse daqui
vai ser o método em que a gente busca um autor referente ao ID dele então a gente retorna apenas um autor o busca buscar autor por ID e nesse daqui a gente recebe o ID autor para que a gente consiga est buscando essa informação nós podemos colocar também o nosso buscar autor por aí de livro então tesk response Model retorna também o autor Model que é o buscar autor por ID livro A gente coloca o id de um livro específico e a partir desse ID desse livro A gente consegue buscar o nosso autor perfeito Então
a gente vai ter esses três métodos iniciais que a gente vai estar desenvolvendo que é o listar todos os autores buscar os autores por ID e buscar o autor por ID do livro Agora sim se nós voltamos aqui pro nosso service nós estamos com erro Por que esse erro porque a gente tá falando que o service implementa todos os métodos da interface porém a gente tá com métodos na interface só que não estamos implementando esses métodos então a gente pode clicar em cima desse erro dar um control ponto e implementar a interface pronto os três
métodos que nós temos está estão implementados estão ados aqui implementados ainda não agora dentro desse dessa Classe A gente precisa ter acesso ao nosso contexto porque nós precisamos ter acesso ao nosso banco de dados porque para buscar o autor por ID eu preciso me conectar ao banco e dentro do Banco buscar os autores que estão lá então eu vou criar o meu Construtor aqui esse Construtor ele vai receber o nosso app de B context que eu vou chamar de context e dentro aqui da nossa classe eu vou vou ter uma propriedade privada apenas de leitura
que vai ser do tipo app Deb context underline context context e essa propriedade vai receber o contexto que nós estamos tendo Então a partir da underline context nós temos acesso à nossa ao nosso contexto a gente consegue se conectar ao banco e ter acesso consequentemente Às nossas tabelas Agora sim a gente consegue dar andamento mas antes vamos já deixar criado aqui dentro do banco os nossos autores então autor a sobrenome a autor B sobrenome b e dentro de livros editar 200 linhas superiores livro A autor de id1 pera que deu algum erro aqui ó é
porque o o autor a é aid dois não já tínhamos criad os id1 então id1 não existe é ID do e livro B aid 3 vamos colocar aqui um livro livro livro C que vai ser aí de dois também então a gente tem aqui dois livros cadastrados pro pro autor de ID do e um livro pro autor de ID TR já temos alguns dados aqui a gente já consegue estar trabalhando com alguma coisa então perfeito vamos primeiro listar os autores então primeiro a gente vai listar todos os autores do nosso banco então para listar todos
os autores a gente a primeira coisa que nós precisamos fazer é colocar o nosso try Cat Por que try Cat porque nós vamos tentar Efetuar uma informação um trecho de código e se der algum erro nós caímos dentro do cat basicamente isso então a gente já tem uma tratativa de erros aqui então a gente vai tentar realizar uma operação e se não der certo a gente cai dentro do cat caindo dentro do cat a gente pode tratar o erro e enviar um erro mais arrumado e ajeitado lá pro nosso usuário final primeira coisa que a
gente vai fazer é em cima do trai criar um objeto de resposta criar o nosso response Model do tipo lista de autor Model que é o tipo de resposta que nós temos para esse método aqui então o tipo de resposta é um response Model list mod a gente vai chamar de resposta e ela vai ser igual a um response Model list autor mod aqui eu já posso até criar o meu Cat se eu cair no CAT foi porque algum erro aconteceu então eu posso colocar resposta P mensagem é igual a me menagem P message então
a mensagem do meu modelo de resposta é igual a mensagem de erro que eu recebi no meu Cat e me resposta ponto status é igual a false porque deu algum problema e eu posso retornar essa resposta perfeito Então dessa forma eu tô retornando a minha resposta de acordo com o erro que aconteceu aqui em cima no tesque eu posso colocar o meu assin porque vai ser o método assíncrono e a gente já vai entender um pouquinho sobre como que esse método assíncrono funciona então a gente já tem o que acontece caso algum erro ocorra agora
o que que a gente vai est tentando realizar nós vamos tentar pegar uma lista de autores de dentro do nosso banco então vamos criar uma variável de autores e essa variável de autores vai ser populado com a lista de autores que nós temos dentro do banco para isso nós precisamos entrar dentro do nosso banco que nós já Vimos que é através do nosso underline context entrar na nossa tabela de autores e dentro da tabela de autores dá um t list basicamente entrei no meu banco entrei na tabela de autores e transformei em lista todos os
autores que eu tenho lá porém eu não sei se a minha quantidade de autores no banco são 10 autores ou se são 1000 autores e dependendo da quantidade de autores que eu tenho cadastrado esse processo pode demorar ou esse processo pode ser rápido e eu só quero que o meu código continue pra próxima diretiva quando ele tenha pegado todos os autores que tem dentro do banco então eu preciso esperar esperar que o processo de coleta de de dados dentro do banco ocorra antes que eu efetivamente possa dar continuidade ao nosso código e para esperar nós
utilizamos esse método assíncrono então eu já coloquei que ele é assíncrono e que ele retorna um tesque Agora eu tenho que colocar aqui que eu quero esperar um await que esse processo ocorra como eu coloquei um await aqui eu não vou mais poder utilizar o tlist eu tenho que utilizar o t list assy Agora sim eu vou esperar esse processo acontecer eu vou vir chegar nessa parte de código nessa linha de código e eu vou esperar pegar todos os autores de dentro do banco quando eu pegar tudo e todos os autores tiverem sido coletados e
colocados dentro dessa variável aí sim eu continuo e agora aqui no continuidade eu simplesmente coloco aqui o meu resposta resposta pon dados é igual ao autores então a minha lista de autores é igual a resposta ponto dados que eu tenho aqui no meu modelo de resposta e eu posso então dar um return resposta eu poderia até colocar uma mensagem de sucesso aqui ponto mensagem todos os [Música] autores foram coletados Prontinho agora eu retorno meu resposta ai nós já temos a nossa lista de autores já criamos o método na interface já implementamos o método no serviço
podemos ir até o nosso Controller e agora aqui dentro do nosso contrôler nós nós podemos efetivamente pegar toda essa lista de autores como que a gente faz isso primeiro a gente precisa receber a nossa Interface para termos acesso ao método então o i autor interface e autor interface autor interface é o nome nós podemos criar Então a nossa variável privada do tipo apenas leitura que é o tipo autor interface e autor interface nós vamos chamar de underline aut interface agora através desse underline autor interface eu posso estar tendo acesso a todos os métodos que eu
tenho na minha interface porém agora aqui no nosso program Ah já tá configurado tinha esquecido nós já configuramos já falamos que o método que tá na interface tá sendo implementado no serviço exatamente que a gente precisa agora a gente pode voltar pro autor e agora a gente vai criar o nosso método nosso Point especificamente que vai buscar e listar todos os autores primeira coisa o nosso método ele é um http get porque ele tá buscando dados então ele é http get e eu posso dar o nome de buscar autores Vamos colocar o mesmo nome do
método listar autores autores que é o mesmo nome que nós colocamos aqui listar autores agora a gente vai criar o método ele é o Public ele é assing porque nós temos que esperar tá então consequentemente ele é um tesque e ele vai nos retornar um Action result porque ele pode nos retornar um resultado 200 que tudo deu certo um 404 um um 409 depende ali do processo um 500 então Depende de qual é a Action que a gente vai querer est retornando no nosso caso a gente vai retornar um OK mas por isso para conseguir
retornar o ok no que seria o o status code 200 a gente precisa ter esse Action result esse Action result vai ser de que tipo vai ser um response Model porque vai ser o nosso tipo de resposta e esse response Model vai ser uma lista de autor Model e o nome do nosso método é listar autores não recebe nada e basicamente a gente tem uma variável de autores a gente precisa esperar entrar dentro do nosso autor interface e dar um listar autores toda a lista de autores vai ser esperada né ser coletada e ela vai
vir para dentro desse autores e aí sim a gente pode dar um return ok que todos os dados foram coletados autores perfeito então todos os autores coletados agora a gente pode rodar o nosso projeto e já tentar utilizar esse endp Porque nós já temos autores cadastrados que nós cadastramos manualmente e o e o nosso processo até então já tá todo desenvolvido então rodamos Aqui nós temos o nosso endp listar autores podemos clicar dá um try out um Execute e Prontinho o nosso autor a sobrenome a nosso autor B sobrenome b a nossa mensagem todos os
autores foram coletados e o status true fechou exatamente da forma que nós queríamos agora nosso end Point Já tá pronto podemos partir pro próximo viemos vamos vir aqui em autorice podemos e vir aqui agora no buscar por ID a gente vai buscar autor por ID podemos criar o mesmo processo nosso try nosso Cat aqui a gente coloca Vamos criar esse essa variável aqui que é a nossa variável de resposta nosso response Model agora ele não vai retornar uma lista ele vai retornar apenas um autor Model então a gente tira esse list daqui ele retorna apenas
um autor model no nosso o resposta pon mensagem é igual a noss p message e nossa resposta ponto status é igual a false e podemos dar um return resposta certo colocamos o nosso ass ao lado do tesque e agora sim nós podemos buscar o ID por o o nosso o nosso autor por ID então para buscar o autor por ID a gente vai realizar um processo extremamente parecido com o que nós fizemos até então a gente vai basicamente tentar realizar uma operação a gente vai ter uma variável do tipo autor aonde vai tá o autor
que nós coletamos nós vamos aguardar que o processo ocorra vamos entrar dentro do nosso banco dentro da nossa tabela de autores e vamos dar um first ou default assink first first ou defn então a gente vai pegar o Primeiro Registro que obedeça a uma regra específica ok então beleza Qual regra que nós queremos respeitar nós queremos que a cada linha de autores que nós vinhamos a passar dentro do nosso banco então cada autor banco nós queremos que o autor banco. ID seja igual ao ID autor então aqui nesse forche de F aink É como se
eu tivesse passando por cada linha de cada autor e cada linha que eu passo eu faço uma verificação se o ID dessa linha que eu passei é igual ao ID que eu recebi dentro do meu dentro do meu método aqui se ele for igual que significa que eu achei o autor que eu tô pesquisando se eu achei o autor que eu tô pesquisando Então esse autor não vai ser nulo então eu posso colocar um if esse autor é nulo significa que eu não encontrei se eu não encontrei a resposta ponto mensagem vai ser n um
registro localizado agora e daí eu dou um return resposta agora se esse autor não é nulo Então significa que eu encontrei então a resposta ponto dados é igual ao autor resposta ponto mensagem autor localizado autor localizado e eu posso dar um return resposta pronto buscar autor por ID foi criado perfeitamente podemos voltar ao nosso Controller e vamos criar agora o método de buscar por ID primeiro http get porque ele vai buscar dados buscar autor por ID e precisamos colocar um barra aqui ID autor porque nós estamos recebendo essa propriedade quando nós estamos criando esse método
né solicitando esse método então a gente pode colocar aqui um Public podos até copiar esse de cima aqui copia o de cima cola aqui embaixo ele não vai tá retornando uma lista de autor Model então a gente pode excluir aqui o nome do método é buscar autor por ID e ele recebe um int ID autor ID autor e agora aqui essa variável vai se chamar autor e aqui vai ser o buscar ID por autor por ID coloco o ID do autor e retorna O nosso autor perfeito agora a gente pode dar um Play na nossa
aplicação aqui buscar ID por autor a gente pode colocar um dois dá um Execute Prontinho buscou aid do coloquei o três buscou id3 e autor localizado se eu coloco id4 que não existe nenhum registro localizado tá funcionando perfeitamente bem a gente pode voltar no nosso service eu vou diminuir ele aqui a gente vai desenvolver agora o buscar autor por ID do livro Então esse é o que a gente vai criar agora nesse momento certo então para criar o buscar autor por ID do livro é o mesmo processo a gente pode até copiar aqui de cima
copiar esse ah não esse daqui tá muito grande vamos copiar esse daqui ã podemos copiar esse daqui o nosso listar autores e colocar no buscar autor por aí de livro perfeito então a gente já tem a nossa resposta Ela não é uma lista ela é apenas o autor Model então a gente pode colocar aqui só o autor model no nosso resposta podemos aqui excluir esses essas partes e deixar basicamente o nosso de erro então a gente tem o nosso try Cat o erro aqui podemos colocar o nosso assim que ao lado do tesque e perfeito
nenhum erro tá acontecendo temos a nossa variável de resposta o nosso modelo de resposta Já criamos o modelo de resposta pro erro mensagem de erro status falso e retorna a resposta e agora vamos criar o nosso try a gente tá buscando um autor específico de acordo com o id de um livro que nós colocarmos Então beleza primeira coisa que a gente vai criar é a nossa variável de autor Então a gente vai pegar um autor específico do banco vai colocar dentro desse dessa variável nós vamos esperar acontecer tudo que tem que acontecer dentro do banco
nós vamos entrar no nosso banco e dessa vez nós vamos entrar dentro da tabela de livros nós não vamos entrar dentro da tabela de autores porque dentro da tabela de livros eu tenho o meu autor ID eu tenho o meu autor id e tenho o meu livro ID percebam que nesse método eu tô passando o ID do livro Então vou precisar entrar na tabela de livro vou precisar encontrar o ID do livro então Digamos que seja o seis peguei o ID seis e daí eu vou pegar o autor de TRS que é o autor que
tá referenciado a esse livro perfeito é isso que a gente vai fazer então eu entrei dentro do meu banco vou entrar dentro da minha tabela de livros e tenho que dar um include um include e o que que eu vou dar include eu vou dar include no autor no azinho de autor a ponto autor por que eu tô fazendo isso dentro do meu modelo de livro eu tenho o objeto de autor Model eu tô fazendo o seguinte eu vou pegar o meu livro Model Então eu peguei toda a propriedade de livro porém eu preciso entrar
dentro do autor Model eu preciso entrar dentro do autor Model e pegar todos os dados do autor é isso que o include tá fazendo ele tá entrando dentro do meu livro Model ele tá entrando dentro do meu livro Model e quando ele chega na propriedade autor Model ele tá entrando no autor Model e pegando todas as propriedades do autor ele tá basicamente fazendo esse processo então a gente deu um include para nós entrarmos dentro do autor Model e pegar todas as propriedades do autor Então pegando todas as propriedades a gente pode dar um ponto aqui
e first ou default assim a gente vai pegar o primeiro elemento que obedeça uma regra E qual vai ser essa regra nós vamos pegar o azinho podemos dar colocar como azinho o a ponto podemos colocar livro livro banco porque a gente tá passando por cada um dos livros dentro do banco livro banco eu vou até diminuir colocar aqui para baixo pra gente entender então primeiro eu dei um include agora eu tô dando first Def aink eu tô passando por cada um dos livros dentro do banco e eu vou pegar aquele livro em que o livro
banco. ID seja igual ao ID livro então eu basicamente peguei o registro eu peguei o autor referente aquele livro ID que eu passei agora eu posso basicamente fazer um if if autor for igual a nulo o Nossa resposta ponto mensagem vai ser nenhum registro localizado e o e o return resposta agora se o autor não for igual a nulo então resposta ponto dados agora então o meu resposta ponto dados é igual ao meu autor mas não o autor geral porque esse autor na verdade a gente pode até mudar porque o que eu tô recebendo aqui
é o livro O que eu tô recebendo aqui é o livro eu tô recebendo todo o meu livro agora dando um ponto eu consigo acessar a minha propriedade de autor porque dentro do meu livro mbel eu tenho o autor então se eu dou um livro ponto autor eu tô entrando dentro do meu autor Agora sim eu tô retornando apenas o autor e eu posso dar um resposta ponto mensagem autor localizado return resposta perfeito podemos voltar a nosso Construtor nosso Controller e dentro do nosso Controller Vamos colocar o nosso método então a gente pode copiar esse
método aqui de cima colar aqui embaixo vai ser o buscar autor por ID livro e aqui a gente recebe o ID livro então copiando o nome aqui a gente recebe o ID livro aqui vai ser o buscar autor buscar autor por ID livro passando o ID livro e nós vamos receber aqui o autor e retorna O autor a gente pode salvar e vamos debugar aqui pra gente ver e entender certinho o que tá acontecendo eu coloco um Break Point aqui no 36 rodo aqui por esse https desse lado aqui e agora vamos tentar testar para
entender o que tá acontecendo eu venho aqui buscar autor por ID livro eu tenho quais ids de livro aqui no nosso banco tem o cinco o seis e o sete eu quero buscar o id5 por exemplo eu coloco um tryout o ID do livro 5 dou um Execute parei aqui no meu endp dando F10 eu passo por cada uma das Linhas dando o f11 eu entro dentro do método então eu entro dentro do método aqui já tá passando aí de livro O cinco eu dou um F10 criou a minha variável de resposta dou um F10
buscou o meu livro então se eu clico aqui eu tenho a propriedade livro eu tenho o ID do livro eu tenho o título do livro e eu tenho o autor esse autor se eu aumento ele aqui eu tenho a propriedade do meu autor o ID do autor o nome do autor e o sobrenome do autor que é o objeto que eu quero agora aqui ele vai verificar o livro é igual a nulo nesse caso não é então ele vai passar por esse if não vai vir aqui nessa parte agora o resposta ponto dados eu quero
que seja o livro autor Então vai ser só a minha o meu objeto de autor é isso que eu tava explicando para vocês vai ser só o objeto de autor se eu dou um F10 a mensagem agora é o autor localizado posso dar um F5 para passar tudo direto e a resposta que eu tenho é autor 10 sobrenome a autor a sobrenome a Perfeito nós fizemos a o desenvolvimento desses três end points estão criados agora vamos parar aqui o nosso código de rodar e a gente vai criar o nosso endp eh referente a Nossa criação
de livros Então a gente vai vir aqui na nossa interface e vamos criar o método de criar um novo autor na realidade né Vamos criar um novo autor então ele vai ser um método tesque response Model e ele vai retornar uma lista de autor mod então ele vai retornar uma lista de autores já contendo o autor novo Que Nós criamos e vai ser o criar autor criar autor a gente precisa receber um modelo de qual vai ser esse criar autor que nós vamos precisar receber Perceba o seguinte se eu coloco o meu autor Model quando
eu vou aqui vamos aqui no nosso projeto já pronto aqui o projeto já pronto quando eu vou criar o autor Eu só preciso preencher o nome e o sobrenome porém no meu autor Model eu tenho mais propriedades eu tenho o meu ID e tenho o meu livros mas eu sou só preciso preencher o nome e o sobrenome não preciso preencher tudo então eu vou criar um modelo provisório que seria o nosso dto o chamado data transfer Object eu vou criar um dto que vai ter apenas as propriedades nome e sobrenome e daí dentro do nosso
código o nosso usuário ele vai preencher apenas nome e sobrenome e dentro do nosso código a gente vai fazer a transformação desse dto em um autor Model E aí sim efetivamente criar dentro do banco então pra gente entender a gente precisa fazer na prática vamos lá vamos criar o nosso dto a gente vai criar uma nova pasta que eu vou chamar de dto e dentro dessa pasta de dto eu vou criar uma outra pasta chamada autor que vão ser os dto referentes ao autores eu vou criar Então essa nova classe e essa classe vai se
chamar autor criação dto que é o nosso dto ente a criação de um novo autor eu posso vir no autor Model e copiar essas propriedades que eu preciso preencher que é o nome e o sobrenome Prontinho Então são só essas propriedades que eu preciso preencher o nome e o sobrenome então o autor criação dto tá criado perfeitamente bem Eu posso salvar agora eu posso vir no Nossa interface e para criar um novo autor eu não preciso receber um autor Model já pronto eu preciso receber um autor criação dto só preciso receber o nome e o
sobrenome do autor um autor criação dto é só o que eu preciso receber para efetivamente conseguir criar dentro do nosso banco um novo autor perfeito criamos dessa forma agora sim nós podemos vir na nossa interface na nossa no nosso serviço viemos no nosso serviço tá dando erro porque não tá tudo implementado control ponto implementar interface o criar autor já tá E aqui criado agora a gente só precisa implement especificamente esse método que é o que a gente vai fazer agora então todos nossos processos padrões Vamos criar o nosso respon list autor que vai ser a
nossa resposta é igual a new esse mesmo elemento basicamente response Model vamos dar o nosso TR exception nosso resposta Podemos até copiar essa parte do erro aqui PR a gente não se demorar em coisa que a gente já viu várias vezes então esse Cat a gente já coloca aqui Prontinho colocamos o assn ao lado do tesque e perfeito agora sim a gente pode criar o nosso try criar especificamente o que a gente quer que aconteça nós queremos criar um autor então a gente já tem os dados de nome e sobrenome que nós recebemos pelo autor
criação dto Então dessa forma a gente já consegue criar um objeto de autor Então a gente vai criar uma variável autor essa variável vai ser um novo autor Model perfeito e agora a gente tem que mapear as informações o autor Model ele tem nome e o nome no nosso caso é o autor criação dto nome e o autor ele tem um sobrenome que é o autor criação dto sobrenome criamos o nosso autor Pronto já temos o nosso objeto de autor não precisamos colocar o id porque o ID é criado automaticamente quando a gente coloca dentro
do banco e não precisamos incluir os livros porque o livro A gente cria de a gente coloca o a gente refere o livro ao autor quando a gente cria um novo livro então a gente pode simplesmente colocar dentro do banco abrimos o nosso banco Vamos dar um adicionar e vamos adicionar o nosso autor podemos colocar aqui um await para nós esperarmos que as informações sejam salvas dentro do banco então que dentro do nosso banco seja realizado save Changes assink agora a gente pode colocar um resposta ponto dados porque a gente tem que retornar uma lista
de autores e colocar um await entra dentro do banco entra dentro de autores e dá on list assink porque nós vamos retornar uma lista de autores colocamos já esse essa lista já atualizada com o autor Que Nós criamos dentro do nosso resposta ponto dados agora a gente pode dar um return resposta Podemos até colocar uma mensagem [Música] aqui autor criado com [Música] sucesso perfeito já criamos nosso autor podemos voltar até o nosso contrôler e dentro do nosso Controller Vamos criar o nosso método agora dessa vez vai ser um http post porque nós estamos alguma informação
estamos criando uma informação criar autor podemos copiar esse aqui de cima colar aqui embaixo vamos excluir o que tá aqui no meio colocar criar autor como nome e aqui no criar autor a gente recebe o autor criação dto autor criação dto nós temos como retorno uma lista de autores a gente pode dar o nosso a dentro do nosso autor interface criar autor e passar para dentro do nosso método criar autor o nosso autor criação dto e podemos dar um return Ok autores Ok podemos dar um Play na nossa aplicação criar autor try out string string
Execute Prontinho criou o string string se a gente abre o nosso banco vamos dar aqui um executar SQL string string criado com aid qu a gente pode vir aqui e buscar referente ao ID do autor id4 Execute string string tudo funcionando perfeitamente agora a gente vai criar o editar autor vamos editar um autor já existente já vamos criar dois métodos nós vamos criar o editar e o remover vamos lá ele vai ser um tesk response Model vamos até copiar esse de cima ele vai retornar uma lista de autores vai ser o editar autor e embaixo
já vamos criar aqui o de remover autor editar autor vamos copiar esse carinha aqui colocar aqui embaixo também vai retornar uma lista excluir autor o excluir autor Ele simplesmente recebe um inteiro ID autor E no caso do editar ele também precisa receber um dto por quê Porque Diferentemente do Criação em que a gente só precisa do nome o sobrenome no caso do editar a gente precisa do id perceba no nosso projeto já pronto para editar a gente precisa passar o ID porque a gente precisa saber especificamente qual registro nós queremos editar Então é isso que
a gente vai fazer então nós vamos ter que criar um novo dto que vai ser o autor edição dto aonde nós temos o nosso nome e sobrenome a gente pode até pegar do autor Model a gente vai ter esses três propriedades o id o nome e o sobrenome autor edição dto colou ele aqui Prontinho temos o id o nome o sobrenome podemos vir aqui na nossa interface e agora o editar autor ele recebe um autor edição dto autor edição dto podemos voltar salvar tudo né e voltar ali pro nosso serviço Minimizar tá dando o errinho
de implementação control ponto implementar interface temos o editar autor e o excluir autor que é o que a gente precisa desenvolver agora então vamos lá vamos desenvolver primeiro o nosso excluir um autor que vai ser mais rápido então vamos excluir um autor aqui primeira coisa que a gente precisa é criar a nossa variável de resposta então cria aqui a resposta é igual a new resposta criou a variável de resposta vamos dar o nosso try o nosso Cat nosso Exception [Música] ex e aqui a gente pode colocar toda a nossa questão de resposta de mensagem basicamente
copiei e colei aqui vamos dar o nosso ass aqui na frente para fazer esse essa mensagem essa área de transferência que eu tenho todas as minhas cópias passadas é simplesmente você clicar em Windows V Windows V Prontinho aparece a área de transferência e aqui você tem tudo que você copiou nos últimos momentos É bem interessante e ajuda a ficar mais rápido perfeito agora a gente pode continuar agora o que a gente vai tentar fazer primeiro para excluir um autor a gente precisa saber que autor a gente quer excluir a gente já tem o ID do
autor então a gente pode criar uma variável autor entrar dentro do nosso banco dentro da tabela autores e dá um first default assink e dentro desse F Def nós temos o nosso autor banco nós estamos passando por cada um deles e nós queremos que o autor banco. ID seja igual ao ID autor perfeito dessa forma eu peguei exatamente o autor referente ao ID autor que eu repassei Agora sim eu já tenho o autor eu posso dar um if autor igual a nulo caso esse autor não exista se ele não existir a nossa resposta ponto mensagem
é nenhum autor localizado e resposta ponto status é igual a resposta ponto status permanece true né porque a gente conseguiu fazer a requisição a gente só apenas não conseguiu pegar nenhum dado porque o banco estava vazio e a gente pode dar um return resposta fechou agora se esse autor existir então eu posso dar entrar dentro do nosso banco dar um remove vou remover esse autor que nós queremos posso dar um await salvar todas as informações dentro do banco dentro do meu resposta P dados eu vou colocar uma lista de todos os meus autores do banco
agora atualizado com menos o autor que eu não desejo então Contex autores e eu retorno a minha resposta perfeito fizemos todo o processo aqui pegamos o autor é nulo então nenhum dado localizado não é nulo então remove ele do banco salva os dados e coloca uma lista de todos os elementos dentro do meu resposta ponto dados e retorno o meu resposta e poderia colocar aqui uma mensagem resposta pon mensagem é igual eh o autor removido com sucesso fechou criamos a nossa o nosso método de excluir autor agora antes de ir pro nosso Controller Vamos criar
aqui já o de edição vamos editar o nosso autor aqui rapidamente para editar o autor eu já tenho o nosso autor edição dto nesse autor edição dto eu tenho o id o nome e o sobrenome eu posso criar aqui então a minha variável de resposta vamos copiar aqui a variável de resposta podemos colocar Podemos até copiar esse try Cat aqui vou pegar esse try Cat completo do de remover Vou colocar aqui embaixo ess try Cat completo no try eu vou excluir tudo e vou deixar apenas o cat com a mensagens de erro aqui do lado
do tesque eu coloco meu assin e perfeito agora a gente pode começar a editar um registro específico para editar um registro específico primeiro eu tenho que pegar o registro eu quero editar então é a mesma questão Um var autor await Agora sim quero editar o meu autor eu entro dentro do banco vou nos meus autores vou no first ou defa assim para cada autor banco que eu estiver passando eu quero que o que o ID desse autor banco que eu estou passando seja igual ao autor edição D to. perfeito quero que seja igual ao autor
edição dto.ts agora se ele não for nulo eu quero que esse autor ponto nome o nome dele agora seja igual a autor edição dto P nome eu quero que o autor pon sobrenome seja igual ao autor pon eu quero que seja igual ao autor edição dto P sobrenome editei agora eu já peguei os dados que o meu usuário preencheu e coloquei dentro do usuário dentro do banco é isso que eu quero agora eu posso dar um context p update para salvar as informações coloco o meu autor agora que está modificado dou um await e salvo
tudo dentro do banco aqui tá dando esse errinho por conta do quê do famoso ponto e vírgula Prontinho colocamos o ponto e vírgula agora o nosso resposta ponto dados ele vai ser igual ao meu await entro dentro do banco pego todos os meus autores sh list aink e dou um return resposta e posso colocar aqui basicamente a minha mensagem também resposta pon mensagem igual dados autor editado com sucesso agora eu posso voltar lá no meu Controller e dentro do Controller nós vamos agora desenvolver o nosso editar e o nosso excluir pro editar é http porque
nós estamos editando e seria o editar autor podemos copiar esse aqui de cima colar aqui embaixo editar autor ele recebe um autor edição dto autor edição dto perfeito aqui a gente vai receber a lista de autores editar autor recebe o autor edição dto e retorna os autores perfeito fizemos todo o processo agora para remover vai ser o http delete que é o remover autor podemos colocar até o mesmo nome excluir autor podemos copiar esse aqui de cima colar aqui embaixo excluir autor aqui nós recebemos apenas o nosso inteiro ID autor né o ID do autor
que nós queremos excluir então queremos excluir autor Passamos o ID do autor nós recebemos também uma lista como retorno e retornamos essa lista perceba que a gente tá retornando uma lista mas nesses três aqui que nós copiamos a gente não colocou aqui no response Model que é uma lista é interessante colocar para ficar tudo certo então a gente coloca list então é um list a gente pode copiar esse daqui tanto no criar quanto no editar a gente tá retornando uma lista de autores como também no excluir a gente tá tornando uma lista de autores agora
as nomenclaturas estão todas corretas podemos dar um play Vamos dar um play no nosso projeto vamos aguardar aqui ele carregar Carregou agora a gente tem os editar se a gente vem aqui e lista todos os nossos autores nós temos o autor string que é o id4 nós vamos editar o id4 Vamos colocar quatro aqui editei editei Vamos dar um Execute Prontinho está aí edado eu posso vir no excluir TR out ID autor 4 Vamos dar um Execute autor removido com sucesso e ele não está mais na nossa listagem e dentro do banco muito menos Nós
criamos todos os end points referentes aos autores já tá criado tá desenvolvido fizemos conforme tinha que ser agora nós vamos criar o nosso end Point de livro é basicamente extremamente parecido então a gente pode criar aqui o nosso controll a gente vai criar aqui um novo contrôler que vai ser o do tipo api vamos adicionar vai ser o nosso livro Controller livro Controller podemos vir aqui no nosso service já criar uma nova pasta agora de livro eu peço até que você Tente fazer sozinho tenta fazer sozinho de livro para ver se você consegue depois volta
aqui e comenta se você conseguiu mas se você não conseguir vamos vamos fazer tudo novamente para nós conseguirmos entender melhor agora vamos passar aqui adicionar uma nova classe que vai ser o nosso livro service vamos Inserir a nossa interface que é o i livro interface então Aqui nós temos todos os nossos métodos a gente pode vir no nosso program não esquece do nosso program que pra gente falar que os métodos da nossa interface estão implementados no nosso serviço a gente pode acrescentar aqui então o nosso builder.services.add I livro interface tá implementado no livro service perfeito
adicionado dessa forma que a gente precisa aí livro interface implementado no livro service esse erro tá acontecendo porque é o seguinte deixa eu fechar todas as as guias exceto isso isso tá acontecendo porque dentro do livro Service eu não tô herdando o nosso livro interface Então vamos dar dois pontos aqui e vamos herdar o i livro interface herdou agora o erro logo mais já é para sumir Sumiu agora tá tudo certo agora vamos vir aqui no nosso livro interface e vamos abrir o autor interface nós vamos copiar esses métodos aqui e vamos colocar no livro
interface colocamos no livro interface então agora a gente já sabe que são métodos extremamente parecidos só que em vez de listar autores é listar livros e ele retorna uma lista não de autor Model mas de livro Model buscar autor por ID não é buscar livro por ID ele recebe o ID livro e ele vai retornar uma lista de livro Model buscar autor por livro ID buscar autor por ID livro não é buscar livro por ID autor a gente coloca ID autor aqui e ele vai retornar um livro Model criar autor ele vai receber autor criação
dto não ele vai receber um autor edição dto não ele vai receber um livro criação dto e um livro edição dto então a gente pode criar um novo dto aqui uma nova pasta livro nós vamos Vamos criar Aqui as nossas classes que vai ser livro criação dto Já podemos criar a outra classe que vai ser a livro edição dto na criação dto quando nós estamos criando um livro nós preenchemos algumas informações nós preenchemos o título e alguns dados de autor então aqui no nosso projeto já pronto quando eu vou criar um livro Eu preencho o
título e dados do autor quando eu vou editar Eu preencho o id e o título e daí o autor então a gente pode vir aqui no nosso livro Model e copiar o título e o autor é no caso de criação e no livro Model o ID título e autor é no caso de edição perfeito colocamos podemos voltar na nossa interface e agora no livro interface em vez de a gente receber um autor criação dto a gente vai receber um livro criação dto control ponto damos o nosso using livro criação dto e a gente retorna uma
lista de livro Model aqui no editar e no excluir também é uma lista de livro Model editar autor a gente recebe um livro edição dto livro edição dto e aqui embaixo para excluir a gente recebe o ID livro perfeito agora a gente pode entrar dentro do nosso serviço e implementar tudo cont control pon implementar interface todos os nossos métodos estão aqui a gente pode colocar o nosso setor para nós termos acesso ao nosso banco de dados então appdb context nosso context basicamente eu posso dar um control ponto em cima do context e marcar aqui o
que eu quero receber que é esse daqui Criar e atribuir o campo context criando aí apenas vou mudar o nome para underline context underline context e perfeito criamos automaticamente a nossa injeção de dependência agora a gente pode começar a desenvolver os nossos métodos deixa eu diminuir eles aqui para nós fazermos um por um só que agora a gente vai usar como base o que a gente tem lá no nosso autor server porque eles são extremamente parecidos Então a gente vai abrir aqui o nosso autor service e vamos ir um por um Vamos diminuir Todos vamos
começar com buscar autor por ID que é basicamente o nosso buscar livro por ID a gente pode copiar todo esse daqui que é o nosso buscar autor por ID e colar no nosso buscar livro por ID e aqui a gente fazum modificações primeiro a nossa variável de resposta não é um autor Model é livro Model Prontinho colocamos o ass aqui na parte de cima aqui eu não vou recebendo um aor mas eu vou est recebendo um livro eu não vou est entrando dentro da minha tabela de autores mas dentro da minha tabela livros vou dar
um first e para cada livro que eu tenho no banco eu quero que o livro que eu tenho no banco livro banco o ID dele seja igual ao ID livro que eu tenho ali recebido perfeito agora se esse livro for igual a nulo nenhum registro localizado se ele não for igual a nulo o resposta ponto dados é igual ao meu livro e livro localizado Vamos colocar com sucesso e retorno a minha resposta perfeito criamos aqui o buscar livro por ID podemos diminuir aqui agora o buscar livro por ID autor Então a gente vai vir aqui
Vamos diminuir aqui buscar livro por ID autor é muito parecido com o buscar autor por ID livro então eu posso vir aqui Posso copiar todos esses aqui vamos colar e vamos fazer as modificações necessárias então aqui a minha variável de resposta ele é livro Model livro Model colocamos o assim aqui na parte de cima perfeito então aqui a gente já colocou a nossa variável de resposta e essa parte aqui vai ser um pouquinho diferente eu vou apagar aqui esse varo autor porque a gente vai fazer de uma forma diferente nós não vamos precisar entrar na
tabela de de autores para conseguir pegar o buscar livro por aí de autor Por que que isso não vai ser necessário porque dentro da nossa própria tabela de livros nós já temos o autor ID a gente não precisa ir numa outra tabela para buscar essa informação Então o que a gente vai fazer é o seguinte a gente vai criar uma variável livro Vamos esperar tudo acontecer entrar dentro do nosso banco entrar dentro da tabela livros dá o include para que a gente coloque o nosso autor então mesma regrinha eu entrei dentro do livro Model e
daí o include para que eu entre dentro do autor Model e pegue todas as propriedades do autor basicamente o que a gente já viu Então agora eu vou colocar um a eu quero buscar dentro da minha tabela de livros aonde o meu autor aonde o meu livro livro banco eu posso colocar aqui aonde meu livro banco o livro banco p autorid igual ao ID autor que eu tô recebendo no meu no meu na minha no meu método e daí tudo isso aqui eu vou colocar ponto t list assin o que eu fiz foi o seguinte
eu entrei na minha tabela de livros busquei os dados dos autores também e dentro dela eu tô fazendo o a dentro do meu livro Aonde o autor pid então eu tô fazendo o seguinte entrei dentro de livro daí eu tô entrando dentro de autor Aonde esse ID fori igual ao ID que eu tô recebendo no meu método Então quer dizer que eu tô pegando o autor específico mas como eh os livros eu posso ter vários livros para um único autor eu tô colocando numa lista porque no único ID de autor eu posso ter cinco livros
posso ter quatro livros e assim por diante então daí eu tô pegando toda a lista aqui Eu Tô verificando se é igual a nulo se for igual a nulo nenhum registro localizado se não for igual a nulo esse livro aqui essa lista de livros eu coloco para dentro do meu dados então o livros eu coloco para dentro do meu dados agora aqui tá dando esse errinho por quê Porque isso é uma lista não vai ser apenas um livro Model é uma lista de livro Model então aqui eu tenho que arrumar essa variável também resposta response
mod uma lista de livro models que a gente tá retornando uma lista de livro Model Prontinho o erro não não não foi mais Aparecido né Não apareceu mais eu posso colocar aqui livros localizados e eu tenho que arrumar L dentro da minha interface Perceba o tá dando erro aqui porque aqui eu tô retornando no buscar livro por aí de autor um livro apenas eu tenho que retornar o list livro Model perfeito ajustado agora não tá mais dando erro aqui e tudo tá funcionando buscar livro por autor agora vamos buscar Vamos criar o listar livros listar
livros a gente vem no nosso livro no nosso autor service autor service vamos buscar o listar autores vamos copiar aqui colocar no nosso listar livros e vamos fazer as modificações primeiro livro Model livro Model coloco assn aqui nós vamos buscar os nossos livros dentro da tabela livros aqui nós vamos colocar os livros para dentro do nosso resposta ponto dados todos os livros foram coletados retorna a resposta Prontinho feito esse método aqui agora vamos buscar o criar autor ah Olhe só nós não alteramos os nomes aqui ainda tá criar autor eh criar autor editar autor excluir
autor sendo que seria de livros então a gente pode vir aqui no nosso a livro interface e modificar em vez de criar autor é criar livro editar livro excluir livro O resto tá certo eu posso voltar agora no meu service e modificar aqui porque tá dando errinho Então não é criar autor é criar livro editar livro excluir livro Prontinho salvou o erro não tá mais acontecendo agora a gente pode executar né Criar e implementar o criar o livro para criar o livro A gente pode vir aqui no nosso service vir no que antes er o
nosso criar autor copiar tudo isso daqui colocar no criar livro e fazer as modificações necessárias vai ser uma lista de livro Model que a gente vai retornar coloco o a aqui em cima esse daqui ele vai ser um pouquinho diferente então eu vou excluir tudo isso daqui e vamos fazer do zero pra gente entender tudo que tá acontecendo Então beleza o tipo de resposta já tá aqui retorna uma lista de livros os erros já tá aqui também caso caia no CAT a primeira coisa que a gente vai fazer é pegar qual o O autor que
é respectivo a esse livro Por quê Porque a gente quer criar um novo livro Só que para criar um novo livro A gente precisa pegar o autor para o qual a gente quer criar esse livro porque o livro ele tá junto com o autor então para criar um livro eu preciso que um autor exista Então vamos criar dessa seguinte forma vamos buscar o autor que a gente quer criar isso porque quando a gente tá criando um livro A gente passa o ID do autor Então a gente vai conseguir verificar se esse autor existe ou não
porque se ele não existir não tem como a gente criar então a gente vai criar aqui um var autor esperar com que tudo aconteça vamos entrar dentro do nosso banco dentro da tabela de autores e vamos dar um first Def assim agora esse autor banco a gente quer que o autor banco pid seja igual Vamos diminuir aqui pra gente conseguir ver seja igual ao livro criação dto pon autorid então eu tô buscando para ver se existe o ID do autor para o qual eu tô tentando criar esse livro if autor igual a nulo então não
vai dar para criar resposta pon mensagem igual nenhum registro de autor localizado e vamos dar um return resposta ok agora se esse autor existir a gente pode fazer modificações a gente vai fazer o seguinte o var livro A gente vai criar vai ser um New livro Model aonde o nosso título é igual ao livro criação dto título e o autor iG igual ao autor que nós pegamos aqui no nosso first FNC perfeito criamos é dessa forma damos um ponto e vírgula podemos entrar dentro do nosso contexto adicionar esse livro dar um await e esperar salvar
todos os dados no banco depois como a gente tem que retornar uma lista de livros lá no final de todo o nosso código a gente dá um resposta ponto dados é igual a await o nosso banco pon livros pon include o autor para que a gente consiga ver todos os dados do autor autor pist ass e a gente pode dar um return resposta perfeito dessa forma a gente já tá criando o livro livro criado com sucesso agora a gente pode verificar a forma de editar o livro A gente pode vir no nosso autor service agora
No método de editar vamos copiar tudo aqui vamos colar tudo no nosso editar colamos tudo aqui no nosso editar a gente vai excluir o que tá dentro do try a gente vai fazer passo a passo a gente pode colocar um assim aqui em cima e já colocar que é livro Model Epa voltar no service e colocar que é livro Model que nós vamos ter como retorno uma lista de livro Model Prontinho e vamos criar o nosso no basicamente o nosso try né o nosso editar o que nós vamos efetivamente fazer dentro desse método aqui primeira
coisa que a gente vai fazer é pegar o livro então a gente vai pegar o livro vai livro Vamos aguardar vamos entrar no nosso banco vamos pegar a tabela de livros Vamos dar um include para pegar todos os autores também desse livro então autor autor P autor Vamos colocar um azinho que daí fica melhor de identificar o azinho ponto first ou Def assn E nós queremos que o nosso autor banco nosso livro banco no caso né nosso livro banco livro banco pid seja igual ao nosso livro edição dto PID perfeito então estamos incluindo o autor
e estamos fazendo que o nosso livro banco ID seja igual ao nosso e livro edição dto ID Então beleza já estamos pegando o nosso livro de acordo com o ID do livro que tá vindo no livro edição dto perfeito então a gente já tem o nosso livro porque a gente pode acabar tendo que editar o nosso livro outra coisa que a gente pode acabar editando também não é apenas o título do nosso livro mas o autor desse livro específico então a gente pode colocar um var autor e vamos buscar um autor também a gente vai
dar um await context P autor pon first defn aonde o nosso autor banco seja igual a autora banco P ID igual a livro edição dto pon autor pid então basicamente a gente pegou o livro que a gente quer editar e o autor que a gente quer editar perfeito que está se referenciando a esse livro então a gente já consegue realizar as modificações próximo ponto que a gente pode fazer aqui direto é basicamente colocar o nosso as nossas verificações de nulo eu posso até copiar de algum outro aqui aqui ó se o autor for nulo a
gente coloca a mensagem de erro então aqui se o autor for nulo nenhum registro de autor localizado se o livro for nulo nenhum registro de livro localizado vamos voltar aqui que eu cliquei em alguma coisa diferente livro localizado perfeito então a gente já tem aqui as nossas verificações feitas feit as verificações a gente já pode se nada disso for nulo a gente já pode dar andamento todo o nosso processo primeiro o nosso livro ponto título vai ser igual ao nosso livro edição dto P título O o nosso livro ponto autor é igual ao autor que
nós coletamos a gente pode vir no nosso contexto pon update Passamos o nosso livro que nós estamos editando damos um await entramos no banco e salvamos todas as informações e o resposta pon dados é basicamente uma lista então é o nosso await context P livros pist e damos um retorno no nosso resposta perfeito o nosso editar tá pronto o último que a gente precisa fazer agora é o de excluir um novo um registro deixa eu salvar tudo e fechar algumas coisas aqui então no nosso autor service a gente vai pegar aqui o autor service vamos
copiar o excluir autor que nós vamos transformar em excluir livro copiando excluir livro A gente pode colocar aqui Então vai ser livro Model livro Model lista de livro Model vai ser o retorno é a gente pode colocar aqui o nosso livro dentro da tabela de livros a gente vai dar um first Def ass a gente pode colocar o ass aqui na parte de cima pros erros pararem de aparecer a Então dentro do livro A gente tá indo na tabela de livros tá pegando o first Def assim que a gente vai pegar o livro banco aonde
o livro banco. ID seja igual ao ID do livro que nós queremos excluir se esse livro for igual a nulo nenhum livro localizado senão a gente vai remover esse livro específico e retornar a lista de livros pra nossa variável resposta ponto dados e livro removido com sucesso perfeito fizemos aqui todo o processo Agora resta nós fazemos o nosso Controller Então a gente vai vir aqui pro nosso contrôler a gente pode até copiar o que nós temos aqui no nosso Controller de autor vai ser exatamente igual muito parecido na realidade e colocamos aqui no nosso livro
Controller primeira coisa aqui em cima não vai ser o e autor interface que nós estamos utilizando é o e livro interface e livro interface underline livro interface Vamos colocar aqui underline livro interface é o livro interface que a gente vai estar recebendo aqui e Prontinho fizemos o nosso a nossa modificação e muda o nome do Controller também porque é livro controler não autor Controller perfeito agora aqui listar autores vai ser listar livros listar livros listar livros é uma lista de livro Model Aqui nós temos nosso under interface listar livros perfeito já funcionar e aqui a
gente coloca livros e livros buscar autor por ID é buscar livro por ID aqui a gente recebe o nosso ID livro recebe o ID livro buscar livro por ID coloco o ID livro aqui buscar livro por ID Nossa livro interface livro livro e livro mod Prontinho ajustado esse end Point podemos passar pro próximo buscar autor por ID livro não é buscar autor por aí de livro que nós queremos é vamos verificar aqui qual que é o nome do nosso método Vamos diminuir aqui é o buscar autor por aí de livro Então calma que eu tava
no livro é o livro aqui ó buscar livro por idir autor então buscar livro por ID autor a gente recebe o ID autor o ID autor aqui em cima também Opa o ID autor aqui em cima também buscar livro por ID autor o ID autor que nós vamos passar no método o método É esse mesmo nome a nossa livro interface a gente retorna aqui um livro e passam um livro pra nossa resposta agora para criar o nosso livro é o livro criação dto livro criação dto criar livro criar livro copiamos aqui colamos aqui passo o
nosso livro criação dto aqui é livro interface livros livros criar livro perfeito agora vamos passar pro próximo que é o editar não é editar autor é editar livro editar livro autor é livro edição dto livro edição dto é livro Model aqui em cima também livro Model livro Model Prontinho livro model em todos aqui embaixo a gente pode colocar o livro edição dto editar livro e o nosso livro interface vamos receber uma lista de livros e uma lista de livros aqui embaixo excluir autor excluir autor não é excluir autor é excluir livro deixa só ver se
a gente colocou esse mesmo nome excluir livro isso mesmo excluir livro excluir livro vai ser o ID do livro que nós estamos recebendo aqui e o nosso livro interface e a gente recebe uma lista de livros uma lista de livros perfeito tudo criado Vamos dar um Play na aplicação e vamos dar um realizar um teste para verificar se tá tudo ok deu um erro aqui de compilação Vamos dar um não aqui vamos vir na lista de erro e ponto e vírgula esperado ponto e vírgula perfeito vamos salvar aqui vamos dar um novo Play Vamos ver
se agora vai rodar tudo perfeitamente bem prontinho rodou Esses são os end points Que Nós criamos nós podemos testar então a gente pode vir aqui TR out Execute Prontinho trouxe todos os livros cadastrados porém ele trouxe os livros cadastrados só que perceba que ele não trouxe os nossos os nossos livros os nossos autores Ele trouxe todos os autores como nulo Então a gente tem que verificar certinho porque que isso aconteceu vamos voltar ali pro nosso listar livros e vamos verificar o que que que pode ter ocorrido Então a gente tem aqui o nosso livro service
vamos vir aqui em listar livros Vamos diminuir tudo aqui para ficar mais fácil a visualização listar livros e aqui a gente tá pegando apenas o context livros e tu Liste assim a gente não deu o include então ele não tá buscando os dados dos autores então a gente pode dar um include aqui autor Vamos colocar o azinho azinho a pon autor Prontinho salvando dessa forma é para funcionar vamos esperar carregar aqui o nosso projeto novamente Acho que já carregou vamos vir aqui em listar livros try out Execute Prontinho agora vem o autor respectivo de cada
um dos livros exatamente como nós queríamos agora buscar livro por ID a gente pode colocar um id de um livro Eu acho que o três tem não ó não tem nenhum arquivo com o três vamos tentar com o dois nenhum com o dois vamos tentar com o quatro nenhum com qu buscar livro por ID vamos ver quais são os ID dos nossos livros 5 6 e 7 por isso que deu erro no restante então agora se a gente coloca seis ele busca se coloca cinco ele busca da mesma forma não está trazendo o nosso o
nosso autor por quê Porque no buscar livro ID Nós também provavelmente não colocamos o nosso include então Aqui nós temos o first default Mas a gente não colocou o include Então vamos colocar o include o nosso azinho o a pon autor perfeito colocamos o a pon autor vamos dar mais um play aqui vamos dar aqui TR out cinco Execute Prontinho o autor tá vindo agora o nosso buscar por ID do livro acho que temos o ID de livro três então aqui livro três ele buscou corretamente livro 4 não tem livro dois livro dois tem dois
livros então trouxe seos dois livros Então tá tudo trazendo corretamente Vamos criar um livro vai ser string se a gente tenta ir com o ID zero ele dá um erro perceba que nós tentamos criar basicamente aqui o nosso livro mas ele deu problema por quê Porque ele tá falando que o Field que o que a propriedade livros precisa ser inserida Por que que ele tá dando esse erro ele tá dando esse erro por conta do seguinte quando Nós criamos tentamos criar um livro A gente tá usando livro criação dto se a gente abre o livro
criação dto nós estamos utilizando o autor Model ao abrir o autor Model nós temos a propriedade livros ele tá falando que a gente não tá preenchendo a propriedade livros aqui nesse caso então o que que a gente vai estar fazendo nós vamos criar um dto para esse vínculo entre o autor e o livro então um vínculo Aonde esse autor vínculo que a gente vai tá criando ele não tem essa propriedade de livros ele tem apenas a propriedade de cima aid nome sobrenome então a gente pode vir aqui em ó dentro do livro Vamos criar uma
nova pastinha aonde eu vou colocar vínculo e dentro dessa pasta de vínculo eu vou criar o meu autor vínculo dto dentro do autor vínculo dto aí sim eu posso copiar o que tá no autor apenas o ID nome sobrenome coloco dentro do id vínculo autor vínculo perfeito colocamos dentro do autor vínculo e agora quando eu for criar o meu livro criação dto eu não uso um autor Model eu uso um autor vínculo autor vínculo dto Prontinho agora já não é mais para dar erro Vamos dar um play vamos ver se vai dar algum erro e
vamos tentar realizar o processo novamente então perfeito a gente vai tentar criar aqui damos um TR out um Execute Prontinho agora aquele erro não deu mais nenhum registro de autor localizado eu não coloquei nenhum ID aqui vamos ver quais são os ID de autores que nós temos nós temos o dois e o três Então vamos colocar aqui o livro título string mesmo colocar o dois dá um Execute e Prontinho criamos o nosso título string com o autor respectivo se a gente colocasse o id3 aqui sem problema nenhum tudo seria criado id3 foi criado perfeitamente bem
OK agora a gente pode testar o editar a gente pode tentar verificar aqui só Quais são os ids vamos editar o ID 9 aqui o id9 Vamos dar um try out a de no eu vou colocar editado e vamos colocar o autor dois vamos dar um Execute ó livro Field is required mesmo erro então a gente tem que colocar dentro do nosso editar edição livro dto exatamente o autor vínculo dto então coloco o autor vínculo dto aqui perfeito Vamos só copiar esse daqui pra gente já ter pronto vamos dar um Play na nossa aplicação novamente
vamos vir em editar try out vamos editar aindo a id9 um Execute Prontinho editado e o autor deid do que foi o que nós colocamos e podemos também excluir esse autor então a gente pode colocar esse livro podemos colocar o nove Execute Prontinho exclu o nove não existe mais os autores estão nulos basta a gente voltar aqui vir no nosso livro service no excluir o livro A gente vai colocar o nosso include Prontinho o Intel code até já nos colocou aqui include a igualzinho a a pon autor vamos salvar Vamos dar um play Vamos ir
até o nosso código novamente excluir autor vamos excluir o oito Execute Prontinho ele vem aí com os nossos autores então todo o nosso processo foi criado Nós criamos todos os nossos end points tanto o autor quanto o livro e todo o relacionamento entre eles eu espero que vocês tenham entendido e conseguido coletar algum tipo de conhecimento dessa aula aqui é isso eu espero vocês em outros vídeos e caso vocês queiram se aprofundar mais e principalmente em aspin mvc na descrição tem um curso de aspnet mvc onde a gente cria um projeto completo de empréstimos de
livros como também eu estou fornecendo aulas particulares então se você tem mais alguma dúvida específica quer fazer outros projetos juntinho comigo tirando cada uma das suas dúvidas na descrição tem o link do meu WhatsApp para que a gente possa estar trabalhando cada vez mais juntos é isso até o próximo vídeo falou
Related Videos
Curso Completo | WEB API com .NET e SQL Server | CRUD + Repository Pattern 💻
1:42:30
Curso Completo | WEB API com .NET e SQL Se...
Crislaine D'Paula
17,333 views
.NET 9 Web API & Entity Framework 🚀 Full Course: CRUD, Code-First Migrations & SQL Server
1:03:59
.NET 9 Web API & Entity Framework 🚀 Full ...
Patrick God
26,681 views
Java vs C# - Batalha de Back-End
16:35
Java vs C# - Batalha de Back-End
Código Fonte TV
42,210 views
10 métodos do LINQ que todo programador .NET precisa saber! | #balta
20:42
10 métodos do LINQ que todo programador .N...
balta.io
17,058 views
Desenvolvimento com Blazor Dotnet 8.0: Guia para Iniciantes (Versão Completa)
2:58:39
Desenvolvimento com Blazor Dotnet 8.0: Gui...
CodeTotal
2,502 views
A Beginner's Guide to Dapper with .NET 🚀 Complete CRUD in a .NET 8 Web API using SQL Server
51:58
A Beginner's Guide to Dapper with .NET 🚀 ...
Patrick God
9,806 views
Deep .NET: Writing async/await from scratch in C# with Stephen Toub and Scott Hanselman
1:06:02
Deep .NET: Writing async/await from scratc...
dotnet
149,036 views
ASP.NET Core 8 Web API in Clean architecture from scratch
2:12:25
ASP.NET Core 8 Web API in Clean architectu...
Fullstack Dev
34,022 views
DOCKER DO ZERO AO HERÓI | COMPOSE | DOTNET | SQL SERVER
1:17:37
DOCKER DO ZERO AO HERÓI | COMPOSE | DOTNET...
Cristian William Dev
6,069 views
Criando uma API do ZERO com Node.js e Banco de Dados
1:15:42
Criando uma API do ZERO com Node.js e Banc...
DevClub | Programação
102,963 views
Web API Development in .NET 8 in 2 Hours | ASP.NET CORE | RESTFUL API
2:08:57
Web API Development in .NET 8 in 2 Hours |...
Frank Liu
64,126 views
CRUD com DAPPER | WEB API com .NET 6 e SQL Server | CRUD + Repository Pattern 💻
54:44
CRUD com DAPPER | WEB API com .NET 6 e SQL...
Crislaine D'Paula
1,507 views
CRIANDO UMA CRUD API COM .NET. | CSHARP E ENTITY FRAMEWORK ORM
1:23:31
CRIANDO UMA CRUD API COM .NET. | CSHARP E ...
Cristian William Dev
27,838 views
CRIANDO API DO ZERO COM JAVA SPRING + DEPLOY VPS
1:42:10
CRIANDO API DO ZERO COM JAVA SPRING + DEPL...
Fernanda Kipper | Dev
34,486 views
Curso de C# - Aprenda o essencial em 5 HORAS
5:00:01
Curso de C# - Aprenda o essencial em 5 HORAS
Victor Lima - Ciência da Computação
724,675 views
RABBIT MQ: APRENDA MENSAGERIA NA PRÁTICA COM .NET CORE E MASS TRANSIT
1:09:29
RABBIT MQ: APRENDA MENSAGERIA NA PRÁTICA C...
Cristian William Dev
9,261 views
ASP.Net Web API - C# - Criando uma API do Zero - CRUD
53:31
ASP.Net Web API - C# - Criando uma API do ...
Programador Tech
86,775 views
Como INSTALAR e CONFIGURAR o SQL Server - O Guia Completo 2024
20:21
Como INSTALAR e CONFIGURAR o SQL Server - ...
Nerd dos Dados
6,247 views
Como consumir API de Terceiro (Brasil API), com C# e .NET 6 | C# Na Prática - EP. 7 (parte 1)
45:36
Como consumir API de Terceiro (Brasil API)...
Artigo Tech
22,871 views
Copyright © 2025. Made with ♥ in London by YTScribe.com