Por favor, faz a parte de testes unitários, vai ajudar bastante para quem precisa de um insight de como começar, libs a utilizar e como pensar no teste. Tudo de melhor sempre 👊👊
Muito bom, continuando o projeto com os testes. Acho de grande valia uma série nesse sentido. Ir melhorando e aumentando a complexidade do projeto em nível pleno.
Seria massa fazer um projeto simples de API do zero com TDD, dessa forma você ajudaria muito a galera com dois assuntos legais que é teste unitário e TDD. Ou as vezes até refazer esse mesmo projecto com TDD. Parabéns pelo canal.
Não sou do Back, não sou do Java, muito menos manjo algo de Spring, mas adorei o vídeo! Mesmo não entendendo a maioria do conteúdo, é muito satisfatória a maneira que o conteúdo é explicado no vídeo. Show de bola!
Muito incrivel ver a documentação, e a implementação no seu vídeo, parabéns! Tive um projeto em Java com Spring na Empresa que atuei um tempo atrás por isso sempre me mantenho atualizado mesmo hoje sendo Mobile com Flutter lá no trabalho. Excelente vídeo de verdade! Obs.: Implementações com AWS são muito usadas pelas empresas, seja usando S3, dynamoDb e afins... projetos que envolvam implementações com AWS de fato te preparam para o mercado, seu video faz a total diferença. Parabéns.
Parabéns, Kipper. Muito massa teus ensinamentos. Isso é uma aula gratuita e de qualidade. Hoje domingo, eu tirei pra ficar descansando e pensei 'acho que vou ver algum desafio tecnico da Fernanda e vou fazer. ai eu to vendo teu video e vou fazer por conta propria. No começo, eu via e copiava. Hj me sinto mais confiante pra fazer só mesmo errando. Prefiro até. A gente evolui muito.
Ainda nem terminei de assistir, mas quero parabenizar por este vídeo e por todo conteúdo que tu tens disponibilizado no teu canal. Conteúdo de qualidade, bem explicado, didática muito clara e objetiva. Com certeza, tua paixão pela tecnologia está ajudando muitos desenvolvedores, independente da "senioridade", a evoluir pessoal e profissionalmente. 👏👏👏👏
Pow que conteúdo maneiro, excepcional a sua atenção e paciência na hora de ensinar o conteúdo para os alunos na execução da programação. E o tema do vídeo foi o mais incrível 😯 obrigado Kipper 🙏❤🥷
Muito bom Fernanda! Você nunca deixa a desejar! Já estava procurando sobre aplicações com email service e AWS, aí vem você e entrega tudo!!! Agora só estou esperando aquele vídeo sobre TDD com JUnit e Mockito eim!
Quem estiver vendo o vídeo atualmente e estiver com esse erro no pom.xml -> Dependency conflict in aws-java-sdk-ses: commons-logging:commons-logging:1.2 conflict with 1.1.3(Maven dependency conflict) 3.0.0+ basta adicionar esse trecho de código antes do bloco de dependencias
jesus cristo eu caí aqui de paraquedas... que pesadelo fazer essa bobeirinha em java haha vcs são malucos mesmo. Mas muito bem explicado a encapsulação de responsabilidade e das chamadas recursivas 👏👏
Nossa, que conteúdo maravilhoso!! Assisti e já salvei para tentar fazer junto passo a passo haha adoro o seu canal, ajuda demais a todos! Eu que estou começando então, é maravilhoso! Obrigada mesmo 💖🙏🚀
Fernanda parabéns, vc foi uma das pessoas que me ajudaram a entrar no mundo Java com seus conteúdos. Mas se eu não estiver engando, quando usamos dependência via construtor não precisamos passar o autowired, acho que essa mudança veio no spring 3. E sim teste seria muito top e vc poderia fazer uma trilha implementando os outros serviços desse repositório da Uber, sei que vc é fera tbm no javascript, pq não fazer essa série implementando várias techs
Abraço, @fplanger 💜 Já coloquei lista dos próximos vídeos!
10 месяцев назад
Duvidas: 1. No minuto 27:34 você adiciona na mão o e-mail do remetente, porque não fez usando buscando de algum arquivo de configuração ou variável de ambiente? Geralmente implementa-se assim ocultando coisas deste tipo do condigo. Qual seria a melhor solução ou boa prática neste caso? 2. Ainda sobre o minuto 27:34 como faria para buscar o e-mail de um arquivo de configuração, de uma variável de ambiente, ou secret manager da AWS; de forma que não expusesse um e-mail diretamente no código? Como faria aplicando a melhor pratica? 3. No minuto 29:05 você usou um try catch, capturando a exceção e mandando para frente. Porque ele foi implementado na classe de EmailSenderService? Existe outra abordagem que não seja lançando exceção? Como ficaria, p.ex., se eu quisesse mandar uma notificação que houve erro no envio?
Você usa o clockify, track de tempo e dinheiro, tipo você coloca seu projetos e usa o start, vai contabilizando tempo e dinheiro gasto em cada projeto, tanto para cobra algum cliente, quanto para você mesmo veja quanto tempo e dinheiro está invetino em algum projeto
perfeito o vídeo, aprendi bastante depois faz um vídeo mostrando como criar testes unitários e de integração, boas práticas na criação desses testes, etc...
Acho que a complexidade do desafio na real era maior, pois não era criar abstração para dois email service provider, mas sim uma abstração between two email service providers. Ou seja, provavelmente eles querem que o output de um service seja manupulado na abstração e seja enviado como input de outro service. Teria sido legal ver por completo, mesmo que ficasse ainda mais longo! Parabéns pelo conteúdo!! 🙌
mas o controlador ja faz isso. É so guardar o request de um provider com o remetente de outro, ela so não criou pro outro e usou o email pessoal, não ?? 🤔
1. Em relação à injeção de dependências, você poderia optar por usar a anotação @RequiredArgsConstructor do Lombok e declarar as dependências como private final. Isso não apenas torna o código mais conciso, mas também fortalece a imutabilidade. 2. Dependendo da complexidade e do tamanho da sua aplicação, seria interessante estruturá-la em módulos do Maven. Isso facilitaria o gerenciamento de dependências e minimizaria os riscos de violações das regras de arquitetura limpa por parte dos desenvolvedores. 3. Notei um pequeno deslize em sua implementação que poderia ser melhorado: o controller EmailSenderController deveria depender da abstração EmailSenderUseCase em vez da implementação EmailSenderService. Isso está mais alinhado com o princípio da inversão de dependência, que sugere depender de abstrações e não de implementações concretas.
como estudante de java, é muito bom encontrar conteúdo que não seja CRUD... mesmo assim, achei difícil toda essa lógica de interfaces de regras de negócio, interfaces de serviço. Mas é isso mesmo, tudo que é novidade incomoda rsrs... parabens Fernanda, e obrigado.
Fê, seus vídeos são excelentes. Aprendendo muito aqui. Muito obrigado e parabéns! Só um dica: o tamanho da fonte do código no IntelliJ pode ser um pouco maior, já que tem bastante espaço vazio no lado direito da tela. Pra quem assiste ao vídeo em telas menores, aumentar o zoom de exibição ajuda bastante.
Por favor, faça um video que contenha o seguinte: API Rest + Testes Unitarios + Docker com Deploy na Nuvem (Railway ou outra plataforma). Obrigado por compartilhar seu conhecimento!
No momento que estou mandando esse comentário, estou no minuto 30:25, estou curtido, legal que você sabe explica as etapas e o porque esta sendo implementado de tal maneira, mas acredito que o segundo service não era necessário nesse caso, compreendo o que disse ta dahora o video. Considerando que seus clients estão chamando a interface, as implementações precisarão respeitar essa interface, igual você anotou... Ai depois não seria apenas criar uma nova implementação pensada na outra infla, e com @Qualifier("") você apontava ?
Fico feliz que você esteja gostando, André 💜 Pois é, tem muita questão de projeto e arquitetura de solução. Às vezes um time vai preferir seguir uma estrutura diferente, e tá tudo bem, é questão de preferência.
Olá. Não sei se fez em vídeos posteriores, mas você importou o Lombok para o projeto, e não usou. De repente seria legal mostrar para o pessoal como funcionaria a injeção de dependência por exemplo, sendo auxiliado pelo Lombok utilizando RequiredArgsConstructor a partir da definição das propriedades como final, você acabaria não precisando escrever essas injeções por construtor com o Autowired, e deixaria o código um pouco mais clean. No mais, sua didática é impressionante Fernanda, parabéns (:
Que conteúdo incrível, Fernanda! Obrigado por nos auxiliar tanto a entender esses conceitos mais complexos, sua didática é incrível! Fiquei com uma dúvida em relação a interface de Gateway. Se fizermos o teste completo, implementando outro email provider, devemos implementar a mesma interface de gateway para essa nova implementação? Como o Java identifica qual o email provider que queremos utilizar?
Okay, Injectou o EmailSenderService conhece o EmailSenderGateway e o Ses tem que implementar, dessa forma o Spring injecta automaticamente a classe, mas e se tiver outras classes que implementam o gateway ao mesmo tempo, como é que fica?
É possível ter mais de uma implementação, mas será necessário diferencia-lás. Há várias formas de fazer isso, uma delas é adicionar a anotação Qualifier com um nome único da implementação na definição da classe e usar a mesma anotação quando fizer a injeção de dependência do atributo que faz menção a interface. Recomendo a leitura do artigo Spring Bean Names do site Baeldung.
Só faltou a parte de failover que está no desafio, se um provider falhar tem que fazer fallback para outro e garantir HA. queria ver algum algoritimo de circuit break =/..
Meus parabéns, continue dando aulas, ajuda muitooo. Tenho 19 anos e estou te acompanhando constantemente. Uma dúvida, ali na parte do EmailSenderGateway eu tive que colocar o @Component, porque estava me dando um erro de "Could not autowire. No beans of 'EmailSenderGateway' type found" E so dessa maneira que eu consegui resolver, porque o Spring não estava conseguindo achar o construtor, e ai que esta a minha pergunta, como que na tua aplicação funcionou kkk
A documentação poderia ser feita usando o Swagger. É bem tranquilo. Uma dúvida, se você tivesse que fazer alguma fazer uma validação de negocio. Digamos que a ubber tem uma lista de palavras proibidas no corpo do email. Essa validação teria que ficar ali no Core correto? Pois é parte do caso de uso. Como ficaria essa implementação?
@@edmilsonferreira5204 o erro estava na parte do regions, aparentemente o spring não conseguiu ler o arquivo "application.properties". Dai precisei por na mão as credentials e a region. No meu caso deu bom.
Oi gente! Caso o meu Use Case fosse retornar algo, para um Presenter por exemplo, a classe EmailResponse que seria um DTO assim como o EmailResquet, onde ela ficaria, também no Core, ou seria um DTO da camada de Infra ou quem sabe da Application? O meu Controller sendo da camada mais externa, por usar Framework, ele pode usar um DTO da camada mais interna Core "(por isso a minha dúvida)?
Fê, enquanto fazia o projeto, decidi eu mesmo procurar onde encontrar a dependência, ao invés de copiar. Acontece que foi muito difícil encontrar, tantas versões, nenhuma documentação clara na AWS sobre a diferença entre as versões. Fui, então, com a versão mais recente. Só que a API mudou muuuuito! Eles passaram a utilizar um padrão diferente e achei muito mais verboso, confuso. Dito isso, queria sugerir: 1. O que acha de fazer um vídeo falando sobre onde encontrar e como navegar nesse mar de dependências que são publicados? 2. Analisar a atualização na api e mostrar como aprender a implementar quando a documentação é ruim.
Sei como é, Lucas! Às vezes é muito chato pesquisar em algumas documentações pq é difícil entender o que estão querendo nos dizer, às vezes os exemplos são péssimos tbm. Acho uma boa um vídeo falando disso, muito obrigado pela ideia 💜
Estou temdo dificuldade aqui com a dependencia da aws também, só confiando não funcionou, busquei a versão mais recente e também não está funcionando. no pom está OK, não da erro nenhum, mas na hora de adicionar no condigo o intelij não acha a dependencia, e mesmo tentanto importar na mão, não esta dando certo.
Oii, @@joserodrigues5899 Tenta dar uma olhada no comentário que eu deixei pinado, parece ter ajudando o pessoal. Depois também dá uma olhada no repositório da solução que eu deixei no link do vídeo e compara com o seu projeto
Olá, alguns milhões de anos depois, hoje estava fazendo este teste e me deparei com um erro: Error: Couldn't connect to server Durante o teste, voce abriu o Insomnia nesta parte e não consegui fazer igual.
Excelente o vídeo! Mas uma dúvida, quando criamos uma service (ou controller e afins) e anotamos ela, o spring já não entende que o construtor já ganha um autowired por padrão? Ou você colocou essa última anotação só pra deixar explícito mesmo?
socorro alguem me ajuda, alguem tem o codigo fonte que ta rodando direito, o meu nao to conseguindo rodar ta dando erro de conexao com.amazonaws.SdkClientException: Failed to connect to service endpoint:
O negócio mesmo é no code, muito mais rápido, não precisa saber tantos detalhes técnicos. No code tem uma grande vantagem por ganhar tempo, o que as empresas mais precisam atualmente
a questão não é se é rápido codar ou não, mas sim a escalabilidade disso, como você implementaria uma escalabilidade para um sistema no-code para que tenha 2 milhões de requisições por SEGUNDO em um código gerado automaticamente? como você implementaria um sistema desses para fazer requisições para aws sem derrubar tudo por excesso de requisições ? Não dá. NoCode e LowCode existe a vários e vários anos, são muitas questões para colocar em jogo além do tempo de desenvolvimento de um projeto. Um sistema no-low code gera um código já foi mastigado por um programador que projetou e implementou a plataforma, e você fica preso a isso.
@@riseunk0 elas são bastante adaptativas hoje em dia. Da pra fazer tudo e mais um pouco, esse é o futuro, é rápido. É isso que as empresas devem se preocupar, tempo, se demorarem pra entregar algo, ficam pra trás, por isso devem desenvolver cada vez mais rápido. O Banco do Brasil tem utilizado no code na maior parte dos seus sistemas atualmente por exemplo.
@@masterthug8647 Tente fazer um algoritmo de recomendação de produto simples, estilo de um e-commerce, se tiver alguma ideia de como implantar isso eu realmente quero saber.
Fê, uma unica coisa que não entendi muito bem. No desafio do uber precisariamos implementar 2 serviços de envios de email atraves de um mesmo gateway, e caso um estivesse indisponivel, acionar o outro serviço. Como que fariamos pra mudar o serviço de envio de emails usado como base sua disponibilidade? Por exemplo, caso o AWS SES estivesse indisponivel, como mudariamos para um mail gun?
Oii Lucas, ótimo comentário! Eu faria de duas formas, uma é fazendo um fallback, exemplo: Primeiro, tento bater na AWS SES Se der exceção, então chamo o outro serviço tipo mailgun É bem simples mas já funcionaria Outra forma, seria ter uma forma de controlar o código remotamente, através de uma feature toggle por exemplo, o nosso código consumiria o valor dessa chave e então baseado nela ele iria decidir se usa o serviço AWS SES ou Mail Gun. E ai, a gente poderia ter um dashboard pra acompanhar a disponilidade dos serviços e fazer essa troca "ao vivo" caso notasse algum problema de disponibilidade, o problema é que ia precisar monitorar o tempo todo. Tipo se(chaveEMAIL == true) então AWS SES senão Mail Gun Basicamente uma feature toggle é uma técnica que permite que a gente altere o comportamento do nosso sistema sem alterar o código. O valor dessas chaves fica salvo em algum serviço, tipo o Config Cat, e nosso código consume esse valor de lá através de uma requisição HTTP, e usa esse valor pra tomar uma decisão. E nós conseguimos alterar os valores através do portal da ferramenta, como se fosse um editor de texto mesmo, onde a gente pode mudar o valor que é enviado pro nosso código.
6 месяцев назад
Eu implementei, funcionou, mas eu não entendi foi nada KKKKK Vou assitir mais uma vez e pesquisar sobre o conceito Clean Arquiteture
Olá, pessoal. Tenho uma dúvida, se eu acompanhar o video e realizar em conjunto, no final eu posso colocar no meu github para mostrar o aprendizado? Ou não seria válido uma vez que foi feito seguindo a lógica de outra pessoa? No caso da Fernanda. Obrigado!
Oii @daeja2198 Pode colocar sim! Só é interessante você deixar claro no readme do repositório quando você tem uma aplicação que foi construida seguindo algum tutorial. Mas não tem problema não, pode colocar!
Por favor, faz a parte de testes unitários, vai ajudar bastante para quem precisa de um insight de como começar, libs a utilizar e como pensar no teste. Tudo de melhor sempre 👊👊
Boaa! Vou fazer sim, será um dos próximos videos do canal 💜
Muito bom, continuando o projeto com os testes. Acho de grande valia uma série nesse sentido. Ir melhorando e aumentando a complexidade do projeto em nível pleno.
@@kipperdevestou aguardando 🎉
Já tem o video dos testes unitários?
Já tem esse vídeo ?
Que show de conteúdo Fernanda passei pro time inteiro aqui! Abraços e continue por favor
Show, valeuu Taylson! 💜
Seria massa fazer um projeto simples de API do zero com TDD, dessa forma você ajudaria muito a galera com dois assuntos legais que é teste unitário e TDD.
Ou as vezes até refazer esse mesmo projecto com TDD.
Parabéns pelo canal.
fico assustado ao perceber que não sei NADA kkkkkkk muito foda o conteúdo..
Te acho tão inteligente. As vezes acho que nunca vou mandar bem em programação de verdade.
Vai sim, Stefany! É tudo questão de prática e estudo
Confia em você 💜
Não sou do Back, não sou do Java, muito menos manjo algo de Spring, mas adorei o vídeo! Mesmo não entendendo a maioria do conteúdo, é muito satisfatória a maneira que o conteúdo é explicado no vídeo. Show de bola!
Muito incrivel ver a documentação, e a implementação no seu vídeo, parabéns! Tive um projeto em Java com Spring na Empresa que atuei um tempo atrás por isso sempre me mantenho atualizado mesmo hoje sendo Mobile com Flutter lá no trabalho.
Excelente vídeo de verdade!
Obs.: Implementações com AWS são muito usadas pelas empresas, seja usando S3, dynamoDb e afins... projetos que envolvam implementações com AWS de fato te preparam para o mercado, seu video faz a total diferença. Parabéns.
Parabéns, Kipper. Muito massa teus ensinamentos. Isso é uma aula gratuita e de qualidade. Hoje domingo, eu tirei pra ficar descansando e pensei 'acho que vou ver algum desafio tecnico da Fernanda e vou fazer. ai eu to vendo teu video e vou fazer por conta propria. No começo, eu via e copiava. Hj me sinto mais confiante pra fazer só mesmo errando. Prefiro até. A gente evolui muito.
👉 Livro Arquitetura Limpa
amzn.to/48sC8g2
Muito bom. sou dev .net core mas gosto de ver outros projetos e outras linguagens de programação e vc explica muito bem.
Muito obrigadaa, Edson 💜
Acho legal isso que você faz, você acaba se mantendo atualizado sobre outras tecnologias!
Arquitetura exagonal, que delicia, é lindo demais ver funcionando nessa arquitetura
Melhor exemplo que já vi e o mais claro de arquitetura limpa, obrigado!
Ainda nem terminei de assistir, mas quero parabenizar por este vídeo e por todo conteúdo que tu tens disponibilizado no teu canal.
Conteúdo de qualidade, bem explicado, didática muito clara e objetiva.
Com certeza, tua paixão pela tecnologia está ajudando muitos desenvolvedores, independente da "senioridade", a evoluir pessoal e profissionalmente.
👏👏👏👏
Pow que conteúdo maneiro, excepcional a sua atenção e paciência na hora de ensinar o conteúdo para os alunos na execução da programação. E o tema do vídeo foi o mais incrível 😯 obrigado Kipper 🙏❤🥷
Muito bom Fernanda! Você nunca deixa a desejar! Já estava procurando sobre aplicações com email service e AWS, aí vem você e entrega tudo!!! Agora só estou esperando aquele vídeo sobre TDD com JUnit e Mockito eim!
Que bom que gostouu, Deyvis 💜
Hahah vou fazerr
Quem estiver vendo o vídeo atualmente e estiver com esse erro no pom.xml -> Dependency conflict in aws-java-sdk-ses: commons-logging:commons-logging:1.2 conflict with 1.1.3(Maven dependency conflict) 3.0.0+
basta adicionar esse trecho de código antes do bloco de dependencias
commons-logging
commons-logging
1.2
Amassando todo e qqr nlw ou aula da rockeat seat. Gesus, apredam com essa mulher como se faz aula ....
jesus cristo eu caí aqui de paraquedas... que pesadelo fazer essa bobeirinha em java haha vcs são malucos mesmo. Mas muito bem explicado a encapsulação de responsabilidade e das chamadas recursivas 👏👏
fernanda, você é minha inspiração pra ser dev. meu deus, que conteúdo incrível
Muito obrigadaa, @gabiqss 💜
Desejo muito sucesso na sua jornada!
Vídeo muito bom! Continuo firme estudando Spring pelo seu canal, muitíssimo obrigado!!!
Que legal, Welber!
Fico feliz em estar ajudando 💜
Seus vídeos são os melhores!! Parabéns pelo conteúdo, bom demais.
Muito obrigadaa, @nfs03 💜
Nossa, que conteúdo maravilhoso!! Assisti e já salvei para tentar fazer junto passo a passo haha adoro o seu canal, ajuda demais a todos! Eu que estou começando então, é maravilhoso! Obrigada mesmo 💖🙏🚀
Obrigadaa Malu, fico feliz DEMAIS que o video tenha ajudado de alguma forma 😊
Muito top o desafio sendo resolvido, estou ansiosoooo pelo teste unitário
Ótimo vídeo. Muito didático. Sim, queremos vídeos tratando sobre testes unitários. Obrigado!
Muito obrigadaa 💜
Boa! Já está na lista dos próximos vídeos!
21:20 Pra mim isso eh um dos principios do solid: dependency inversion principle
Muito legal e enriquecedor os seus vídeos Fernanda! Continue assim e todo sucesso do mundo, obrigado por compartilhar!
Vídeo muito bom, inclusive para quem tá iniciando no Spring, como eu. Sou novo no canal e já vi que tenho 75 vídeos para maratonar 😅
Video top demais! Fernanda depois poderia trazer resolvendo desagios técnicos para estágio/junior com Java?
Up
up
UP
Fernanda, teu canal é muito bom! Parabens.
Muito obrigada Alex! 💜
Nossa, Fer! Teus vídeos me ajudam mt !!!!!!
Iniciando minha carreira para tentar ser um dev na área de back!!!
Parabéns pelo conteúdo o/
Boaa, Vianna, que show!!
Desejo todo o sucesso pra você 💜
fernanda você é 10 demais, não tem como tô sempre aqui comentando nos seus vídeos e parabéns demais!!
Fernanda parabéns, vc foi uma das pessoas que me ajudaram a entrar no mundo Java com seus conteúdos. Mas se eu não estiver engando, quando usamos dependência via construtor não precisamos passar o autowired, acho que essa mudança veio no spring 3. E sim teste seria muito top e vc poderia fazer uma trilha implementando os outros serviços desse repositório da Uber, sei que vc é fera tbm no javascript, pq não fazer essa série implementando várias techs
é uma boa fazer os testes unitários desse desafio! Abração!!!!
Abraço, @fplanger 💜
Já coloquei lista dos próximos vídeos!
Duvidas:
1. No minuto 27:34 você adiciona na mão o e-mail do remetente, porque não fez usando buscando de algum arquivo de configuração ou variável de ambiente? Geralmente implementa-se assim ocultando coisas deste tipo do condigo. Qual seria a melhor solução ou boa prática neste caso?
2. Ainda sobre o minuto 27:34 como faria para buscar o e-mail de um arquivo de configuração, de uma variável de ambiente, ou secret manager da AWS; de forma que não expusesse um e-mail diretamente no código? Como faria aplicando a melhor pratica?
3. No minuto 29:05 você usou um try catch, capturando a exceção e mandando para frente. Porque ele foi implementado na classe de EmailSenderService? Existe outra abordagem que não seja lançando exceção? Como ficaria, p.ex., se eu quisesse mandar uma notificação que houve erro no envio?
Achei seu canal aqui na TL e parabéns manda muito com Java.
Sucesso!
Você usa o clockify, track de tempo e dinheiro, tipo você coloca seu projetos e usa o start, vai contabilizando tempo e dinheiro gasto em cada projeto, tanto para cobra algum cliente, quanto para você mesmo veja quanto tempo e dinheiro está invetino em algum projeto
Voce faz parecer tão facil! gosto demais dos seus videos muito obrigado!
Que bomm, @KermesSalustiano, eu que agradeço
Fico feliz que tenha ajudado você 💜
Conteúdo incrível e de grande valia! Muito obrigado por compartilhar o conhecimento Fer
Muito massa esses videos de desafios backend com Spring , showw
perfeito o vídeo, aprendi bastante
depois faz um vídeo mostrando como criar testes unitários e de integração, boas práticas na criação desses testes, etc...
ou também fazer um vídeo criando um projeto seguindo os ensinamentos do livro código limpo
Acho que a complexidade do desafio na real era maior, pois não era criar abstração para dois email service provider, mas sim uma abstração between two email service providers. Ou seja, provavelmente eles querem que o output de um service seja manupulado na abstração e seja enviado como input de outro service. Teria sido legal ver por completo, mesmo que ficasse ainda mais longo! Parabéns pelo conteúdo!! 🙌
mas o controlador ja faz isso. É so guardar o request de um provider com o remetente de outro, ela so não criou pro outro e usou o email pessoal, não ?? 🤔
1. Em relação à injeção de dependências, você poderia optar por usar a anotação @RequiredArgsConstructor do Lombok e declarar as dependências como private final. Isso não apenas torna o código mais conciso, mas também fortalece a imutabilidade.
2. Dependendo da complexidade e do tamanho da sua aplicação, seria interessante estruturá-la em módulos do Maven. Isso facilitaria o gerenciamento de dependências e minimizaria os riscos de violações das regras de arquitetura limpa por parte dos desenvolvedores.
3. Notei um pequeno deslize em sua implementação que poderia ser melhorado: o controller EmailSenderController deveria depender da abstração EmailSenderUseCase em vez da implementação EmailSenderService. Isso está mais alinhado com o princípio da inversão de dependência, que sugere depender de abstrações e não de implementações concretas.
como estudante de java, é muito bom encontrar conteúdo que não seja CRUD... mesmo assim, achei difícil toda essa lógica de interfaces de regras de negócio, interfaces de serviço. Mas é isso mesmo, tudo que é novidade incomoda rsrs... parabens Fernanda, e obrigado.
Fê, seus vídeos são excelentes. Aprendendo muito aqui. Muito obrigado e parabéns!
Só um dica: o tamanho da fonte do código no IntelliJ pode ser um pouco maior, já que tem bastante espaço vazio no lado direito da tela. Pra quem assiste ao vídeo em telas menores, aumentar o zoom de exibição ajuda bastante.
Acho que seria Interresante um video sobre o modulo web flux do spring
Boa Fê , sempre o conteúdo é bastante didático e já quero os testes unitários .
Valeuu @filipe222345 💜
Esse vídeo vai vir!!
Ótima aula Fernando, faz vídeo de testa pra gente por favor.. e se possível faz utilizando JUnit e Mockito..Muito obrigado
Oii Alexandre! Muito obrigado 💜
Soltei um vídeo há 2 dias sobre testes unitários. Assiste lá e me diz o que achou!
Espero que goste!
Bem bacana esse exemplo, foge um pouco dos tradicionais CRUD's, mas parece ser algo para Júniors mais experientes ou plenos
Por favor, faça um video que contenha o seguinte: API Rest + Testes Unitarios + Docker com Deploy na Nuvem (Railway ou outra plataforma).
Obrigado por compartilhar seu conhecimento!
Seu canal é top!!! Obrigado por compartilhar com a gente!!!
Conteúdo muito bom, parabens Fernanda, com certeza irá ajudar muita gente 🙏
Ótimo conteúdo Fernanda. Parabéns!!!!
Obrigada Jeff!
Lança pra nóssss esses Teste Unitários
Que bomm, @LoperaTw
Fico feliz que tenha gostado 💜
Esse vídeo vai sair sim!!
Se materia for fisica a gente deixa a torneira ligada, mas o sol pode queimar, muitos ratos aparecem voando
47:22 muito bom o Video, só fiquei com uma dúvida, não seria a interface do usecase que deveria ser usada no controller?
Realmente sou seu fã Fernanda, me diz o que tenho de fazer pra chegar ao seu nível, é que és mesmo muito boa naquilo que fazes
Show! Eu nunca ia saber interpretar esse teste.
Pequena sugestão: Seria interessante um video sobre Websockets com Spring ;)
realmente seria mt bom
Não entendi como o spring vai escolher qual e-mail gateway injetar caso exista mais de um implementado. É oque tiver a notação autowire?
Muito top seus vídeos, Por favor, faz a parte de testes unitários.
No momento que estou mandando esse comentário, estou no minuto 30:25, estou curtido, legal que você sabe explica as etapas e o porque esta sendo implementado de tal maneira, mas acredito que o segundo service não era necessário nesse caso, compreendo o que disse ta dahora o video.
Considerando que seus clients estão chamando a interface, as implementações precisarão respeitar essa interface, igual você anotou... Ai depois não seria apenas criar uma nova implementação pensada na outra infla, e com @Qualifier("") você apontava
?
Fico feliz que você esteja gostando, André 💜
Pois é, tem muita questão de projeto e arquitetura de solução. Às vezes um time vai preferir seguir uma estrutura diferente, e tá tudo bem, é questão de preferência.
Fê, por que não colocar a anotação @Autowired já na instanciação da dependência ao invés de criar um construtor para essa dependência?
Não entendo nada, sou consultor empresarial. Mas achei fascinante.
Obrigado pelo vídeo, faz mais!
Vou fazerr 💜
Eu não entendo nada do que ela fala, mas gosto de assistir me ajuda na facul de ADS
Olá. Não sei se fez em vídeos posteriores, mas você importou o Lombok para o projeto, e não usou. De repente seria legal mostrar para o pessoal como funcionaria a injeção de dependência por exemplo, sendo auxiliado pelo Lombok utilizando RequiredArgsConstructor a partir da definição das propriedades como final, você acabaria não precisando escrever essas injeções por construtor com o Autowired, e deixaria o código um pouco mais clean. No mais, sua didática é impressionante Fernanda, parabéns (:
Que conteúdo incrível, Fernanda! Obrigado por nos auxiliar tanto a entender esses conceitos mais complexos, sua didática é incrível!
Fiquei com uma dúvida em relação a interface de Gateway. Se fizermos o teste completo, implementando outro email provider, devemos implementar a mesma interface de gateway para essa nova implementação? Como o Java identifica qual o email provider que queremos utilizar?
Parabéns pelo conteúdo. Adoraria ver uma colab com as feras: Fernanda Kipper e Michelle Brito 🎉🎉🎉
Muito obrigadaa, @agnosantiago5517 💜
👀👀
Fernanda minha pacera, tem como fazer um vídeo falando de mTLS no Spring boot ?
Qualidade do vídeo tá monstra!!
Valeuu, Eric 💜
Okay, Injectou o EmailSenderService conhece o EmailSenderGateway e o Ses tem que implementar, dessa forma o Spring injecta automaticamente a classe, mas e se tiver outras classes que implementam o gateway ao mesmo tempo, como é que fica?
É possível ter mais de uma implementação, mas será necessário diferencia-lás. Há várias formas de fazer isso, uma delas é adicionar a anotação Qualifier com um nome único da implementação na definição da classe e usar a mesma anotação quando fizer a injeção de dependência do atributo que faz menção a interface. Recomendo a leitura do artigo Spring Bean Names do site Baeldung.
Só faltou a parte de failover que está no desafio, se um provider falhar tem que fazer fallback para outro e garantir HA.
queria ver algum algoritimo de circuit break =/..
Ja tentou implementar isso você mesmo ? Por que esperar por um vídeo ?
@@fabricioaraujo7642 já sim, seria legal para aprender outros approaches, até por que não trabalho com Java. E esse ponto estava no desafio
Show de bola. Por mim pode fazer o vídeo de junit tb!
Valeuu 💜
Ja prometi esse vídeo há tempo hahah vou gravar essa semana!
a velocidade que você fala e a didatica é perfeita c é muito fera pprt
Meus parabéns, continue dando aulas, ajuda muitooo. Tenho 19 anos e estou te acompanhando constantemente.
Uma dúvida, ali na parte do EmailSenderGateway eu tive que colocar o @Component, porque estava me dando um erro de "Could not autowire. No beans of 'EmailSenderGateway' type found"
E so dessa maneira que eu consegui resolver, porque o Spring não estava conseguindo achar o construtor, e ai que esta a minha pergunta, como que na tua aplicação funcionou kkk
Kkk mano entendi nada… mas é daora de ver parece aqueles hacker de filme falando 🤣🤣
Parabéns, muitooooo bom mesmo.
Muito obrigadaa, @leandropilz7996 💜
Ótimo vídeo, Fê! No caso da abstração entre os dois serviços daria para fazer com a interface e utilizar a anotação @Qualifier?
A documentação poderia ser feita usando o Swagger. É bem tranquilo.
Uma dúvida, se você tivesse que fazer alguma fazer uma validação de negocio. Digamos que a ubber tem uma lista de palavras proibidas no corpo do email. Essa validação teria que ficar ali no Core correto? Pois é parte do caso de uso. Como ficaria essa implementação?
Onde seria o lugar mais adequado para selecionar qual serviço de envio de email usar?
Essa câmera esculachou fer, topppp
hahahh muito obrigadaa, Gustavo 💜
Tivemos uma evolução!!
Seus vídeos são ótimos MDS ❤❤❤😮😮
Parabéns. Ótimo conteúdo!!!
Muito obrigadaa, @otnirodruigues2212 💜
É o clássico, segue todo o passo a passo e no fim da erro, até agora estou tentando entender isso.
KKKKKKK literalmente eu nesse momento
@@edmilsonferreira5204 man o código igual ao que foi ensinado kkk mas não roda. E pior, não tem um git pra comparar kkk
Oii, @mufinagamer
Adicionei o link do repositório na descrição, caso você queira dar uma olhada pra comparar com o seu projeto
me salvou!! obrigadin!@@kipperdev
@@edmilsonferreira5204 o erro estava na parte do regions, aparentemente o spring não conseguiu ler o arquivo "application.properties". Dai precisei por na mão as credentials e a region. No meu caso deu bom.
Oi gente!
Caso o meu Use Case fosse retornar algo, para um Presenter por exemplo, a classe EmailResponse que seria um DTO assim como o EmailResquet, onde ela ficaria, também no Core, ou seria um DTO da camada de Infra ou quem sabe da Application?
O meu Controller sendo da camada mais externa, por usar Framework, ele pode usar um DTO da camada mais interna Core "(por isso a minha dúvida)?
Opa, tudo bom? seus videos sao inspiradores. Me tire uma duvida, voce faz o teste antes e depois posta um video no youtube ou faz eles de primeira
Fê, enquanto fazia o projeto, decidi eu mesmo procurar onde encontrar a dependência, ao invés de copiar. Acontece que foi muito difícil encontrar, tantas versões, nenhuma documentação clara na AWS sobre a diferença entre as versões. Fui, então, com a versão mais recente. Só que a API mudou muuuuito! Eles passaram a utilizar um padrão diferente e achei muito mais verboso, confuso. Dito isso, queria sugerir:
1. O que acha de fazer um vídeo falando sobre onde encontrar e como navegar nesse mar de dependências que são publicados?
2. Analisar a atualização na api e mostrar como aprender a implementar quando a documentação é ruim.
Sei como é, Lucas!
Às vezes é muito chato pesquisar em algumas documentações pq é difícil entender o que estão querendo nos dizer, às vezes os exemplos são péssimos tbm.
Acho uma boa um vídeo falando disso, muito obrigado pela ideia 💜
Estou temdo dificuldade aqui com a dependencia da aws também, só confiando não funcionou, busquei a versão mais recente e também não está funcionando.
no pom está OK, não da erro nenhum, mas na hora de adicionar no condigo o intelij não acha a dependencia, e mesmo tentanto importar na mão, não esta dando certo.
Oii, @@joserodrigues5899
Tenta dar uma olhada no comentário que eu deixei pinado, parece ter ajudando o pessoal. Depois também dá uma olhada no repositório da solução que eu deixei no link do vídeo e compara com o seu projeto
@@kipperdev a noite vou dar uma olhada no repo, procurei ele mas não havia achado. Mais tarde procuro de novo e volto aqui caso consiga resolver.
Interessante a explicação!
conteúdo bom, obrigado, parabéns.
Boaaaaa, bons conteúdos!!
Olá, alguns milhões de anos depois, hoje estava fazendo este teste e me deparei com um erro: Error: Couldn't connect to server
Durante o teste, voce abriu o Insomnia nesta parte e não consegui fazer igual.
Excelente o vídeo! Mas uma dúvida, quando criamos uma service (ou controller e afins) e anotamos ela, o spring já não entende que o construtor já ganha um autowired por padrão? Ou você colocou essa última anotação só pra deixar explícito mesmo?
socorro alguem me ajuda, alguem tem o codigo fonte que ta rodando direito, o meu nao to conseguindo rodar
ta dando erro de conexao com.amazonaws.SdkClientException: Failed to connect to service endpoint:
Oii Nicolas, já conseguiu resolver?
Tenta mandar lá na comunidade do Discord. O pessoal é super parceiro e disposto a ajudar discord.gg/D5sStBByFr
Tivesse uma outra implementação além da AWS ficaria melhor o entendimento, eu acredito
amo seus vídeos :)
O negócio mesmo é no code, muito mais rápido, não precisa saber tantos detalhes técnicos. No code tem uma grande vantagem por ganhar tempo, o que as empresas mais precisam atualmente
a questão não é se é rápido codar ou não, mas sim a escalabilidade disso, como você implementaria uma escalabilidade para um sistema no-code para que tenha 2 milhões de requisições por SEGUNDO em um código gerado automaticamente? como você implementaria um sistema desses para fazer requisições para aws sem derrubar tudo por excesso de requisições ? Não dá. NoCode e LowCode existe a vários e vários anos, são muitas questões para colocar em jogo além do tempo de desenvolvimento de um projeto.
Um sistema no-low code gera um código já foi mastigado por um programador que projetou e implementou a plataforma, e você fica preso a isso.
@@riseunk0 elas são bastante adaptativas hoje em dia. Da pra fazer tudo e mais um pouco, esse é o futuro, é rápido. É isso que as empresas devem se preocupar, tempo, se demorarem pra entregar algo, ficam pra trás, por isso devem desenvolver cada vez mais rápido. O Banco do Brasil tem utilizado no code na maior parte dos seus sistemas atualmente por exemplo.
@@masterthug8647 Tente fazer um algoritmo de recomendação de produto simples, estilo de um e-commerce, se tiver alguma ideia de como implantar isso eu realmente quero saber.
@@masterthug8647 "O Banco do Brasil tem utilizado no code na maior parte dos seus sistemas atualmente por exemplo". De onde você tirou isso amigo?
@@riseunk0 ruclips.net/user/livez0W6smxaF4s?si=GZlG-6cC8xqoSwoj
Presta atenção
Fê, uma unica coisa que não entendi muito bem. No desafio do uber precisariamos implementar 2 serviços de envios de email atraves de um mesmo gateway, e caso um estivesse indisponivel, acionar o outro serviço.
Como que fariamos pra mudar o serviço de envio de emails usado como base sua disponibilidade? Por exemplo, caso o AWS SES estivesse indisponivel, como mudariamos para um mail gun?
Oii Lucas, ótimo comentário!
Eu faria de duas formas, uma é fazendo um fallback, exemplo:
Primeiro, tento bater na AWS SES
Se der exceção, então chamo o outro serviço tipo mailgun
É bem simples mas já funcionaria
Outra forma, seria ter uma forma de controlar o código remotamente, através de uma feature toggle por exemplo, o nosso código consumiria o valor dessa chave e então baseado nela ele iria decidir se usa o serviço AWS SES ou Mail Gun. E ai, a gente poderia ter um dashboard pra acompanhar a disponilidade dos serviços e fazer essa troca "ao vivo" caso notasse algum problema de disponibilidade, o problema é que ia precisar monitorar o tempo todo.
Tipo se(chaveEMAIL == true) então AWS SES
senão Mail Gun
Basicamente uma feature toggle é uma técnica que permite que a gente altere o comportamento do nosso sistema sem alterar o código. O valor dessas chaves fica salvo em algum serviço, tipo o Config Cat, e nosso código consume esse valor de lá através de uma requisição HTTP, e usa esse valor pra tomar uma decisão. E nós conseguimos alterar os valores através do portal da ferramenta, como se fosse um editor de texto mesmo, onde a gente pode mudar o valor que é enviado pro nosso código.
Eu implementei, funcionou, mas eu não entendi foi nada KKKKK
Vou assitir mais uma vez e pesquisar sobre o conceito Clean Arquiteture
O meu não funciona por nada kkk
Está dando um SkdClientException : Failed to connect to service endpoint
Olá, pessoal.
Tenho uma dúvida, se eu acompanhar o video e realizar em conjunto, no final eu posso colocar no meu github para mostrar o aprendizado? Ou não seria válido uma vez que foi feito seguindo a lógica de outra pessoa? No caso da Fernanda.
Obrigado!
Oii @daeja2198
Pode colocar sim!
Só é interessante você deixar claro no readme do repositório quando você tem uma aplicação que foi construida seguindo algum tutorial.
Mas não tem problema não, pode colocar!