Salve Deus, beleza? Continuamos essa saga aqui no Domain Dreaming e Design. Agora que a gente já tem gerenciador de eventos, nosso Application Service que gerencia o ciclo de vida de um processo de negócios, chegou a hora da gente testar e ver isso funcionando na prática. E claro que a gente precisa ter um listener para poder fazer isso funcionar. Mas antes de tudo, a gente precisa adaptar. Eu já quero testar logo com o Nest. Então, a gente vai fazer o seguinte. A gente teria que colocar essa parte aqui dos eventos. Seria interessante talvez criar um módulo no Nest para os eventos de domínio. Então vamos gerar aqui um módulo que eu vou chamar de Domain Events. Vai ser um novo módulo do nosso projeto. Está aqui. Então nesse camaradinha aqui eu posso separar muito bem, porque ele vai ser reutilizado pelos outros projetos. Eu vou colocar aqui que é para ele prover o Domain Event Manager. Esse módulo vai ser global, porque esse Domain Event Manager vai ser usado por toda a nossa aplicação. Eu tenho que colocar um exports aqui... Para os outros módulos conseguirem injetá-lo... Como dependência... Show de bola... Agora... O que eu poderia... Fazer aqui... Uma vez que eu tenho já... Esse cara em efeito... Se eu tivesse também pelo menos um módulo de aplicação, seria interessante eu ter um módulo de application também. Então, eu vou criar aquiódulo de application também. Então, vou criar aqui um nesting generate module. Application, porque a gente vai registrar aqui também. Eu crio esses módulos separados porque, a princípio, tem pouquíssimas coisas, mas ele vai acabar crescendo. Então, a gente vai ter aqui providers, mais uma vez. Eu quero que ele proveja. Vou colocar assim. Um application service. Nesse caso, a gente precisa usar uma factory para que a gente consiga configurar a instância corretamente. Então vamos lá, a gente vai retornar aqui um new application service, e a gente vai precisar como parâmetro aqui do primeiro, do unit of work, depois do Domain Event Manager. Então vamos colocar aqui o I Unit of Work e depois o Domain Event Manager, pode ser a referência da própria classe que a gente registrou ela assim. Então, aqui eu recebo o meu UO, que é do tipo a Unit of Work, e o Domain Event Manager, que é do tipo Domain Event Manager. Estou tipando aqui, para a gente poder trabalhar de forma oficial. Então, passamos os dois. Beleza, então eu tenho aqui o meu applicationService. Eu tenho que lembrar de exportá-lo. Estou de bola. Ele vai ser global também? Na verdade, ele não precisa ser global. Nesse caso aqui. Ele pode ser criado sempre. Aí que está a diferença da gente saber que no caso do Nest e em outros frameworks também vai ser a mesma coisa. Se o seu serviço é shared, ou seja, se ele é criado e compartilhado por todo mundo que quer usar. Ou se ele pode ser reutilizável através dos módulos. Então, esse application aqui, a gente vai colocar ele... Porque nem todo módulo vai usar esse application service. Eu vou colocar ele aqui, applicationModule. Maravilha. Aí agora o nosso partnerService, ele vai precisar, agora ele mudou, ele precisa receber o applicationService como segundo parâmetro, então aqui vai ser o appService do tipo applicationService, que ainda tem um serviço do próprio Nestle quando ele cria o projeto lá, que é esse carinha aqui, a gente não está falando desse cara. Então aqui passa o appService, e aqui vai ser appService. Beleza. Vamos rodar para ver se está tudo ok aqui. Vamos ver se não tem antes da gente continuar. No princípio tudo ok. A gente pode... consultar aqui os... e tentar criar mais um aqui. Vamos ver se ele vai conseguir criar. A nossa criação continua funcionando, né? Então, não teve nenhuma mudança. Agora, como a gente faz para registrar os ouvintes? É isso que a gente tem que acabar fazendo. Vou tirar tudo aqui e aí a gente faz isso no próprio módulo interessado, porque tem que ter um lugar central para a gente poder fazer esse registro. Então, aqui no próprio módulo, aqui embaixo nele, muitas vezes a gente não vê os módulos sendo utilizados. A classe do módulo, eu posso utilizar ela aqui para poder fazer coisas quando esse módulo inicia. Então, a gente vai receber aqui, eu posso colocar como o Domain Event Manager é um serviço global, ele tem que ser global e único, porque ele precisa centralizar os eventos. Não dá para a gente ficar criando ele por módulo, não shared, ele tem que ser shared, porque eu posso ter outros módulos também aqui interessados nesses eventos que vão acontecer. Então, eu quero usar esse domain event manager para que no ciclo de vida do meu módulo, colocando esse onLoginInit, deixa eu até mostrar aqui em cima onde ele vai importar, aqui em cima onde ele vai importar, aqui em cima do próprio nest, ele vai exigir que a gente implemente um método nesse módulo, que é um module init. Então, aqui dentro, nós podemos pegar o nosso domain event manager, fazer um redditor. Eu quero registrar o que, por exemplo? A gente pode querer pegar o partner created.name para poder pegar o nome da classe. E aqui eu tenho o meu render. Então eu vou receber aqui o meu event, que é do mesmo tipo. E nesse caso aqui eu vou fazer um console.log. Pode ser assim, ah, recebeu o evento e tal. O registro aqui não tem nenhuma promessa nem nada. Então já está ótimo isso aqui que a gente fez. Então quando iniciar ali, ele já vai estar registrado. Inclusive, eu vou até colocar aqui. Events module inicializado. De bola. Está aí uma mensagenzinha. Então, agora vamos criar aqui o evento. Ou melhor, criar um partner. Criou o partner. E olha só quem está aqui. O nosso evento. Então, eu tenho o aggregate ID, o nome, a versão do evento e a data que foi gerada aqui no momento. Então, pronto. Isso aqui é um handler que a gente já teve acesso bem simples claro a gente poderia criar uma classe mais bem formalizada mas a dinâmica é essa em algum lugar no caso do nest nos módulos que a gente faria isso se registra todo mundo ali e aí eu tenho aqui os meus handlers para poder lidar, inclusive eles podem ser assíncronos, eu posso colocar eSync aqui e processar outras coisas. Na próxima aula a gente vai criar algo mais formalizado para entender esse listener, como que ele pode trabalhar e como que seria interessante fazer a integração aqui de uma classe mais formalizada com o Nest. Então, pessoal, é isso aí, e até a próxima.