[Música] fala Dev tudo bem seja muito bem-vindo muito bem-vinda ao nlw Connect Eu sou professor zido professor pesquisador sou Java Champion e vou te acompanhar na trilha de Java o NW Como o próprio nome diz o Next level Week é o maior evento gratuito de programação na prática da Rocket City com duração de uma semana onde você desenvolve um projeto completo para acelerar seu próximo nível em Programação em diversas tecnologias nessa essa trilha especial você vai ter uma visão Geral do potencial da linguagem Java colocando a mão na massa num projeto prático que a gente
vai construir em 3S Dias nesses três dias nós vamos construir um EV um sistema para cadastro e controle de inscrições em eventos imagina que o próprio nlw onde a gente vai conseguir criar todo o sistema para criar e gerenciar o evento Criar e gerenciar as inscrições saber Quem se inscreveu quantas pessoas estão inscritas se alguém se inscreveu em mais de evento se alguém tentou se inscrever mais de uma vez no mesmo evento tudo isso pra gente conseguir concluir um projeto do início ao fim nós vamos construir uma API usando a linguagem Java e o seu
principal Framework que é o Spring boot pra gente colocar uma API no ar para que depois Outras aplicações de frontend possam consumir esses dados e interagir com esta aplicação Ok no final Além de você garantir Claro esse projeto para adicionar no seu github Um certificado a mais pro seu currículum que é muito legal você também vai ter acesso a uma oferta especial com um bônus para poder estudar aqui na Rocket City Beleza então ó não perca fica até o final com a gente que vai ser muito muito muito massa Beleza agora um recado importante tá
primeiro o nível das aulas é um nível intermediário então supõe que você conhece um pouquinho de Java Beleza Mas se você tá começando agora em programação e se esse é o seu primeiro contato com código calma não se preocupe em conseguir aplicar tudo que você viu aqui aqui e não pule etapas Mas fica à vontade para acompanhar as aulas junto com a gente beleza tenta ap ao máximo a mão na massa mas se não der para acompanhar tudo não desanima beleza e antes da gente obviamente ir pro código Eu também quero lembrar algumas etapas que
são extremamente importantes beleza Para você aproveitar o máximo esse evento e chegar até o final dessa missão com sucesso com o projeto finalizado e seu certificado de participação garantido Beleza então vamos lá recados primeira coisa assistir a aula zero ela é uma aula super importante para você poder configurar tudo e se preparar para as próximas aulas então se você ainda não assistiu volta lá assiste antes antes dessa Assiste agora a aula zero antes de começar qualquer coisa Beleza Segunda coisa tem que acessar o guia dos eventos do nlw lá você vai encontrar todas as informações
sobre evento links úteis materiais de acesso e usa isso sempre que você precisar vai ser seu guia vai ser seu material de apoio beleza a terceira coisa é que a gente tem uma comunidade exclusiva no discord para todos os participantes lá você consegue se conectar com outros devs tirar dúvida do conteúdo publicar o seu Progresso nas aulas conversar com gente Então não deixa de participar esse Network é muito importante para você poder evoluir tanto em conhecimento quanto em relacionamento beleza e por fim se você ainda não entrou no grupo do WhatsApp é muito importante que
você esteja lá porque é lá que você vai receber todos os avisos os acessos às aulas o link para participar do sorteio no final do evento Beleza então se você completou todas essas tapas maravilha agora você está pronto pra missão Lembrando Esse é um conteúdo inédito produzido especialmente e exclusivamente para essa edição Então aproveita ao máximo se programa para assistir o conteúdo durante essa semana no horário que você preferir mas sem perder o prazo porque as aulas ficam gravadas até domingo beleza quero ver você comigo até lá no final da última aula quero juntos que
a gente faça essa esse fechamento com chave de ouro beleza vamos juntos para o seu próximo nível programação Bora acodar vamos lá turma então vamos lá vamos falar sobre o nosso desafio nessas três aulas dessa imersão Bora lá qual que é o nosso desafio então em linhas Gerais a gente vai fazer um sistema de cadastro e inscrições em eventos obviamente que assim o foco principal é fazer inscrição em eventos só que nessa nossa primeira aula que que eu quero explicar eu quero dar um overview sobre as tecnologia que a gente vai usar o que que
é Java que que é Spring boot tudo bonito mas eu quero explicar mais ou menos o que que o que que a gente vai fazer hoje a gente vai pavimentar hoje o caminho pra gente poder fazer o a nossa inscrição nos eventos por Olha só se a gente parar para pensar a gente vai fazer alguns requisitos funcionais aqui ó que a gente precisa por exemplo o usuário pode se inscrever num evento usando nome e-mail tá bom imagina Então imagina esse layout aqui ó onde você tem O nome do evento codecraft summit 2025 sobre o evento
perir Parará gente tem lá uma caixa de texto onde nós temos ó na sua inscrição o o seu nome completo e o seu e-mail beleza beleza muito bem quando que isso ocorre ó ocorre né é online é gratuito ocorre em dois dias das 18 à 21 e assim por diante a gente consegue fazer tudo isso bonitinho tá bom tá bom fora isso uma vez que você se inscreve você pode gerar ó um link de Indicação porque eu o Isidro como um inscrito eu posso pedir para que os meus colegas se inscrevam através do meu link
né Por quê sei lá porque eu sou um divulgador E aí a inscrição né o usuário o meu amigo tem exatamente essa mesma essa mesma tela entretanto Na inscrição dele vai a indicação que fui eu que eu recomendei tudo bem então vai uma uma alguma informação nessa nessa inscrição de evento tá bom além disso né eu tenho aqui eu posso mostrar o ranking Dos maiores divulgadores né o ranking das indicações quem mais esteve amigos que se inscreveram nesse evento e depois a gente consegue visualizar as indicações tá bom basicamente é o seguinte eu sou o
isidra falo ó eu tenho x amigos que conseguiram se inscrever se inscrever não é clique do link tá é inscrição completa se inscreveram nesse evento através do seu da sua indicação Beleza beleza só que pra gente poder fazer isso e focar tanto na inscrição Quanto nesses relatórios de ranking de indicação e também em quantas indicações eu fiz né aqui são os X principais né de toda a nossa base de dados e aqui Obviamente as indicações as inscrições que foram feitas por mim eu como usuário eu preciso criar algumas user Stories que que são essas user
Stores bom deixa eu explicar rapidinho para vocês como funciona geralmente isso não é uma regra mas assim acaba sendo quase que uma um senso comum quando a gente cria software A gente sempre tenta estabelecer algum umas determinadas entregas tá bom tá bom então a gente tem um módulo do software para entregar sei lá daqui 15 dias daqui um mês e assim por diante a gente chama isso de Sprint né uma semana 15 dias não mais não não muito mais do que 15 dias também E durante essa Sprint a gente para especificar o que a gente
vai entregar a gente cria como se fosse uma história ó a história dessa Sprint é a gente poder deixar tudo implementado Para que a nossa equipe consiga ou a equipe de usuários consiga cadastrar um evento Então a gente vai fazer toda a infraestrutura do projeto etc etc para que as pessoas cadastrem um evento Então eu tentei definir com vocês aqui para vocês uma user Store que eu chamei de user Store 00 que eu chamei de crud do evento Então esse user Store é necessário para subsidiar os user Stores futuros onde a gente vai focar em
inscrições E relatórios Beleza beleza então nessa aula um a gente quer focar em quê eu mando dados pra minha api Então a gente vai fazer uma API não eu tô não tô preocupado com o Fronte eu tô preocupado com agora a api ou seja o backend que vai receber os dados para esta efetiva ah inscrição tá para poder meio que alimentar ser alimentado por esse frontend legal E aí eu vou ter basicamente ó criação de um novo evento listagem de Todos os eventos recuperação dos detalhes de um determinado evento pelo seu ID posso fazer recuperação
dos detalhes de um evento pelo seu prett name que que é o prett name olha só que legal isso aqui é muito bacana o evento se chama cod Craft summit 2025 certo certo eu posso criar um pretty name um pretty link também Existem algumas pessoas que usam essa nomenclatura de modo que Eu transformo o meu nome do evento como se fosse um Componente de um link então codecraft espaço summit espaço 2025 que é o título do nosso evento Olha só codecraft summit 2025 torna-se um link onde eu coloco como separador das palavras esse tracinho aqui
e percebo que tá tudo em minúsculo então eu vou eu vou ter meio que uma regrinha de negócio aí para implementar um pouco lá na frente tudo bem tudo bem então percebam A ideia é que eu possa trabalhar de modo que eu consiga Cadastrar um evento eu tenho então o horário de de início horário de fim Quando vai começar onde vai ser o preço que ele vai ter e assim por diante E aí a partir disso eu consigo gerar esse segmento de link ao ser criado Beleza beleza para tudo isso nós vamos usar Spring boot
Hum que legal com Java Puxa que legal nós vamos criar então uma API de novo não teremos interface gráfica para isso a gente vai basicamente gerar dados O que é uma API O que é uma API Para nós uma API é basicamente né Principalmente quando a gente fala em apis modernas que 90% das apis que a gente desenvolve hoje ou quase a sua totalidade Vamos pensar assim elas são acessíveis via web então eu vou ter aqui por exemplo ó um browser né o meu Google Chrome Microsoft Ed etc ópera Safari fazendo o quê acessando endereços
da internet tá aqui via urls http meusite pcom e esta API respond para Esta este client este browser dados Então eu tenho aqui na Ida uma url muito legal e na volta como resposta para isso eu posso ter por exemplo dados dados Em que formato um formato estruturado como se fosse um formato Jon algo parecido com isso então eu posso ter uma L que envia dados envia parte desses dados por exemplo para fazer o cadastro de um evento e recebe como resposta o que ele efetivamente armazenou e o que ele efetivamente criou Para poder armazenar
esses caras por exemplo ó eu vou criar um evento Então eu passo parcialmente ó basicamente o nome do evento a location né onde ele vai acontecer o preço o início e o fim a hora de início e a hora de fim a data de início e fim e a hora de início e fim beleza que que eu caso ele tenha conseguido cadastrar esse evento eu vejo ó eu dou uma identificação para ele que é numérica eu falo ó eu cadastrei mesmo o cod Craft Summit eu sei que ele é online eu sei que o preço
dele é esse Eu sei que a data de início a data de Fin São essas a hora de início a hora de Fin são essas e ainda por cima eu gerei para você automaticamente ó esse tá o PRY name Olha que coisa legal faz sentido então do ponto de vista de api eu tô criando então um sistema que vai alimentar o outros sistemas este frontend que eu faço com HTML react angular não importa o Framework vai ser Alimentado por este cara que eu vou destacar nessa cor azulzinha aqui de modo que a gente consiga alimentar
essas páginas htmls que estão estão hospedadas lá em algum servidor que tá rodando que tá sendo exibido no Browser seja do celular seja do desktop do nosso usuário Beleza beleza mas ok para isso obviamente a gente tem uma série de tecnologias é claro mas o que todas t em comum bom a gente vai usar Banco de dados aqui beleza e qual o banco de dados que a gente escolheu Ah o my sequel por gratuito ele é fácil de instalar ele é fácil de usar ele é muito popular então poderia ser outro is poderia ser outro
gratuito como por exemplo postgress poderia ser o Maria DB poderia ser qualquer outro banco de dados que não Gere nenhum custo para nós beleza beleza a nossa api Então a nossa api Spring boot aqui ó é uma API que nos permite criar aplicações usando a Linguagem Java mas no fundo como que ela funciona é aqui que eu quero explicar para vocês internamente né a gente chama que a nossa api springboot usa um Framework Qual é esse Framework né A ideia é que a gente ao criar a api a gente tenha basicamente um os nossos códigos
Java rodando dentro de uma infraestrutura de um application server que é o tcat na verdade não é bem um application server mas isso aqui dá uma discussão mas eu não vou querer Fazer essa discussão agora com vocês mas pensa o seguinte é basicamente um servidor web que ao invés de hospedar páginas ele hospeda ele armazena classe Java então quando a minha URL é invocada ele não me retorna uma página ele vai executar um código JAVA e o resultado da execução desse código JAVA é exibido como resposta então agora eu tenho esse conceito de dinamicidade muito
bacana aqui tudo bem Tá bom então eu sei que eu vou rodar tudo isso via web então se eu Rodo uma API java com Spring boot dentro da minha própria máquina a minha máquina se tornou um site a minha máquina agora se tornou a máquina que outras máquinas podem solicitar dados percebem e aqui ó junto dele né rodando paralelamente a eston Ket a gente tem o Spring Framework que que é o Spring Framework zdro caramba velho Pois é eu gosto de traduzir Framework como estrutura pré-fabricada por qu vamos lá quando a gente vê por exemplo
um bairro Né popular tipo por exemplo CDHU você vê que todas as casas tê exatamente a mesma estrutura que que muda de uma para outra decoração que que muda de uma para outra disposição dos móveis onde cada um dos moradores faz customiza a sua casa do seu próprio jeito mas toda a infraestrutura de encanamento toda a infraestrutura de água de luz de esgoto tudo isso já tá pronto as pessoas precisam entrar lá e falar agora eu quero colocar um lustre desse jeito Quero colocar uma TV aqui quero colocar um sofazinho aqui vou colocar meu fogão
do lado de cá vou colocar meu minha geladeira do lado de lá e assim por diante então cada casa internamente é diferente porém elas usam a mesma estrutura pré-fabricada tudo bem Por que que isso é legal porque o Framework ele te dá toda uma infraestrutura de como que eu faço paraa minha aplicação estar no ar como que eu paro a minha aplicação de Funcionar como que eu gerencio as os dados vindos de uma requisição URL como que eu mando os dados formatados bonitinho como resposta isso a gente não precisa se preocupar o Framework faz pra
gente isso aí que é que a gente considera muito trabalho braçal trabalho mecânico o Framework cuida para nós então a gente não precisa se preocupar com isso Mas qual que é o grande segredo pra gente poder trabalhar com os frameworks principalmente em Java já que O Framework vai trabalhar Vai fazer muita coisa por nós a gente precisa criar as nossas classes Java os nossos códigos Java informando ao Framework o que ele deve fazer e como que a gente informa o Framework o que ele deve fazer através das Java annotations que são pequenas instruções Java que
a gente começa sempre com ar que elas elas não alteram a lógica do nosso código mas elas são usadas pelo Framework então o Framework lê sim ele tem capacidade de Ler as classes que a gente desenvolveu ler os códigos que a gente programou e ele toma atitudes em cima do que a gente fez então se eu tenho um código a e eu falei ó esse código aqui corresponde ao RL de listar todos os eventos ele vai falar Ah então é esse código aqui eu vou executar esse código e vou gerar o resultado dele vou formatar
de um jeito e vou exibir pro seu usuário o Framework faz isso pra gente então a gente só precisa saber falar o que a gente quer Resolver o como isso vai ser resolvido de acordo com a web com os padrões web ou mesmo de acordo com a a vinda dos dados Em que formato como que tudo isso vai ser codificado decodificado a gente não precisa saber o Framework resolve para nós então isso é bom porque nos traz muita produtividade do ponto de vista prático que a gente não precisa ser vamos dizer assim gastar esforço gastar
energia gastar recurso criando por exemplo ai eu vou receber Dados em formato texto eu preciso converter para um outro formato e assim por o Framework resolve esses trabalhos braçais chatos monótonos cansativos pra gente tudo bem essa é a parte mais legal da gente poder usar um Framework ok porém pra gente poder fazer a nossa api funcionar bonitinho a gente precisa ter algumas coisas muito bem definidas e aqui eu quero falar um pouquinho da arquitetura da nossa api eu vou criar aqui ó uma outra Representação em cima obviamente desse Spring Framework com Tomcat aqui ó pronto
vou até deixar os dois juntinhos vou até colocar da mesma cor aqui ó uau muito bem qual que é a ideia a ideia é que a gente possa criar a nossa api que a nossa aplicação que o Spring vai vai resolver também muita coisa pra gente tá de modo que primeira coisa né bom eu tenho um banco de dados certo certo porém dentro desses limites desses limites azuis aqui ó o que que eu faço Eu basicamente trato com Java e qual que a linguagem de manipulação do banco de dados SQL Já são duas linguagens diferentes
então eu não quero trabalhar com SQL dentro da minha api dentro do meu código JAVA então o que que eu vou fazer eu vou criar uma série de classes que eu vou chamar de genericamente tá classes do tipo Model classes da categoria Model onde essas classes Model elas são o qu elas são basicamente representações da Estrutura do meu banco de dados guardem isso as classes Model que eu classifico como Model são representações da estrutura do banco de dados Como assim eidr se eu tenho aqui uma tabela que armazena produtos essa tabela tem uma estrutura ela
temá código nome descrição preço estoque assim por diante eu vou ter uma classe Java produto pon Java que vai ter como atributos exatamente as colunas do banco por qu porque eu faço esse M ó Olhem a palavra esse Mapeamento da minha linguagem orientada a objeto para o meu banco de dados relacional Isso é o que a gente chama popularmente vocês devem já ter visto essa essa nomenclatura de ORM obje relationship mapping Tudo bem então a gente vai tratar desse mapeamento criando classes que correspondam aos atributos ao nome da tabela e assim por diante como que
a gente faz isso isid lembra a gente informa o Framework Java annotations as anotações servem para Informar o Framework O que que a gente quer fazer o que que a gente não quer fazer legal legal porém né como eu não quero trabalhar com código SQL eu vou ter uma outra camada aqui que eu chamo de repositório ou repository tá bom que que essa camada faz no fundo no fundo no fundo se a Model me reflete a estrutura do banco a repository reflete para mim as operações nas quais eu vou pegar as classes e Converter isso
para comandos que eu vou mandar pro banco então por exemplo eu pego a estrutura da classe produto a estrutura da classe evento converto os dados que estão armazenados nela por uma instrução SQL para poder vir aqui armazenar no banco Ah então Isidro o repository ele me dá esse meio de campo para eu poder converter conteúdos armazenados em objetos Java para para SQL para estruturas de banco de dados SQL comandos SQL Exatamente e eu posso recuperar um monte de Dad de objetos aqui é um monte de registros do banco de dados e fazer o que com
eles gerar uma série de uma lista por exemplo de objetos do tipo Model para serem manipulados pelas minhas outras classes dentro da minha aplicação para ser exibido para ser sei lá classificado por data por hora nome custo e assim por diante percebe isso Poxa que legal então agora eu já tenho recursos suficientes para poder Manipular os dados que eu quero armazenar armazenar barra recuperar tudo bem tudo bem legal fiz a integração Além disso eu vou ter uma segunda camada aqui que vai ser minha camada que eu vou chamar de Services Uau tá aqui o que
que essa camada tem de responsabilidade basicamente a camada de Services ela tem resp abilidade de encapsular minhas regras de negócio Nossa isid como assim que que regras de negócio bom vamos lá vamos entender Basicamente retoma aqui no nosso front end pensando na experiência do usuário Você concorda comigo que para o mesmo evento eu não posso cadastrar duas vezes o mesmo usuário eu não vou fazer duas inscrições pro mesmo evento eu tenho que minimamente verificar se eu já não fui inscrito concordam comigo isso é uma regra de negócio então eu posso encapsular essa lógica de verificar
se o usuário já tá em escrito ou não se ele já foi armazenado ó esse usuário nesse Banco nesse evento eu tenho tudo isso cadastrado eu tenho tudo isso restrito eu posso falar assim ó aqui essa classe Java só trata desses elementos eu não vou cadastrar o evento sim eu não vou informar o nome dele sim mas Quem gera o prame aqui ó esse esse nomezinho cheio de iens Poxa isso daí pode ser gerado automaticamente eu Isidro não preciso gerar então eu posso uma regra de negócio aqui que dado o nome do evento Eu transformo
tudo isso para letras Minúsculas eu substituo os espaços por porens e gera esse fragmento de URL Isso é uma regra de negócio para mim percebe então que eu posso ter classes que só fazem isso esse é um ponto e aí e aí para fechar toda a nossa camada e ter as responsabilidades bem definidas a gente tem uma terceira camada aqui ó que são basicamente a camada de controllers O que é uma camada de controllers controllers tá aqui ó são esses são as classes que estão dentro Desta categoria que vão receber que vão ser mapeadas para
dada uma url ela vai realizar uma determinada ação se eu tenho essas classes bem definidas quando a minha apist esver no ar alguém vai digitar alguma coisa e esta alguma coisa vai executar um método numa classe Java e é aqui ó classes do tipo Controller que farão acesso a regras de negócio que por sua vez armazenarão os dados no banco de dados para quê pra gente poder ter Responsabilidades bem definidas faz sentido isso turma Então olha só que legal né tô falando falando um monte de coisa conceitual legal bacana mas se a gente puder minimamente
entender que tá aqui ó vou pegar deixa mudar de cor aqui fazer um negócio mais bonitinho aqui vamos ver é Ok mais bonitinho e eu vou pegar esse cara aqui e deixar pronto não tá feio né tá feio vou deixar essa essa seta aqui mais mais viva olha só os controllers entram em Contato com os Services ou seja vou ter uma regrinha de negócio para cadastrar evento uma regrinha de negócio para poder recuperar operar evento e assim por diante e os Services por sua vez ficam responsáveis por acionar os repositórios e recuperar ou armazenar objetos
do tipo Model aonde na nossa base de dados tá aqui tudo bem então o que que tá passando nessas setinhas aqui em cor mostarda dados dados e chamadas de Funcionalidades em classes diferentes classes diferentes pra gente poder ter funcionalidades diferentes tudo bem faz stio Essa é a arquitetura básica da nossa aplicação web beleza da nossa apinha aqui usando Spring boot e Java Tudo bem então muita coisa a gente vai resolver através do quê anotações mostrando para o nosso usuário que a gente tem o quê um conjunto de classes que o Framework vai Tomar algumas atitudes
de acordo com o que a gente anotar fechou Esse é o principal ponto guardem esta imagem ela vai ficar no material de apoio para vocês mas tenham muita consciência dessa imagem vou sempre retomar essa imagem ao longo do nosso desenvolvimento tudo bem Beleza então vamos lá onde que tá o segredo O que que a gente vai fazer hoje na nossa primeira aula a gente vai pavimentar o o nosso como eu já disse né a gente vai pavimentar o nosso caminho Para poder se preocupar depois com inscrições e ranking legal legal como que a gente faz
Bom basicamente eu quero fazer o quê criar o nosso Opa criar o nosso evento recuperar listar todos os eventos disponíveis e recuperar os detalhes de determinado evento pelo seu PR name beleza como que a gente faz isso bom eu modelei uma base de dados aqui pra gente poder trabalhar minimamente Então como que tá esse modelo de banco de dados aqui ó vou até Selecionar aqui ó pronto pra gente poder deixar isso aqui mais bonitinho olha só eu criei uma tabela pra gente poder falar armazenar os nossos eventos então ó ele vai ter um event ID
um número que o identifica um title o título do evento um pr name que é aqueles fragmento de de de link um location onde vai acontecer um Price um start date um end date um start time um end time pronto isso aqui armazena dados única e exclusivamente de um evento Beleza beleza aí eu tenho Minha tabela de usuários que vai ter um user ID eu preciso ter esse número tá um username e um user e-mail Como você soube disso daqui ah basicamente meu olhando né pro nosso Fronte tá aqui ó que que eu tenho de
dados do usuário nome completo e-mail e ele vai ter uma identificação um ID ele vai ter um número mas esse número tá onde esse número é gerado pelo banco de dados a parte legal do do myl que eu tenho um tipo uma restrição a determinadas Colunas que são a restrição Auto incremente o que que que significa isso eu como desenvolvedor não me preocupo em atribuir este user ID nem aqui nem no event ID que que eu faço deixo a cargo do banco de dados quando eu cadastrar um novo evento ele fala assim ó eu cadastrei
esse evento com o id1 com id2 com id3 4 5 você o banco de dados cuida disso mesma coisa pro usuário Beleza beleza pô interessante bacana Aí o que eu falo eu criei uma tabela chamada Subscription que é uma tabela de inscrição que vai vincular o usuário a evento e onde que tá o segredo né como nós somos uma instituição que organiza muitos eventos um o mesmo usuário pode participar de vários eventos pode então hoje tem o cod Craft daqui dois meses pode ter outro evento sei lá um ia summit pode ter um outro imersão
em desenvolvimento frontend imersão em desenvolvimento Java e assim por diante então o mesmo usuário o Isidro @ Isidro Pcom pode participar de vários desses eventos o que ele não pode que isso pode ser uma regra de negócio que a gente implementa a gente já vai ver isso Eu me inscrever duas vezes no mesmo evento tudo bem Tá mas um usuário pode se inscrever em vários eventos e o mesmo evento pode conter um monte de usuários Então essa tabela subscription aqui ela é uma tabela que vincula uma relação que a gente chama de relação muitos para
muitos entre usuário e evento um usuário Participa de vários eventos um evento tem vários usuários participando dele porém se vocês notarem a gente tem ó um número de inscrição que é o que identifica aquele ticket seu Como assim zid volta lá pro pro frontend Se você olhar o seu ticket de acesso ó codecraft summit data horário não sei o quê ó nome do usuário Rodrigo Gonçalves número de inscrição Opa número do seu ticket tá certo legal acessar o evento tudo bonitinho muito bem fora Isso que que nós temos eu tenho Então quem é o uso
então tenho uma referência ao usuário a gente chama isso de chave estrangeira né eu tenho uma informação que indica que dentro daquela inscrição Eu tenho aquele usuário como sendo participante e nessa mesma inscrição eu tenho o evento dele o evento ao qual ele participa Então esse event ID que vem na na tabela subscription vem da tabela evento é uma referência e tem um outro cara aqui ó que é o tal do indication User ID Quem indicou então se eu vim por indicação de alguém então por exemplo eu Isidro recebi o link do meu amigo José
e me inscrevi então na inscrição vem o meu ID Isidro beleza com indicação do usuário José que é o meu amigo que eu usei o link dele tudo bem no evento cod Craft summit por exemplo faz sentido isso então eu mapeei esta base de dados e a criei aqui tanto é que eu tenho aqui no no meu my Kell ó a DB events que já está com as três Tabelas criadinho esse script do banco de dados está onde está disponível também no material de apoio para vocês tá Por quê Porque eu poderia vir aqui ó
simplesmente no meu mycell Workbench dar um forward que é a ferramenta para manipular as bases de dados né do My sequel ó dá um forward engineer ele não vai criar porque ele vai criar né ele vai ter criado duas vezes coloquei minha senha do banco e ó pum ele cria ele ó Ele gera esse script é isso aqui que vai ficar disponível para vocês e ó pronto criei minha base de dados como que eu sei isso dou um refresh aqui e ele já vê e criou tudo isso aqui bonitinho tudo bem base de dados criada
próximo passo então o que que a gente vai fazer vamos lá qual que é o nosso passo agora então nosso nosso passo agora é começar a criar um projeto Spring tá bom como que a gente vai fazer bom eu tenho aqui ó o meu Eclipse Tá eu já Criei um Workspace se você não tá habituado com o eclipse você pode usar o visual Studio code seid meu meu material meu ambiente não tá configurado nada ten uma aula de apoio tem um material de apoio para vocês poderem configurar seu ambiente minimamente para conseguir fazer esses exercícios
Tá mas eu já te adianto se você instala o eclipse na tua máquina muita coisa ele já resolve para você isso ajuda muito muito muito mesmo a gente tá mas pra gente poder criar um Projeto Spring a gente pode ser agnóstico em relação à ferramenta Eclipse intellij visual Studio code não importa para nós desde que nós usemos o site do Spring initializer que é esse cara aqui ó start.spring.io nesse cara a gente consegue especificar todos os metadados do nosso projeto E aí poder fazer ele gera um zipin a gente descompacta no nosso workspace e consegue
importar o projeto pra nossa ide simples fácil e rápido beleza beleza Que que que que a gente precisa saber deste site principalmente primeira coisa a gente vai usar o gerenciador de dependência maven que é o cara que vai baixar as bibliotecas para nós a nossa linguagem é Java e a versão do Spring boot sempre vai ser a recomendada pelo Spring initializer que é a versão estável a stable version que ele chama porque essas três configurações a gente nunca muda tudo bem beleza que que a gente vai colocar aqui A gente precisa agora definir o grupo
e o artefato da nossa aplicação Java que que é isso isso aqui no fundo são pastas que a gente vai ter armazenado em que a gente vai ter classes javas armazenado né armazenadas nela mas essas pastas em Java são chamadas de outra maneira são chamadas de package percebam ó eu tenho grupo eu tenho artefato eu tenho package name percebam que a medida que eu altero esses dois caras o package name também se altera e eu quero explicar isso para Vocês por que tudo isso em Java a gente tem o costume de colocar as classes em
diretórios específicos e isso nos ajuda a organizar melhor essas classes e organizar vários projetos que que compartilham das mesmas estruturas de diretórios então emal a gente usa tem um determinado diretório aqui para o grupo Quem é esse grupo o grupo em geral em geral representa o domínio web da nossa empresa Pô então se eu tenho lá por exemplo a minha empresa é nlw [Música] comom.com.br então vou colocar aqui ó br.com nlw e o artefato que se eu mudar a perce que ele já mudou aqui também ó percebem e o artefato coincide com o nome do
projeto por quê porque geralmente o nosso artefato é o projeto que eu quero desenvolver dentro da minha empresa então eu vou chamar aqui ó de events perceba que ao mudar o artefato Eu mudo o nome do projeto e eu mudo também ó juntando grupo e artefato eu mudei meu package name então isso lá na prática vai ser dentro do meu projeto vai ser uma pasta na qual esta pasta vai conter classe Java a partir dali tudo bem Beleza o packaging vai ser ponto jar por quê Porque depois Isso aqui vai ser um auto executável significa
que eu consigo Executar a minha api e tornar a minha máquina um site sabe fazendo o quê simplesmente colocando dando um duplo Clique no ícone do ponto jar ou indo lá na linha de comando e falando ó Java nome do meu arquivo.jar Vai facilitar muito é muito fácil de colocar uma aplicação Spring boot no ar beleza mas depois a gente pode falar sobre isso e como eu tenho na minha máquina aqui agora instalada a versão 22 do Java então eu vou pegar ó a versão que tá mais perto da menor versão mais perto dela então
que seria a versão 21 Beleza beleza a partir daqui Quais são as Dependências para poder criar minimamente o meu projeto e aqui eu quero retomar a arquitetura bom para minha api Spring boot funcionar eu vou precisar desse spring spring Framework com tcat então a dependência correta aqui ó é o Spring web tá aqui ó Spring web build web include restful application e Spring mvc ó o Framework usa o apach tcat como o container default embutido esse cara aqui garante essas duas camadinhas para mim Beleza Beleza eu vou colocar mais um outro cara que é o
developer Tools ó Dev Tools tá aqui que que o Dev Tools faz ele facilita um pouco a minha produtividade por quê Porque toda vez que eu altero né como eu vou criar uma API eu tenho que pegar mandar executar api ele vai subir o serviço do ton Ket um monte de coisa entretanto entretanto quando eu faço alguma alteração eu tenho que parar ap fazer alteração salvar ver se tá tudo certinho E subir novamente Qual que é o problema disso Isso me faz perder um certo tempo o Dev Tools fica monitorando as minhas pastas quando eu
tenho por exemplo alguma alteração nas pastas Criei um arquivo modifiquei um arquivo alguma coisa ele automaticamente para a api e já Restart de novo isso isso dá uma produtividade absurda para nós e vocês vão ver isso aqui na prática tá bom tá bom depois bom eu preciso aqui ó fazer a integração com o banco de dados né então Esse repository aqui ó ele é disponível num Framework auxiliar ou Spring boot que tá incluído nele chamado JPA Java persistente api que é basicamente o conjunto de bibliotecas Java que fazem Exatamente Essa conversão aqui ó de classe
Java para Strings SQL para comandos SQL o JPA faz isso só que o JPA ele é vamos dizer assim poliglota ele conversa com todos os bancos de dados com Oracle com SQL server com MySQL com post com Maria DB Então agora eu preciso F falar qual é o banco efetivamente que eu quero conversar então eu vou adicionar uma quarta dependência que é o MySQL driver cuidado cuidado aqui aqui ó se você esquece o y e digita simplesmente MS você corre o risco de instalar o driver do Microsoft skl server muito cuidado então ó é MySQL
prestem muita atenção isso aqui dá muito erro tá muito bem coloquei essas quatro dependências que que eu faço agora com essas quatro dependências o Spring initializer eu só vou clicar aqui no para vocês verem ele cria um padrão de projeto ele cria uma estrutura básica de projeto que basta eu abrir isso na minha ide tudo bem Então qual que é a ideia eu vou fazer o generate desse cara ele vai gerar um zip para mim que se eu tivesse no explor é só clicar no link download vou gerar e vou gravar dentro do meu workspace
nlw que eu criei aqui ó workspace nlw tá aqui no qual o meu Eclipse já está Aberto e apontado para ele por quê Porque todo o workspace do eclipse é basicamente a pasta que contém os projetos que eu vou trabalhar pô Isidro legal bacana que que eu faço bom ó se vocês olharem eu já estou aqui ó no meu computador área de trabalho workspace na LW e tá o meu zipz inho aqui basicamente eu vou fazer a extração dele pronto Nossa ido são muitos Passos né mas você fica Independente de é ferramenta eu vou apagar
o zip Porque para mim agora ele é Inútil tá pronto não preciso mais dele porém se eu olhar ó ele ainda não tá como meu um projeto visível pelo Eclipse A única diferença que eu preciso fazer no Eclipse em relação às outras ids é chegar aqui ó e vir no menu file Import lembra que a gente criou lá no no spring initializer um projeto como se fosse maven perceba que ele tem aqui ó o grupinho maven e aqui ó projeto maven já existente é um projeto meio vem existente que tá lá armazenado no meu HD
Eu só preciso fazer a importação dele vem cá Aí ele vem aqui ó Qual é o Projeto vem no brows tá aqui ó events só selecionar essa pasta se der tudo certo ele vai ver que selecionou esse pon XML aqui ó que é o meu arquivo de configuração do projeto né Project Object Model e ó finish que que vai acontecer aqui é bom que você tenha dê um tempinho por ó ele tá importando o projeto Qual é a parte legal do maven o maven faz o download de Todas as bibliotecas que você precisa do Java
e ele manté Cash então eu fiz umais para facilitar que foi criei vez esse projeto para ele já fazer o download de todas as bibliotecas que foram necessrias porque a segunda vez você não precisa mais fazer download isso é muito louco no maven tá porque ele facilita muito a nossa vida nesse aspecto muito bem tá aqui uau eu tenho meu projeto Spring boot aqui ó bonitinho que que acontece vamos entender um pouquinho Cada uma das funcionalidades que a gente tem e principalmente essa estrutura de projeto que a gente vai usar primeira coisa então bom pon
XML é a configuração do meu projeto Se eu precisar de novas dependências colocar mais coisa é aqui que eu configuro ele é um arquivão XML eu só vou abrir para vocês verem Tá mas ó tá aqui tudo bonitinho ó MySQL Dev Tools Starter web e assim vai ó conect do My SQL bonitinho aqui ó tudo certinho Ó JPA tá aqui também deixa eu dar um um zoom mais aí zid agora todo mundo consegue enxergar legal muito bem os scripts do maven pro maven poder fazer né download de dependências fazer o build quando a gente precisar
tudo bonitinho né tanto versão Windows como versão Linux né Unix like e aqui a gente tem basicamente dois caras ó teste a gente não vai falar de teste agora mas aqui a gente teria as classes javas responsáveis por testar o nosso a nossa Api tá fazer testes unitários test de integração a biblioteca da máquina virtual Java beleza ó as dependências do maven a Maria muita coisa que ele fez download sem a gente precisar e aqui ó src M Java tá aqui e src Main resources que que acontece na src Main Java vocês percebem que tem
ó BR com LW events lembra do do package name olha só que legal se eu abrir a nossa pastinha e vir no src tá lá ó Main Java E aí começa Ó BR com nlw Events e tá aqui nossa classe Java essa classe Java é a classe principal é uma classe que tem ó método Main Public static void Main string args uau exatamente como a gente queria exatamente como a gente tá acostumado a criar uma classe Java tá então a ideia que a tua ap Spring boot seja sim uma classe Java a Auto executável Beleza
beleza e aqui no application properties vai tá a configuração Principalmente agora que a Gente instalou o nosso o nosso JPA fez usou o JPA como dependência aqui a gente vai precisar fazer a conexão com o banco de dados tá então qual é o requisito para eu subir essa api colocar essa api no ar e deixar ela funcionando eu preciso minimamente configurar o banco de dados sabe por qu Porque no momento que a minha classe que a minha api subir o próprio JPA que vem junto com Spring boot lembra disso ele vai fazer 10 conexões com
o banco de Dados para poder reaproveitar essas conexões ao longo do funcionamento da máquina da minha da minha aplicação por isso ou para ganhar desempenho lá na depois que a gente né faz uma análise um pouco mais criteriosa da das apis a gente percebe que desempenho de api é muito determinado pelo banco de dados o banco de dados é o grande gargalo então para facilitar nossa vida o Java o JPA já cria uma porrada de conexão porque conectar no banco tem que autenticar tem Que ver se usuário senha é válido e a partir daí eu
preciso ter rapidez nessa etapa então ele cria essas conexões mantém essas conexões ativas eu só reaproveito isso à medida que eu preciso armazenar ou recuperar dados do banco de dados show de bola meu sacada inteligentíssima do JPA Mas tudo bem só que antes de eu colocar esse cara no ar eu fazer umas umas configurações sabe por quê ó porque se eu vier aqui e tentar executar como que eu faço para Executar uma pi Java ó eu venho aqui nesse botãozinho Run no Eclipse em particular ele fala assim tá mas eu sei que o seu projeto
é maven você quer executar ele como eu sei que ele tem elemento de teste como é que você quer que eu Execute como uma aplicação Java normal é aqui que a gente seleciona beleza ele fala assim tá bom qual é a classe que você quer que eu Execute puxa ó essa classe aqui ó a classe principal events application.on jaava procura aqui Ui ela tá aqui ó events application jaava se você tiver um nome com uma classe diferente procura o nome da sua classe que faz parte do pacote base e tem lá o tal do público
static void é esse cara que tem que executar Beleza beleza olha só que legal vamos pôr para executar E aí a gente vai ver algumas coisas ó Spring legalzinho começou só que ele fala putz meu eu não consigo colocar su AP no ar porque falta os dados do banco de dados Tá bom então Vamos lá vou limpar aqui meu meu console e vamos começar como que eu sei eu tenho quatro basicamente quatro atributos para configurar aqui quatro parâmetros Então vamos lá eu vou colocar aqui ó primeiro ponto deles o o usuário do meu banco de
dados Spring data source de origem de dados né username o meu usuário do banco de dados é usuário Rot por quê Porque eu tô usando a configuração padrão do MySQL da instalação dele tá bom e Spring data source password a senha do meu banco de dados é MySQL ah por quê Porque a minha máquina é máquina de desenvolvimento não tem que ficar eu não vou ficar colocando senha forte não sei o que se lá na minha máquina para teste para desenvolvimento aqui eu quero fazer o negócio mais simples possível tá bom outro a URL do
meu banco de dados Então qual que é o URL a URL é composta de quatro parâmetros nesse caso ó jdb My SQL é o protocolo barra barra então jdbc 2 pql 2 p bar Barra ó eu quero conversar através do JPA pelo protocolo do Java Database connectivity usando o driver de conexão do MySQL Ah legal aí o segundo componente é a máquina local host minha própria máquina Beleza o terceiro componente é a porta onde o myq tá rodando 3306 porta padrão não precisaria mas eu gosto de deixar ela explícita tá E aí barra o meu
quarto o meu quarto componente o nome da base de Dados pelo mysle aqui que a gente fez ó é o DB events Então vamos lá DB underline events tá aqui e beleza eu me conecto no no no no protocolo do J do MySQL só que como lembra que o JPA ele é um cara generalista ele é um cara que conversa com qualquer banco de dados Então os bancos de dados eles t um pequeno probleminha que eles falam aos seus respectivos dialetos que que é isso S 30 segundos de explicação rápida a gente tem uma linguagem
padrão SQL que a Gente chama de ans SQL entretanto outros fabricantes de banco de dados a Oracle a Microsoft a cbase e assim por diante o pessoal do postes lá podem criar variações sintáticas desse comando a gente chama isso de dialeto é a mesma é o mesmo paralelo que eu faço para você o seguinte a gente mora no Brasil certo certo a galera do Nordeste tem um sotaque específico arretado e assim por di arretado Mainha painho beleza a galera do Sul do Brasil Tem outro sotaque que usa outras palavras exemplo Peixada para fazer uma caracterizar
uma trombada de carros ã que mais Bergamota para falar da mixirica da tangerina assim então assim variações mas todo mundo tá no Brasil certo variações sintáticas da mesma linguagem mestra dialeto Então eu preciso falar eu vou conversar no dialeto do MySQL Spring dentro do JPA nas properties dele dentro Do hibernate que é o meu gerenciador de de de de conexões de instruções perdão JP properties hibernate dialect eu vou usar o hibernate Opa hibernate dialect my SQL dialect tá aqui salvei tudo se tudo isso aqui tiver certo a gente vai executar vamos embora vamos ver Seja
o que Deus quiser olha só que interessante vamos ver P Nossa aplicação web funcionou perceba ó tcat startou na porta 8080 a gente startou a a nossa events application em tantos segundos quer ver como ele cria realmente essas conexões vem cá olha só que legal se eu vir aqui no meu mycell eu venho aqui ó na aba administration no workb eu venho aqui ó client connections Olha só o DB events tá 1 2 3 4 5 6 7 8 9 10 e aí tem umas outras duas aqui que a gente tava já usando pra gente
poder trabalhar que seria Basicamente essa conexão aqui e o que a gente estava usando aqui ó nessas duas abinhas aqui ó pronto essas duas abinhas da tbl events aqui ó são duas conexões que ele fez mais as outras 10 que o my sequel que o a o JPA criou faz sentido ó perceba que essas duas ó a quanto tempo eles estavam no ar ó 40 São eu tenho essas 47 que indicam essas duas Abas as outras ó 00 são as as conexões externas do meu Spring boot com JPA beleza subiu Uau que legal vamos começar
A desenvolver Então as coisas acho que agora a gente começa a Pôr a mão na massa certo até agora a gente só fez configuração e explicação do nosso ambiente como que Eu transformo tudo isso agora que a gente especificou aqui ó nesta Arquitetura em código JAVA beleza é isso que a gente quer trabalhar vamos lá primeiro passo já que eu tenho camadas diferentes ó eu vou criar um package para cada uma dessas camadas um pro model um repository um pro service e Um pro Controller beleza Como que eu faço isso dentro do meu Eclipse a
partir do pacote base aqui ó eu tenho que est selecionado esse BR com nlw events eu venho com o botão direito New package e eu vou colocar aqui ó ponto Controller tá aqui na prática o que ele criou Ele criou uma pasta olha aqui ó Controller legal depois New package ponto service tá aqui baseado no pacote base New package ponto repository e Finalmente New package pon Model muito bem legal bacana interessante Então Criei um package ou seja um uma uma pasta para cada uma das camadas da minha api muito bem que que eu vou fazer
agora dentro da camada Model que que eu vou fazer eu vou criar uma classe como lembra o nosso Foco hoje é pavimentar fazendo o quê trabalhando tudo em relação a eventos certo então pela minha arquitetura eu tenho a minha tabela de Eventos criada aqui no banco de dados que vocês olham conseguem ver por aqui ó deixa eu voltar a esquemas ó tbl event tenho todos as colunas aqui ó event ID title pretty name location piriri par par legal então o que eu vou fazer dentro do Model eu vou criar uma classe Java chamado event uau
eu vou pôr atributos e ó e aqui vem uma coisa legal usem o padrão de nomenclatura do Java aqui no banco de dados eu tô usando quando eu tenho duas Palavras event ID prame start date tô usando underline como separador Java não usa isso Java USA aqu anotação cas que é o qu tudo em minúsculo cada nova palavra em maiúsculo eu vou usar essa anotação tá aí vocês vão me perguntar mas isid tá diferente eu sei e aí a gente vai começar a fazer o qu anotações Para justamente fazer essa comparação de para vamos lá
então que eu vou fazer aqui ó Private integer event ID Private string title Private string PRY name Private string location Private Double Price Double Price o preço do cara Private agora começou data né L Price start date end date Então vou colocar aqui local date start date priv local a partir do Java 8 a gente não usa mais o Java util.do fazer importação Então tá ó se eu colocar o mouse aqui em cima ó Import Local date tá aqui pronto e aí finalmente ó Private local time start time e Private local time end time tá
aqui vou fazer a importação aqui no Eclipse Eu tenho um atalho que é cont contrl shift o e ele faz a importação aqui ó bonitinho tá beleza olha só que legal o fato de eu ter salvado vai fazer o que com a minha api ele vai ó novamente subir a api Deixa eu só des des clicar aqui o o o o o scroll e olha Só que legal beleza fiz tudo isso que que eu preciso fazer a partir de agora anotar que esta classe Java corresponde a essa classe event Corresponde à tabela tbl event como
que eu faço então vamos lá vamos começar a anotar ó ele é um table ele é um ele é um entity para falar pro Spring boot ó essa classe é uma Class que eu vou manipular em banco de dados ele é um table cujo name é O tbl Event Ah e se fosse o mesmo nome eventing maiúsculo não precisaria do Table então ó se eu dar um contrl shift o ele já faz a importação aqui ó já carta persistence en a carta persisten table Nossa que legal Tá bom eu vou agora anotar cada um desses
atributos aqui ó tudo bem Como que eu faço ah coloco antes dele uma anotação por exemplo uma ou mais tá aqui ó O Event ID eu vou colocar como ID para falar que ele é que ele é o cara que identifica meu evento Ó importei eu vou falar que ele como eu Defini lá no MySQL como um auto incremente eu falo que ele é um valor ó um valor gerado E aí a estratégia eu falo que é Generation Type identity para ele ser portável independente da da da da Estratégia que o banco usa ele sempre
vai usar a estratégia do banco e aí ó eu vou colocar o nome da coluna já que o nome do atributo é diferente do código nome da coluna ó colum name igual a event Underline ID uau Então o que eu fiz eu coloquei um monte de anotações para especificar esse atributo aqui e no title como ele é um string ó colum name igual a title ah mas zidrou não precisaria Sim eu sei mas eu quero colocar aqui o seguinte ó o tamanho dele 255 eu vou falar que ele não pode ser nulab ou seja não
pode ter valores vazios tem que ter ah ah nulab false perdão pronto senão ele dar erro de compilação vai lá salva Olha coisa linda tá tudo funcionando ó já subiu de novo a pi Então essa é a parte legal então percebam a ideia que a classe event corresponde exatamente a estrutura da classe da da tabela event tbl event ó PR ele tá aqui porque ele é único Então vou colocar aqui ó @c name ig a pretty under name o Len dele ó o tamanho em caracteres 50 nullable false e true ou seja não pode ter
dois PR names Iguais Beleza beleza fora isso vamos lá location @ col name iG location vou colocar o l aqui ó igual a 255 que eu deixei lá se eu não me engano não pode ser nul eu t meio que tô redefinindo aqui tudo em classe Java col name iG Price não pode não tem que ter valor aqui ó legal depois start datate vamos lá @c name igual a start underline date Ok coloquei que poderia ser vazio colum name igual a end date legal Ops Colum name igual a start time @c name iG time pronto
mapeei mapeei legal esse drou bacana show de bola que que o JPA preconiza para mim a única coisa que ele preconiza fal assim ó sua classe precisa ter getters e setters porque os atributos precisam estar com Private e eu preciso de métodos e acesso então eu venho aqui no meu no meu Eclipse ó na aba search no menu search generate Getters e setters seleciono todo mundo e Gero pronto acabou bom fim de papo resolvido o meu problema com o JPA Nossa exid sensacional ótimo que que eu vou fazer agora eu vou criar o meu repositório
vou declarar meu repositório e aqui o repositório é um negócio legal por qu eu vou ter então Ó eu tenho na Model a estrutura da classe volta volta na nossa arquitetura tá aqui ó fiz para o evento Model agora eu vou fazer o repositório Beleza beleza então eu quero Fazer um pequeno adendo aqui com vocês vem cá olha só que legal no meu repositório eu vou criar aqui ó uma interface que é um contrato tá que eu vou chamar de event rle tá pronto chamei e essa interface ela amplia uma interface própria do JPA chamada
crud repository e essa interface ela é parametrizada com dois tipos primeiro tipo é o que que eu vou Armazenar nesse crw de repositório aqui que esse event Rep vai fazer V eu vou armazenar event que é o meu a minha classe e ele pede também o tipo do atributo que identifica unicamente o evento Então aqui ó o meu atributo de identificação ID aqui ó é do tipo integer então eu vou falar ó o tipo da chave Vou fazer o control shift ó para ele fazer a importação de tudo ó é o Model event tem que
ser o Model event pelo amor de Deus tá gente e ele Importou o crw de repositório que que acontece nessa mágica aqui Gente pelo amor de Deus vamos vamos entender minimamente tá também um jogo super rápido se eu entrar na definição do cru repository ó ele vai me dar um ele vai me dar um monte de funcionalidade por exemplo uma delas save para fazer o quê inserção no banco depois save All para salvar vários eventos no banco find by ID buscar Pela chave existes by ID para ver se existe find All para retornar Todo mundo
find all by ID count para saber quantos tem delete by ID para apagar um evento e assim por diante Então ele me dá as funcionalidades básicas para eu poder inserir alterar buscar e excluir do banco já tá tudo praticamente pronto e depois eu posso vir aqui e criar novos métodos para poder fazer outras recuperações E aí a gente vai falar um pouquinho principalmente ó nesta funcionalidade aqui ó buscar pelo Prame aqui vai ser legal mas calma aí a gente vai falar um pouquinho sobre isso tá muito bem legal bacana interessante que que eu quero fazer
eu quero agora criar as minhas regras de negócio para eu poder vamos lá que que eu tenho que fazer vamos fazer três caras cadastrar recuperar todo mundo e recuperar pelo pretty name certo certo então vamos lá que que eu vou fazer vou criar aqui ó uma nova classe dentro do pacote service Né então ó voltando ao desenho Da nossa arquitetura Pelo amor de Deus né criei a classe do MOD criei a interface agora eu vou criar as as regras de de negócio para poder manipular esses carinhas tudo bem E aí depois eu vou expor isso
na web Tá bom vamos lá vou chamar de event service todo service em Java ele tem que ter esta anotação aqui ó service para qu para que o Spring boot gerencie a criação desse cara e percebam que olha só interessante eu tenho aqui eu vou Declarar um Private event r e eu vou chamar de repository tá bom V chamar de event R vai event R melhor ó ele fez a importação já deu cont contrl shift ó importou bonitinho importou o service legal só que esse cara eu vou colocar uma anotação aqui ó chamada autowired que
que é isso isid caramba meu é o seguinte lembra que eu criei esse repositório aqui ó né É só uma interface que ele vai ter automaticamente o Crew o save o save All O find byid find o aired significa que neste caso pelo fato do event rle ser um repositório estender o crw de repositório o Java o Spring boot perdão ele vai buscar uma implementação para fazer isso que na verdade a implementação do crw de repository vai pegar estes parâmetros de event e integer vai criar um objeto para nós pra gente poder usar em momento
nenhum eu vou dar New aqui em momento nenhum eu Vou dar New o outed faz aquilo que nós chamamos de injeção de dependência ele busca uma implementação cria uma Instância dessa implementação e deixa disponível pra gente usar eu gosto de falar uma coisa assim muito um paralelo muito simples Tá o que que é injeção de dependência imagina que você quer comer macarrão em casa e comer macarrão num hotel macarrão em casa você tem que buscar ver se tem água se tem óleo se tem macarrão se tem Molho se tem panela se tem prato se tem
gás se tem tudo e aí você vai lá faz ferve a água põe o macarrão espera põe sal põe óleo põe azeite co macarrão não sei o qu esquenta o molho põe o molho serve no prato e vai lá e come é ou não é você faz tudo todo o gerenciamento é sua responsabilidade na injeção de dependên É como se você tivesse no hotel Você tá no hotel O que que você faz pá serviço de quarto quero um prato de macarrão e o hotel se vira ele vai ver Se tem água se tem macarrão se
tem molho se tem sal se tem azeite se tem prato se tem panela se tem gente para fazer então ele cuida de tudo óbvio que tudo isso tem um custo no caso a gente tá levando um Framework junto com a nossa aplicação mas ele faz toda essa esse gerenciamento para nós beleza Beleza então vou ter alguns métodos aqui aqui ó por exemplo eu vou ter aqui um Public event add new event E aí eu passo aqui ó e eu quero colocar O Event que eu Quero cadastrar então eu vou a minha ideia é ó vou
fazer a importação do event né eu passo um evento com alguns dados Vou salvar esse cara no banco de dados e recebo o evento com os dados preenchidos e tudo que foi gravado no banco Como assim zid olha essa situação eu passo um evento onde eu tenho name location Price start date and date start time and time e ele me retorna O quê além de tudo o que eu passei ele retorna para mim ó o pretty name e o ID beleza Como que eu faço isso vamos gerar o pretty name aqui ó gerando o prame
Então esse event aqui que eu recebo como parâmetro ele não tem o prename Então vou dar um set prame tá aqui onde eu pego ó O Event get title vou pegar o título dele eu vou fazer ó tudo vai virar toer Case E aí eu vou dar um replace All de tudo que é espaço em branco eu vou fazer um replace por tracinho pronto e aí eu vou fazer o Seguinte return event R ou seja grave esse event que eu coloquei aqui uma regra de negócio super simples que eu modifico um atributo e tá tudo
bem tudo bem Depois eu vou criar um outro uma outra regra de negócio e o que vai me retornar uma lista de event E aí ó get All events tá aqui e o list para mim é uma uma biblioteca da da da interf da do Framework Java ó list P Java tá aqui e a que eu vou fazer return evento pon find All só que ele vai falar Ah não é compatível não tem problema eu faço uma conversão simples aqui ó list event fim de papo pronto olha que massa agora é o seguinte e esse
event aqui ó olha só que legal né get by pretty name Como que eu faço aqui eu passo aqui né string prame Isidro como que eu faço para retornar Esse cara é aqui que mora o segredo da interface de repositório hisória é legal sabe por quê Porque o JPA na verdade Spring data né que é o Framework que US JPA ele tem uma coisa extremamente bacana que é justamente a gente conseguir fazer o seguinte ó criar definições de métodos e esses nomes de método nome de função tá eles são manipulados pelo JPA e de acordo
com o que a gente tiver ele vai fazer uma estring SQL correspondente Ô louco Isidro olha só que legal eu posso criar aqui ó só o cabeçalho do método ó event ele vai me retornar um Evento tá e todo método começar com find by read by get by isso tá na documentação do Spring tá ele vai me permitir recuperar isso get by find by ó e o nome do atributo Ó pretty name Como que é o nome do atributo aqui no evento ó não é Pretty name aqui ó prename e percebam nesses casos nesses casos
o kemal case faz toda a diferença e ele passa um parâmetro compatível com o atributo prame string vamos chamar de Pretty name Vai não precisaria fazer isso podia ser só um name Só pelo fato de eu ter feito isso eu não escrevo string SQL alguma ou JPA lê essa definição e baseado neste nome ele gera string SQL para mim automaticamente querem provas vamos lá vou colocar uma coisa de debug aqui vamos lá vem cá spring.jpa Isso é para debug toda vez que ele fazer uma uma interação com banco a gente vai ver aqui ó o
debug aqui na no nosso console tá então tá bom Fizemos O Event e agora basicamente aqui return event find by passando PR name Ô louco Isidro salva tudo que ele não reconheceu pronto salvando tudo ele reconhece nossa muito louco muito bacana Então significa que dentro da nossa arquitetura a gente conseguiu já ó apen ó perceba apenas para o evento falta inscrição falta usuário falta um monte de coisa ainda tá tá bom dentro do a gente criou a definição da base de dados A gente criou o repositório e o Model a gente criou alguns serviços para
poder manipular esses caras e falta agora criar o Controller aqui a gente vai precisar um pouquinho de de de conhecimento do protocolo http por quê Porque ó para eu poder enviar dados para cadastro eu preciso usar o método post então a minha URL não é só o link da internet é o método http associado a ela tudo bem Beleza então tá eu preciso então ter um corpo de requisição que é Um evento com alguns dados não enchidos e ele me retorna um evento com dados preenchidos Beleza beleza como que a gente faz então vem cá
vou criar aqui ó de novo no pacote de controllers tá aqui ó uma nova classe que eu vou chamar de event Controller uau perceba aqui ó Tudo começa com event aqui pela minha convenção né sim beleza Tá bom Como que o JP o Spring boot sabe que essa classe atende requisições URL eu anoto esse Cara como rest Controller Ah menino e esse cara vai precisar também de um serviço então ó Private event service e eu vou chamar de service e eu vou novamente ó aed por em momento algum eu vou dar New nesse cara percebam
ó olha que legal no event service eu declarei O Event r e não dei New nele em lugar nenhum ó não tem event recebe alguma coisa não tem não tem por qu injeção de dependência Dea isso a cargo do Framework legal Legal olha só eu vou criar cada um dos métodos pra gente poder testar então lá @ postmapping bar events Ah que massa que que eu quero que ele retorne eu vou criar um Public event E aí ó add new event beleza e eu recebo como parâmetro na requisição ó request um objeto tipo event ó
vou chamar de new event pronto aqui ó então que significa tudo isso tá turma vamos lá post mapping Eu quero uma url que eu acesso via método post para enviar dados e o que que eu recebo como dados dessa requisição uma estrutura do tipo evento que eui new event Esse cara tem tem todas asações do id que é o que eu vou atribuir no banco e do Pr que foi a regrinha que a gente criou na nossa regra de negócio Beleza beleza então o que eu faço aqui vou dar um return como né service.add new
event fim de papo Caramba Isidro só isso depois a gente vai melhorar Tá mas por enquanto só isso se eu salvar isso aqui estiver no ar significa que eu posso eu posso criar um mesmo evento através de uma requisição usando uma ferramenta para acessar minha pii Qual é esse cara aqui o Postman Postman Thunder client insônia todos São muito parecidos mas na verdade o que que eu faço eu não preciso criar um front end para poder testar minha api eu testo via Uma ferramenta de acesso a esses caras acesso às minhas orl então eu V
aqui eu falo assim ah é post que eu defini lá né então é post ó Qual que é o RL percebam vamos lá como que eu sei é o RL bom eu sei que tá é http beleza eu sei que tá na minha máquina local local host beleza em qual porta olhem pelo log ó tqu iniciou na porta 80 80 então eu sei que a porta 80 80 beleza a partir daqui que que vai ser barra event ó Ah zdr começou a ficar legal beleza que que eu vou fazer aqui posso não enviar nada mas
o que que eu preciso Agora eu preciso vir aqui ó e colocar aqui ó bar lembra o meu método o meu método de DD new event não tem um request bar então ten que configurar meu bar aqui ó bar porém ele me fala o seguinte qual é o tipo da informação que eu tenho nenhum é um formulário não sei o que é um binário é Raw Raw é texto puro texto puro formatado em Jon é a única coisa Que vocês precisam configurar no Postman post o endereço da minha api tipo de dado é Raw para
ser texto simples texto puro só que formatado nesse padrão Deon Qual que é o padrão Deon Vem cá vamos vir aqui ó eu posso até pegar esse cara aqui que é uma cópia da minha estrutura vem aqui ó ó lá ó name codecraft Opa faltou uma vírgula aqui vírgula codecraft summit location online Price zero começa esse essa data termina essa data começa esse Horário Termina Esse horário certo eu eu fiz questão de observar exatamente os mesmos atributos os mesmos nomes esses caras aqui ó não precisam bater com os nomes do banco de dados eles precisam
bater com a estrutura da classe Java porque eu tô gravando um event ó event id não tem não preciso que ele vai atribuir para mim ó title title pronto mudei pretty name não tem eu Gero location tá aqui Price tá aqui start date tá aqui end date tá aqui start time Tá aqui e end time também tá aqui vamos ver se funciona send ó lá ó criou o meu evento ele colocou um ID chamou de dois o title cod Craft o que eu passei ó o pretty name aqui ó code Craft summit 2025 olha só
que legal ele pegou esse cara converteu tudo para mim e substituiu os espaços por Pô bacana posso vir aqui mudar um outro aqui vamos lá vamos criar aqui ó por exemplo ó imersão Java vai ser onde online Price não vai custar nada vai ser sei lá agora Em junho ó dia primo de Junho vamos supor tá só para avisar 01 vai até o dia 03 de junho Vai começar às 19 vai até à 22 Beleza beleza Olha só imersão Java inverno inverno 2025 pronto vamos ver send [Música] uau uau então conseguimos criar conseguimos criar Vamos
tentar fazer agora um método para listar e vamos fazer um método para Buscar pelo PR name vamos lá então vamos criar dois métodos aqui no meu Controller por porque ó o serviço eu já tenho eu já sei que ele responde para mim eu já sei que ele pode fazer o find Então vamos criar no Controller aqui ó @ getmapping agora eu quero um método de consulta Então para mim agora é get post é para inclusão Ó Barra events Nossa Isidro pode ser a mesma URL pode desde que sejam métodos http distintos o Spring boot sabe
diferenciar cada um Deles então ó list de event tá aqui get All events não preciso passar parâmetro nenhum beleza e aí que eu faço ó return service.get All events Mas eu posso ter o mesmo nome no de método no Controller e no service pode não tem problema nenhum são classes diferentes não tem é até bom vocês terem a mesma nomenclatura para saber quem rastreia quem vamos lá no no post de novo ó vem cá aqui já tá como get http 2. bar Localhost 8080 barev tá aqui ó e ele retorna a lista com todos os
eventos a lista toda Caramba que massa muito louco né Muito louco tá e para fechar que que a gente vai fazer vamos fazer agora o get mapping barra events e aqui eu vou colocar aqui ó ó ó entre Chaves PRY name tá aqui ó que que acontece significa que na hora que eu fizer a minha URL eu vou colocar aqui por exemp Code imersão Java inverno 2025 Essa é a ideia para eu poder fazer a busca pelo prame Beleza então tá bom que que eu faço @ Public event get event by PRY name E aí
como que eu declaro esse parâmetro aqui lá eu ponho como uma variável da minha URL PF variable e ela é uma string tá do t e ó esse é uma coisa legal se eu mantenho o Nome do parâmetro exatamente igual ao padrão que eu coloco aqui entre Chaves eu não preciso fazer absolutamente mais nada só faz uma importação pro PF verbal né E aí tem uma questão ó eu vou dar um return no service pon get by pretty Tá bom olha só que interessante fiz subiu numa boa vamos testar vamos testar Teoricamente isso aqui tem
que funcionar send ó lá achou encontrou o evento e se eu tivesse um evento que eu digitei Alguma coisa errada olha só que legal 2026 ele deu que a que a requisição deu certo mas veio vazio sabe o que a gente pode fazer vocês já navegaram na web sabe quando vocês não encontram uma determinada página que que ele te dá não dá o erro 404 vamos US esse cara aqui vamos Como que eu faço olha só que interessante Ah detalhe Hein Lembra que a gente falou quando eu coloquei o show cada solicitação Olha só ele
coloca Aqui para mim ó os seus respectivos skq gerados perceba ele deu um select no evento fiz um by do da minha tabela no name igual ao parâmetro que eu passei Olha que coisa louca muito louco isso né Muito do louco se eu vier aqui ó sem pretty name sem fazer isso ó só barra events ó send olha o que ele fez gerou outro SQL ó select só que agora sem o r ele gera Então os SQL pra gente em tempo de execução Sim esse é o ponto Essa é a parte mais legal do JPA
eu não preciso escrever nenhuma única linha de l Beleza mas vamos lá eu não quero fazer isso eu quero fazer o seguinte eu vou declarar aqui ó um event evt e fazer com que esse service recupere isso para mim para eu poder manipular esse protocolo http eu vou precisar fazer o seguinte o meu método não retorna somente mais um event ele retorna para mim ó um Responsi ou seja uma entidade de resposta cujo corpo dela pode ser um EV Ah esse respon me permite manipular por exemplo o código de status http no final então por
exemplo posso fazer assim ó se meu evt for diferente de nul ou seja ele existe né ó evento existe no banco de dados eu retorno ó return respon entity no status 200 ou simplesmente ó no ok Ponto o corpo vai ser meu evt ou seja status Http 200 ou se ele encontrou o recurso e o conteúdo do bar é meu evento senão ele retorna aqui ó op respon not found 404 P build falar build f não tem informação no corpo querem ver olha só que interessante vamos lá pegar o cod mesmo aqui ó se eu
procurar pelo codecraft summit ele encontra se eu colocar por 2025 53 2 1 ó olha só o resultado 404 not found que que eu fiz aqui manipulei o protocolo http para eu poder retornar paraa minha ap pro meu frontend pro aplicativo o que seja o quê um código de erro sinalizando que ele não encontrou aquele recurso não encontrou aquele conteúdo com isso turma a gente meio que fecha um pouquinho esse primeiro conteúdo pra gente poder criar de novo né pavimentar O Nosso Caminho Para quê Para que a gente possa Ter eventos então a gente consegue
adicionar um evento Então vamos lá ó consigo adicionar aqui de novo né ó imersão react ã verão 2025 por exemplo vai começar agora né dia primeiro dia 10 de fevereiro vai até dia 11 de Fevereiro das 192 tá aqui ó pum ele cria criou um evento 4 imersão react consigo recuperar todo mundo se eu quiser ó barra events então el retorna uma lista aqui com Três eventos legal e se eu quiser criar recuperar detalhes de um evento qualquer eu só colocar o PR dele aqui ó e eu consigo recuperar tudo faz sentido Então minha user
Store 00 que vai pavimentar o o o caminho pras outras demais user Stores tá pronto a gente só precisa agora continuar então próxima aula qual é o nosso foco nosso foco é trabalhar inscrições tá aqui ó inscrições tanto inscrição autônoma Quanto inscrição indicada e depois ranking de inscritos e estatística de números inscritos Beleza a gente se vê então na próxima aula muito bem parabéns por ter finalizado essa aula fico muito feliz que você chegou até o final agora que você terminou mais essa etapa acessa lá corre lá acessa Nossa comunidade no discord exclusiva desse curso
e posta que você concluiu a sua primeira etapa da missão lá você também pode por Exemplo tirar dúvidas de colegas que estão com dificuldade ajudar outros deves a terminar as suas as suas etapas e isso isso vai ajudar você a evoluir e ir muito além do código beleza lembrando né agora que todas as informações e links úteis estão reunidos no Via e que para que você possa concorrer aos prêmios exclusivos você precisa estar no grupo do WhatsApp então não esqueça de entrar lá beleza amanhã tem mais Óbvio vai ser legal na aula dois a gente
vai Fazer toda a parte de inscrição no evento isso é muito massa porque a gente tem um monte de regras de negócio para poder ah atender tem muitas peculiaridades que a gente vai conseguir implementar código e regras de negócio muito interessantes para você poder evoluir beleza te espero na próxima aula valeu