[Música] fala Dev Que bom ver você aqui nessa nossa última aula da nlw Connect parabéns por est até esse momento persistindo e perseverando na sua missão bom você tá muito perto de ganhar o seu certificado de garantir o seu certificado de participação então meu show de bola tô muito feliz por isso e no final dessa aula vou te dar mais alguns detalhes de como você vai ter acesso a ele ok então mas primeiro primeiro de tudo vamos finalizar nosso projeto na aula de hoje a gente vai falar principalmente sobre consultas mais elaboradas no banco de
dados pra gente poder gerar o ranking do nosso dos nossos usuários que mais indicaram inscritos pro evento e principalmente se eu sou um usuário que alguém se inscreveu por minha indicação quero saber quantas indicações foram através do meu link e em que posição eu tô nesse rank Para quê Para que depois o nosso frontend possa utilizar isso da melhor maneira no seu layout Então vem comigo que esse conteúdo tá muito legal salve turma então estamos aqui na nossa terceira e última aula da trilha de Java do do nlw Connect de 2025 cara e tá ficando
super legal o nosso sistema tô curtindo muito espero que vocês também estejam curtindo desenvolver o nosso sistema nessa nossa aula a gente quer eu quero fazer com vocês o seguinte as estatísticas das inscrições Como assim Isidro vamos lá ó vamos olhar os requisitos funcionais né eu preciso do ranking de indicações Isso é verdade então quem são usuários que mais tiveram inscrições a partir da sua indicação e a visualização das indicações por exemplo eu quero saber eu Isidro quantas pessoas eu indiquei e por conta disso a partir do meu do meu eh do meu conteúdo vamos
por assim dizer né da minha das minhas indicações saber né quantos inscritos Foram em que posição que eu tô nesse ranking aí da dessa competição mas antes deixa eu falar uma coisa para vocês na aula passada né Vamos dar uma olhada no banco como que tá então ó se a gente dar uma olhada aqui né ó select asterisco from tbl user a gente tem os nossos usuários aqui certo certo deixa aumentar aqui pra gente né que vai ficar mais legal ten aqui ó Peter Parker Ok legal bacana interessante porém que que eu tenho eu tenho
as inscrições também deixa eu dar um select aqui também ó que ele vai me dar ótimo na aula passada nós tínhamos feito a questão da inscrição por indicação e nós deixamos passar um pequeno cenário Deixa eu subir a api pra gente poder mostrar o que que tá acontecendo aqui eu quero mostrar para vocês um pequeno ajuste para não quebrar o nosso teste nós fizemos inscrições por indicação lembra lembro querido professor Então vamos lá vou fazer as coisas funcionarem aqui deixa a minha api subir bonitona aqui pra gente poder deixar tudo tudo tudo resolvido Então vamos
lá muito bem tá subindo a minha api legal bacana e eu quero eu quero inserir agora a minha nova usuária que vai ser a Candy Crush Então vem cá vamos aqui no venho aqui ó vou criar mais um aqui né um método post então vou fazer assim ó http 2 p bar Barra local host 8080 barra subscription codecraft summit deixa eu pegar esse cara vou pegar esse cara aqui ó pronto codecraft summit beleza bar eu vou colocar uma nova pessoa aqui ó Jon Então vou criar aqui ó Candy Crush name é a minha querida Candy
Crush Ok cujo e-mail é Candy @crush Candy @ crush.com vem cá que que vai acontecer Isidro Socorro um erro esse erro aqui para que você não se desespere que que vai acontecer eu quero que você analize o log junto comigo por qu porque pode acontecer claro né e ele fala assim ó the Given ID must not be nul Por que que acontece quando a gente fez o nosso Controller vamos olhar o subscription Controller lembra que eu tenho dois tipos de padrões URL com o prename somente e com o prename seguindo do id se por um
acaso eu uso esse primeiro padrão vocês concordam comigo que o meu user ID vem vazio se vem vazio como é que eu vou fazer busca lá no banco de dados Então o que tá acontecendo aqui no meu subscription service eu tô tentando fazer uma busca no banco de dados aqui ó nesta exatamente nessa parte aqui ó do do usuário indicador e ele fala assim eu tô tentando buscar esse user ID mas esse user ID tá vindo como nul Isidro que que eu faço fácil fácil fácil por qu que que pode acontecer se o meu user
ID vem nul eu não tenho indicador então eu faço assim ó eu vou pegar essa declaração e vou replicá-lo aqui em cima ó e vou falar esse user ID indicador é nul beleza beleza e aí o que eu vou fazer se se o user ID passado como parâmetro para esse Meu método aqui ó né que agora eu coloco o nome do evento o usuário que vai se inscrever e o user ID do indicador Então se o indicador for for igual for diferente perdão de nul ou seja existe alguém que indicou aí sim eu busco no
repositório se eu buscar no repositório não existe eu lanço a exceção do mesmo jeito porém se ele não existir eu ignoro tudo isso e o meu indicador continua sendo vazio ai e a partir daí ó eu crio uma inscrição numa boa passando o evento passando o usuário que eu quero receber como inscrito e o indicador Será que isso é suficiente Olha só vou limpar só o log aqui ó vou inscrever de novo a candy crush por quê Porque como eu fiz a inscrição dela Ela já foi cadastrada na base se vocês olharem aqui ó a
minha Candy Crush tá cadastrada na base porém ela não está em nenhum evento fazendo Ah Isidro você não salvou Isidro verdade salva pronto salva tudo a api vai rodar de novo pera aí deixa eu subir ó tá rodando a api coisa linda e agora ela pode estar inscrita então agora nós temos tanto a inscrição por ã indicação quanto a inscrição autônoma funcionando bonitinho Beleza beleza muito bem próximo passo então vamos fazer o nosso ranking Então a gente vai vir aqui ó e fazer o ranking do nosso modelinho gerar o ranking de inscritos tá bom tá
aqui tá aqui tá aqui antes disso eu preciso ter uma base né para poder saber se o ranking tá funcionando ou não então vamos criar vamos vamos fazer uma população de dados aqui ó eu eu peguei né Aí eu eu precisei usar o nosso amigo chat GPT para ele fazer o seguinte ô CHT cria aí uma série de usuários que tem name eil e usa para mim como fonte de dados nomes dehis de filmes nomes deag de filme dehis tá bom e ele gerou esse monte deis aqui que vai esse arquivo inclusive vai est disponível
para vocês no material deio tá bom tá bom então fazer o seguinte castrar algumas por minha indicação e alguns usuários Então vamos lá ó o Tony Stark vai ser indicado por mim então vamos vem cá o Tony Stark meu parça vai ser indicado por mim então eu sou o ID número do ah como você sabe zid aqui ó deixa eu tirar esse aqui ó o Isidro é o dois então a gente vai ter ó eu vou eu vou cadastrar aqui uns cinco usuários para mim uns quatro pro John uns três pro Larry dois pra Mary
e um pro Peter Parker beleza só pra gente poder ter uma ideia de ranking tá bom sim querido professor Bora lá então então vamos lá Opa po criei então o Tony Stark tá sub minha indicação depois vamos qu pegar mais uns aqui o Bruce Way o batema o batma também vai por minha indicação vem cá vem cá no Postman copio e colo já são eu já tinha um indicado Esse é o dois e o três vamos fazer mais dois aqui então o Clark kente né que é o superhome Superhomem tá aqui ótimo e a minha
queridíssima Diana Prince que é a Mulher Maravilha muito bem Pronto tenho cinco inscritos so minha indicação agora o Steve Rogers que é o Capitão América ele vai Opa Deixa eu tirar Preciso depois remover essas vírgulas aqui o Steve Rogers vai ser indicação do John do que é o meu usuário número três tá pronto tá aqui criou legal a Natasha romanof que é lá dos Avengers eu não lembro personagem que ela faz eu sei quem é tá aqui pronto vai ser também e o Thor claro né pronto beleza três pessoas sob indicação do John do agora
quem eu vou fazer aqui ó o Larry low vai indicar dois caras duas pessoas Então vamos lá vem cá o o rook esse cara vai vir aqui ó com o hul tá aqui pronto vamos embora show e Vision aqui ó eu acho que a deve ser mulher do visão né a Vanda a Vanda Maxim vocês manjam mais do que eu desses personagens tá gente eu t meio o tiozão não consigo lembrar de tudos beleza duas pessoas so indicação do Larry low é isso Ah esqueci de colocar o nome Putz mudei aqui quatro vai agora o
joh vai arrebentar o stepen Strange o doutor estranho vamos lá vai agora so indicação do John vai pronto vem cá e o Barry Quem que é o Berry Allen é o ciborg ou é acho que é o ciborg não é não lembro também tá tudo bem Arthur não faça mínima ideia o h Jordan H Jordan aqui eu sei que é o nosso Lanterna Verde vou colocar el Então por indicação do usuário número C que é o Peter Parker ou seja um cara da Marvel não a Mary May a Mary May a tia May aqui então
pronto vai Mary May pronto beleza e eu vou colocar mais um aqui que é o Scott leng que acho se eu não me engano Scott leng é o o o homem formiga não é acho que é pronto por conta do usuário número se pronto criei minha base um monte de inscrições piriri Parará show como é que eu faço para recuperar esse ranking Aqui começa a brincadeira do ranking para nós vem cá para eu poder montar esse ranking Eu quero fazer uma tabela uma consulta muito específica Qual que é a consulta que eu faço se eu
dar um select aumentar a letra aqui pera aí select arisco front tbl subscription tá aqui ó eu consigo ver todas as inscrições certo tá aqui então Ó vou ver aqui o dois tem algumas o três tem um montão 1 2 3 4 5 dois tem acho que seis né não sei 1 2 3 4 e 5 1 2 3 e 4 e 5 Vamos colocar mais um aqui 1 do um e um Vamos colocar mais um cara só para poder ter um número diferente aqui não ficar números iguais Então vou colocar aqui no dois vamos
colocar mais alguém aqui deixa eu ver a J Grey ó J Grey o Instituto Xavier Pronto Muito bem tá aqui beleza então o Isidro agora tem seis seis convidados pro evento tá bom vem cá Fecha aqui pra gente poder entender como que eu faço para contar o número de inscritos select count select count o quê subscription Number OK e eu quero também o seguinte o número do usuário então o indication user ID a partir da tabela o quê from tbl subscription tá aqui e eu vou fazer um agrupamento group by indication user ID ou seja
agrupe pelos usuários Que indicaram beleza apenas isso vamos lá que que eu tenho olha só com cinco inscrições nenhuma indicação ou seja as inscrições autônomas com seis indicações o user ID 2 com cinco o TRS com dois o qu com um o c e com um o se que que eu posso fazer aqui vamos fazer uma ordenação Vamos eu vou colocar um nome aqui ó para poder não ficar count de subscri Vou colocar aqui ó S quantidade pronto tá aqui e aí eu dou um Order by quantidade descendente ou seja do maior para o menor
Opa começou a ficar legal ó seis pro usuário 2 5 e c para ninguém e o três dois pro 4 um pro c e um pro se mas obviamente essa linha para mim não interessa porque eu não quero saber as inscrições autônomas eu quero saber as inscrições dos indicados Então o que eu faço antes do Group buy que que eu faço eu faço um filtro Where o quê indication user ID is not n não pode ser vazio vamos ver se isso aqui funciona vamos lá tá aqui então agora eu tenho seis inscrições pro ID do
cinco pro de TR dois pro de4 um pro de c e um proid se legal qual que é o próximo passo eu não quero o user ID eu quero ah e aliás hein eu ainda tenho que colocar o seguinte né o user tem que ser no and o quê event ID tem que ser o meu evento que no caso é evento 5 que é o se eu não me engano tá deixa só fazer uma uma conferência aqui C tbl event Ó lá vamos ver isso ID do do event é o cod Craft porque eu posso
obviamente ter vários eventos não se esqueçam disso então vamos lá muito bem Olha só consigo eu não tinha feito obviamente ess filtro porque claro eu tenho meu um único evento acontecendo aqui até aqui tudo bem então eu fiz bonitinho legal mas eu não quero Isidro usuário para mim cara eu quero o nome dele não quero número então que eu posso fazer aqui na tabela eu tô trazendo de uma tabela só eu quero trazer da ligação entre a tabela inscrição e a tabela usuário como eu vou fazer um Inner join Inner join quem tbl user com
qual crit este ID da indicação aqui ó user indication user ID da tabela de inscrição Tem que ser um ID válido na tabela usuário então na tabela subscription tbl subscription indication userid tem que ser igual na tabela user ao userid será que vai vamos testar opa esqueci de colocar o username né vírgula username que é o nome do usuário que eu quero que vem da tabela do usuário vamos ver ó lá agora o meu ranking contém a quantidade o ID da indicação e o nome do meu usuário conseguem ver isso então agora meu ranking está
formado do mais de quem mais indicou para quem menos indicou Eid não indiquei ninguém você não aparece no ranking tudo bem esse é o ponto legal então o que que eu vou fazer aqui agora eu vou criar esse meu resultado por qu olha só que legal esta consulta me dá uma tabela como resultado que ela é diferente das estruturas de tabelas que a gente tem que que que que a minha consulta tem que retornar eu vou precisar criar um tipo específico para isso então eu vou criar agora em Java um Record que me traz três
atributos ó a quantidade o user id e o username por quê justamente para eu poder ter esta Cadê o sistema de inscrição e eventos aqui ó esta essa ideia ó esse é o username o número de subscribers esse cara que seria a minha quantidade tá e assim por diante faz sentido Então tá bom Como que eu faço isso vem cá dentro dos meus dto aqui né no meu projeto volta pro Eclipse Eu tenho meus dtos vem cá então ó New Record Então como que eu vou chamar eu vou chamar de subscription subscription ranking item meu
item no ranking de inscrições porque de novo cada uma dessas linhas aqui do banco de dados ó deixa eu pegar aqui é um item no meu ranking de inscrições e ele tem três ã três componentes tá então vou colocar aqui ó tudo o que é quantidade JPA exige que seja longo eu vou chamar de subscribers subscribers Bele depois integer user id e string name beleza criei esse dto beleza Isso aqui vai ser o resultado da minha consulta eu só vou parar query Api para não ficar toda hora reiniciando lá no meu repositório no subscription repositório
porque uma questão relacionada ao subscription que que eu vou fazer eu vou precisar criar uma consulta para isso então vou fazer uma Public lista de subscription ranking item e eu vou chamar de get generate ranking Isidro você pode colocar um método desse jeito posso e justamente por ele não ter este tipo de como que eu vou dizer assim de padrão como esse find by eu não consigo gerar via padrão de método uma consulta tão elaborada quanto essa daqui que que eu preciso fazer então criar uma consulta customizada Como que eu faço isso anotando antes da
declaração desse método um @query tá aqui aqui dentro eu vou colocar a minha consulta só que eu tenho Outro fator eu tô usando my cle aqui concordam comigo Então como que eu faço a minha ideia é eu preciso pegar toda essa query tá colar aqui ó do jeito que tá bonitinha ó Inclusive eu vou até colocar uns espacinhos aqui para não depois no momento de fazer a ordenação ó eu não tenho nenhum problema ó eu tiro aqui esses esses barra n bar R que ele que ele automaticamente gera tá para não não dar nenhum problema
de de problema de caracteres aqui tá tá aqui ó barra n bar r e tal bonitinho e não sei o qu tá porém O Event ID tem que ser parametrizado então vou colocar aqui ó event ID coloquei a maneira de eu colocar parâmetros é justamente essa aqui ó dois pontos e o nome do parâmetro Beleza beleza tiro o ponto e vírgula aqui legal e aí que que eu vou fazer esta query ela tem que ser anotada com o parâmetro value E como eu uso uma query do My do myq eu coloco como Native query igual
a true ou seja uma query que eu Cop do myq coloquei para cá e a única diferença eu coloco o que aqui ó @ par E aí o name dele né ó name igual a event ID E aí eu coloco aqui ó integer event ID pronto @pan Ah acho que é o query paran @query paran vem cá pronto cont contrl shift ó para ele poder fazer a importação onde que tá o segredo aqui do Sucesso pra gente conseguir colocar essa essa essa api funcionando eu vou precisar agora no meu serviço criar a minha forma de
acessar isso como vem cá Ai deixa eu antes consertar é paran mesmo não é query paran Eu só não coloco aqui ó o name pera aí pronto paran event ID pronto bem mais fácil Ok vamos lá pro serviço salva Ok parou o erro vamos lá pro subscription service que que eu vou fazer vou criar um método Public list de subscription ranking item e eu vou chamar de get complete ranking uau o que que eu faço aqui a ideia é que eu ao fazer isso ó vou importar o Java list eu vou retornar simplesmente ó return
no meu repositório o quê Opa subrepo né subrepo quem o generate ranking E aí obviamente tem que passar um integer aqui ó integer o ã event ID só que como que eu passo esse event ID aqui ó como que eu passo esse cara eu preciso saber se o evento existe concordam comigo então antes eu vou fazer o seguinte ó event e eu vou chamar de event tá aqui ó evt igual a do evt repo eu faço o qu um find by ID Aliás não vou colocar esse cara pelo prame porque eu recebo o prename na
URL né ó venho aqui ó eu recebo prename então vou fazer pelo prename string opa string prename tá aqui então tá find by prename Beleza se por um acaso esse evt for igual a nul que que eu faço throw new event not found Exception E aí eu coloco aqui ó ranking do evento não existe ranking do Event e eu coloco o prame dele ó não existe beleza não existe pronto lanço a exceção fim de papo mas se o meu evento existe que eu faço eu pego Então desse objeto evt e pego o ID dele ó
get event ID Resolve Meu Problema caramba isid bem legal essa ideia porque a gente consegue fazer muitas coisas interessantes a partir daí show show próximo passo então que que eu vou fazer preciso fazer o meu Controller para ele poder acessar isso será que dá certo vamos lá no subscription Controller ó e aí como que eu vou fazer isso bom vamos pegar a especificação aqui ó subscription o pretty name certo ó ranking vamos fazer esse cara aqui então vai ser meu get mapping pra consulta barra subscription ao invés de Pretty name assim eu vou colocar como
uma variável ó pretty name tá aqui e o ranking Como que eu faço Public list na verdade assim eu vou fazer um response entity tá de qualquer coisa E aí ó generate top TR ranking by event E aí ó @p variable string pretty name Ok Ok qual que é minha ideia eu vou fazer um try Cat porque ele pode lançar exceção tá Cat event not found Exception e tá aqui e o que eu faço basicamente Se der tudo certo ó return response entity pon Ok do meu service ponto get complete ranking passando proame senão eu
faço o quê return response entity entity pon not found not found não vou colocar pelo status status 404 PB E aí eu coloco aqui o qu New error message do e PG message da mensagem da minha exceção feito Se der tudo certo a gente sobe nossa api e vê o que que vai dar vamos ver vamos ver vamos ver se isso aqui funciona Ai ai ai momentos de subiu beleza tá conectando subiu nosso api ó started em 11 segundos tá bom tá ótimo ok que que eu quero fazer vamos criar o ranking aqui ó então
http 2 bar local host 2 88 Bar subscription Cod Craft porém ó ao invés de barra 2 barra ranking vamos ver primeiro colocado Professor Isidro segundo colocado John do terceiro colocado Larry ly quarto colocado Mary May quinto colocado Peter Parker uau funcionou de prima hein sensacional sensacional mas Isidro pela especificação pelo doc aqui ó ideal o ranking tem que exibir os três primeiros colocados né que vai ser o meu usuário Gold Silver e bronze Como que eu faço isso aqui tá fácil por qu o meu get complete ranking me retorna uma lista não é eu
quero só a sublista ó suist Começando na posição zero tendo três elementos pronto se eu fizer isso basicamente olha o que ele vai me dar olha o que ele vai me dar vem no no Postman e ó parã subscribers user ID name subscribers user ID name subscribers user ID name show de bola show de bola gente show de bola isso é F Fantástico para nós beleza Show onde que tá o ponto aqui onde que tá o ponto aqui né o nosso ranking tá beleza agora eu quero pegar ranking por usuário então eu quero continuar com
essa essa determinada URL e colocar o meu user ID por exemplo meu user ID 2 aqui e ele vai me mostrar estas informações mais a posição onde eu me encontro no ranking beleza como que a gente faz vamos lá obviamente eu vou ter um Serv ISS depois um novo mapeamento Então vamos lá então aqui subscription service na mão eu vou fazer muito parecido porque esse get complete ranking aqui vai me dar efetivamente o que eu preciso tá L eu V fazer um Public para eu poder gerar esse cara gerar mais uma informação aqui que é
ess subscriptions euer da posição do meu ranking então Ó vou colocar aqui ó ranking by user subscription ranking by user vai ser um Record subscription ranking Opa ranking by user tá aqui que ele vai ter as informações normais ó o subscription ranking item beleza tá aqui que eu vou chamar de item mais um integer passando a a posição dele ó position a posição dele no ranking Beleza beleza Como que eu faço isso ai ai ai ai ai ai ai ai vem no subscription service que que eu faço bom vamos criar aqui um Public ó subscription
by user subscription ranking by user E aí ó get huning by user E aí eu coloco aqui ó integer user ID tá aqui como é que eu faço tá esse é o grande ponto vou dar um return n aqui só parar de reclamar tá eu tenho esse esse tipo de toque primeira coisa vocês concordam comigo que este complete ranking aqui me dá efetivamente Ah eu preciso também passar o prett name né Esqueci string prett name porque tem que ser o o usuário e o evento né pronto este serviço aqui me dá o ranking completo Então
vou pegar o ranking completo então vou fazer o seguinte ó list de subscription ranking item eu vou chamar de ranking e eu vou chamar esse outro método aqui ó get complete ranking tá aqui ó Pronto passei agora eu tenho a minha lista com todo o ranking e eu quero fazer um filtro nesse cara como que eu faço um filtro nesse cara eu vou basicamente falou o seguinte ó eu vou pegar tá um subscription tá ranking item eu vou chamar de item igual a Olha só o meu ranking eu vou usar o recurso do stream que
é a partir do java8 que é super poderoso para manipulação de listas eu vou fazer um filtro nele ó Filter para cada item da minha lista eu quero ver se o item no seu ID Ó cadê user ID certo para cada item no seu user ID Ele é igual ao user ID que eu passei no parâmetro então do da minha lista do ranking eu quero saber para cada um desses itens quem é igual dos que são iguais que que eu vou fazer eu vou dar um find first or else n Ou seja eu posso encontrar
ou não pode ser que meu usuário se ele não convidou se ninguém se inscreveu pelo link dele isso aí vai ser nul tudo bem Então o que eu vou fazer aqui tá bom que que eu faço se o meu item for igual a nul ou seja não tem usuário o meu usuário não está nessa lista eu dou um throw New vamos pegar aqui das nossas exceptions vamos pegar aqui ó as nossas exceptions ó user indicador notf user indicador notf Exception beleza e aí eu falo assim ó não há inscrições para esse usuário não há inscrições
para o com indicação do usuário e aí eu coloco aqui o user ID pronto fechou fechou porém se ele tá a gente consegue fazer alguma coisa então vou dar só um System out ó no item beleza tá aqui vou fazer um contr só para testar para ver se funciona bonitinho por porque a gente quer pegar a posição dele na lista Então vamos lá eu vou fazer um getmapping ó @getmapping tá aqui ótimo Qual que é o a url que é pedida ó esse cara aqui subscription prename ranking user ID tá bom vem cá pretty name
então ó pretty name tá aqui e eu ponho o user ID aqui ó user ID Tá ótimo então que eu vou fazer Public responsi de qualquer coisa tá generate ranking by event and user ID user pronto e aí eu coloco aqui as duas pef variables ó pef variable string pretty name e outra pef ver vou colocar na linha de baixo para facilitar Nossa legibilidade tá @p ver integer user ID tá aqui oh que massa que que eu vou fazer eu vou dar na boa um return no ó não quero retornar vou vou revisitar isso para
Justamente a gente só fazer a nossa a nossa o nosso teste tá E aqui ó tá vendo eu vou chamar o serviço e retornar no Então tá bom vamos lá no nosso Controller tá aqui ó eu vou chamar então o serviço ó service ponto get ranking by user onde eu passo pretty name user ID calma não vou calma não tô retornando nada porque eu quer o que eu o que eu preciso é Cadê o service tá aqui ó esse System out print LN aqui tá bom vamos lá vamos ver então ó ranking bar2 o usuário
Isidro vamos ver não mostra nada tá certo Por enquanto e aqui ó subscribers se user ID do Professores Tá certo então aqui tá beleza ó ele consegue imprimir isso para mim se eu colocar um ranking 14 que eu não tenho usuário para isso ó Eita deu ruim ah porque eu não fiz tret ok não fiz o tratamento da exceção tá bom depois a gente monta o tratamento da exceção perfeito tá porque ele vai dar ó obviamente né user ID user indicador not found Exception não há inscrições com indicação do usuário 14 show mas tá certinho
Tá certinho tá certinho que que tá faltando pra gente fazer achar a posição dele nessa lista como é que eu faço isso vem cá pra gente fazer isso eu não vou mais imprimir tá ó tô aqui no service não vou mais imprimir bonitinho e eu vou fazer o seguinte eu vou criar um integer posição porque se ele tá nessa lista se não deu exceção é porque ele tá na lista tá bom que que eu faço com essa posição eu vou usar um cara do Java chamado int stram int string para eu poder fazer o quê
percorrer cada um dos inteiros então vou fazer o seguinte ó eu vou pegar esse Range tá inam Opa faltou stream P Range ó do da posição zero até o ranking P size aqui eu estaria fazendo até para quem é mais tradicional no Java é como se fosse um for Beleza beleza e eu vou fazer exatamente a mesma ideia de fazer um filtro aqui ó ah Ah legal o que que eu faço a partir da minha posição I eu vou chamar de posição pronto posição que que eu faço eu vou pegar na minha no meu ranking
que é uma lista get position tudo bem E eu vou ver quem é igual equals ponto né ponto e user ID tá aqui equals o user ID que eu passei tá aqui pronto para cada posição E aí eu faço o qu ponto find first PG as int a partir daqui ranking ah pronto a partir daí eu tenho a posição mas a posição começa na posição zero então que eu faço ao invés de retornar n eu vou retornar então um New o quê ã subscription ranking by user beleza a partir daí o que eu faço eu
coloco então o item e a posição só que ao invés de posição posição mais um para não ter que começar do zero né para ser um um mínimo mais amigável com o usuário tá aqui ó deixa eu destravar o a rolagem do do log aqui será que isso dá certo vamos ver vamos ver vamos lá no Controller agora ó Cadê o subsídio porque o Controller tá aqui bom então em vez de fazer return nul em vez de fazer só isso eu vou fazer assim ó então lá Opa try né porque a gente vai tratar exceção
catch Exception qualquer exceção ó eu tenho event not found Beleza então podemos fazer duas exceções mas Exception vou fazer uma exceção genérica tá E aí eu faço o seguinte se der tudo certo dou um return responseentity.ok do Service P get huning by user passando proame user ID Tá certo senão eu vou dar o um return respon status 404 E aí eu coloco aqui ó New error message de qu Dog message que é o usuário que não existe não tem ranking para esse usuário Opa ou mesmo se eu passar um evento que não existe ele também
é abordado nessa situação e eu ti esse return nud aqui para ele não ficar reclamando para mim salvei Vou reiniciar beleza vamos testar se eu tentar fazer o ranking então do usuário dois será que ele me retorna corretinho ó item é o são seis subscribers do usade do que é o professor de posição no ranking um vamos ver o usuário 3 posição no ranking dois que é o John do posição no ranking do usuário 4 Larry ly posição 3 tá vendo Caraca posição CCO tá aqui vamos pegar um usuário posição seis ó Peter park e
o usuário 7 eu tenho o usuário 7 ó vamos ver não há inscrições com indicações do usuário 7 e se eu colocar por exemplo 2026 aqui o o summit errado aqui ó ranking do evento codecraft não existe Caraca iidr Que massa Pois é Turma com isso o que que a gente faz a gente consegue completar os requisitos do nosso sistema aqui ó Então eu tenho ó podia ser count eu coloquei né putz poderia ser subscribe huning position depois a gente pode mudar essas essas nomenclaturas tá mas olha que interessante eu consigo colocar então o número
de subscribers número de Contagem ranking position e tal e eu consigo criar todos estes requisitos e transformá-los numa grande api Para quê Para que depois a nossa equipe de frontend consiga vamos supor colocar aqui ó a minha posição no ranking eu consigo saber quem são as pessoas que estão mais bem colocadas nessa inscrição então eu consigo ter inscrição autônoma inscrição por indicação e ranking dos três principais usuários que conseguem trabalhar as minhas que conseguem ter o maior número de inscritos por indicação deles e a minha própria posição para eu saber se o meu em qual
né Em qual lado Em qual posição aqui eu estou dentro do meu ranking faz sentido dentro do ranking Global faz sentido concluímos Então a nossa api Spring boot os dados né esses dados aqui eu vou deixar também disponível para vocês poderem usar como como exemplo e tentativa e tratativa para vocês Popular a sua base de dados e com isso a gente conclui todo o nosso conteúdo dos da da primeira edição do nlw de 2025 beleza Muito obrigado e a gente já já se vê Valeu parabéns por ter completado as três aulas do nlw Connect Cara
eu não sei se você sabe mas você faz parte de um seleto grupo de 15% de inscritos que conseguem concluir essa jornada então isso já é motivo de sobra para você se orgulhar ótimo só que o n w não termina por aqui tá ainda tem uma última etapa E que você para você poder garantir o seu certificado e é muito importante que você participe dela nessa quinta nós teremos um um encontro ao vivo de encerramento pra gente poder fechar com chave de ouro toda essa missão com toda a comunidade que participou do evento Então lá
a gente vai liberar a palavra-chave para você poder gerar o seu certificado na plataforma e também participar do sorteio além disso a gente vai dar detalhes dos bônus exclusivos que a gente preparou para quem não quer parar por aqui e quer continuar evoluindo em programação junto com a Rocket City então não perca Fica de olho no grupo do WhatsApp e também no seu e-mail que a gente vai enviar todos os links de acessos e informações por esses canais legal Lembrando que você tem até domingo para assistir esse conteúdo de forma gratuita e se você tiver
interesse Claro você pode assistir as outras aulas das trilhas disponíveis até lá beleza Muito obrigado por me acompanhar até aqui e até o nosso último encontro valeu