Salve, Deus, beleza? Continua nossa saga aqui no Domain Dreaming Design. Agora vamos brincar com o evento, porque ele é um agregado complexo. E a gente vai ver aqui se está tudo ok, se ele vai conseguir persistir tudo nessa aula. Inclusive, eu vou deixar aquele debug true, porque ele faz... a mostragem ali de todos os queries, de tudo que está sendo executado. É bom que a gente vê todo o processo que está acontecendo. Então, a gente tem aqui o nosso evento. Eu vou fazer aqui um run. Aqui para cima, ele vai fazer as verificações. As tabelas existem, mas ele vai fazer ali as verificações, essas tabelas existem, mas olha, ele vai criar o parceiro, o evento, o event session, o event spot, tem a adição ali das chaves estrangeiras, ele tá até desativando ali o o keychecks do MySQL para ele poder manipular essas chaves. Aí ele fez a inserção de partner e depois do evento. Vejam que tem um begin e um commit. e um commit. Ou seja, somente quando esse flushing ele é desencadeado, que de fato ele vai fazer todas as operações, mas ele usa o modo transação. Então se eu tiver 10 inserts, mais 10 updates e mais um monte de deletes para poder executar, ele executa tudo de uma vez, ele não executa passa um tempo ali, executa mais outro código nosso, não ele manda tudo de uma vez por isso que esse Granted Off Work é eficiente porque a gente não precisa se preocupar com o modo transação a princípio e ele não fica acessando, fazendo a comunicação com o banco de forma desnecessária. Então, já aconteceu o primeiro passo. Agora, vamos pegar aqui, eu não preciso fazer o add para depois fazer a adição de uma sessão, toda operação pode acontecer antes aqui. Ele tem que conseguir adicionar tudo. Então vamos fazer um AddSession. Eu tenho o nome da sessão, a descrição dela, o preço é 100 e o total também. Vamos colocar até um número maior para ver como ele vai lidar com esse processo. Então de adicionar a sessão, ele vai criar a sessão e vai criar os spots baseados no número de spots que eu adicionei. Ao fazer aqui a nossa... A gente vai ver que, na verdade, ele não vai fazer um insert para cada spot. Ele vai fazer um insert só, ele é inteligente. Então, olha que interessante. Ele delimitou os campos e no values eu posso passar uma leva de registros. Então ele passou os mil registros foi mil que eu coloquei? Foi mil. Então nós temos aqui todos os nossos registros todos os nossos registros. É muita coisa, né? Eu acho que no log não vai... não sei nem se ele vai aguentar. A gente já vê que foi adicionado. Mas a questão é ver se ele está puxando isso do banco de dados. Ele está enviando, certo? Mas a gente não sabe se vai ser hidratado bonitinho. Então vamos fazer aqui um clear. É a primeira vez que a gente vai fazer esse teste. Agora eu posso fazer um findById até usando o que a gente já construiu do repositório. Posso passar aqui tanto o objeto de valor como a string. Então, eu tenho aqui, na verdade, eu coloco event from ripple, vou colocar event found, e aí a gente coloca aqui um... Eu vou desativar o debug agora, senão ele vai mostrar muita coisa e a gente não vai conseguir nem ver, vai ficar bem difícil. E ao invés de usar o log aqui, eu vou usar o dir. Eu posso passar o evento aqui e eu vou colocar, sei lá, acho que não precisa disso tudo, mas um def de mil, porque ele vai mostrar, pelo menos vai mostrar alguma coisa ali dos spots, que é interessante que a gente veja. Então, nós estamos fazendo o clear do unit of work, ele não vai ter nenhum objeto na memória, ele vai consultar mesmo do banco de dados. Então, vamos ver aqui, olha os spots. Esses IDs aqui representam o índice do elemento, porque nós temos uma coleção e eles estão sendo indexados. Eu acho que a gente não vai conseguir ver... Bom, a gente já viu aqui alguns. Vamos rodar somente com o console.log, que a gente consegue ver a seção e... Tem os spots lá. Então, olha só, temos o ID aqui do evento, as seções que é uma só, que é a posição 0, e aqui a gente vê a incidência... A gente vê que o microRM está fazendo as modificações dele. Inclusive tem aqui a questão do Partner ID que ele está colocando ele está colocando dessa forma aqui, e a gente tem que fazer um ajuste, porque ele não está preenchendo com objetos de valor. A gente fez essa lógica aqui, aqui. Lembrando que o tipo que nós criamos para o acionamento não vai funcionar, mas ele deveria aqui, por causa do construtor... Será que eu estou forçando o construtor? O construtor está sendo forçado aqui. Ele deveria... Aqui a gente tem o EventSessionID. Olha o EventID aqui. Ele está fazendo parte do objeto, mas a gente não vê ele ali na programação, mas acaba sendo adicionado. A gente não precisa se preocupar com ele. Agora o partner aqui que está errado. Eu tinha esquecido de passar uma configuração aqui no esquema. Até bom que aconteceu aquele errinho ali que fica registrado aí no vídeo para ninguém esquecer. Também vai ficar aí no commit. Eu tenho que passar um inherited no relacionamento. Isso aqui é usado quando a gente está trabalhando com superclasses ele vai ter o efeito aqui que o microRM não vai aplicar ele acaba fazendo por debaixo dos panos assim, ele vai fazer lá um object define property property não, ele vai acessar o objeto, vamos supor que eu tenha lá o meu id, aí ele vai acabar colocando um set um get, que é uma outra forma da gente fazer, então ele acaba subscrevendo o comportamento ali do nosso campo, então isso aqui faz com que quando ele vê que tem isso aqui, ele não vai ele vê que tem isso aqui, ele não vai fazer essa hidratação e aí a hidratação vai ser feita diretamente aqui pelo nosso construtor. Então vamos pegar aqui novamente o nosso teste eu tinha até feito desabilitar aqui da sessão, vamos lá está aqui hidratadinho ali, bonitinho uma coisa também que a gente pode fazer então para ficar claro essa questão aqui eu não preciso passar isso no Event ID, porque eu não estou utilizando esse cara. E no Event Session ID também, no Spot também, que eu não estou utilizando. Quando a gente está manipulando o relacionamento, que é o MainIt1, eu preciso passar isso aqui. Ótimo, a gente já conseguiu fazer agora, demonstrando aqui um agregado, como que ele é carregado completamente e também salvo completamente. Isso aqui não tem preço. Isso aqui que dá produtividade, porque não tem que ficar mapeando. Quando a gente olha lá para o repositório, as preocupações aqui são como que a gente vai, às vezes, administrar alguma coisa mais avançada, porque o Entity Manager, quando a gente tem esse conjunto, DataMap, Entity Manager e Unit of Work, ele já faz todo esse trabalho de tanto mapeamento e etc. que a gente não teria com as outras Libs. Então, a gente fecha isso aqui e serve como exemplo para qualquer tipo de agregado que você for fazer. E fica aqui a lição que você tem que dar uma olhada no seu ORM que você está utilizando. Dependendo do ORM, isso aqui já pode estar muito maduro, você até precisa de menos configurações ainda para poder trabalhar, em outros você precisa fazer alguns ajustes. Normalmente, ali na documentação do seu ORM, você já consegue ter esse conhecimento. Então, vamos agora para o próximo capítulo. A gente vai trabalhar com aplicação, a camada de aplicação da nossa aplicação. Então, é isso aí. E até a próxima.