Salve, beleza? Continuando essa saga aqui no Domain Dreaming Design, agora que nós temos o agregado de eventos e section e spot como filhos, na verdade até o spot é filho da sessão, como que vai se dar o relacionamento entre essas entidades. Eu tenho relacionamento também entre o spot e a sessão. Então, o que eu posso fazer? Vou criar aqui um sessions dentro de eventos com um event session array. Essa aqui seria a primeira situação que eu poderia imaginar. Estou criando um array de sessões do evento. Esse aqui é o dado primordial do JavaScript para poder trabalhar. Mas aqui vai um conselho do porquê que a gente não precisa usar, apenas não precisa, que não é uma obrigação. Usar diretamente um array no no caso do JavaScript, vai ser ruim, porque às vezes a gente precisa de ter uma proteção nisso aqui para evitar que seções repetidas sejam inseridas aqui. O array é uma estrutura muito básica. A gente tem outras estruturas de armazenamento de coleções de dados que vão nos dar mais recursos para poder operacionalizar esses dados. Então, é isso que você deve ver na sua linguagem de programação. Toda linguagem de programação lá vai ter alguma estrutura diferenciada. Python, Java, C Sharp e etc. Tente procurar essas estruturas. Até é interessante de você observar, C Sharp, etc. Tente procurar essas estruturas. É até interessante de você observar, às vezes, o ORM, qual é a estrutura de dados da linguagem que ele está utilizando. Ah, ele está utilizando, no caso do Java, um ArrayList, ou um List, então normalmente é usado. Verifique para o Python e para outras linguagens também. Então, aqui no caso, é muito melhor que a gente utilize um set do JavaScript. A gente pode até iniciar ele com um vazio, um vazio, porque aí na hora que eu vou fazer um sections add, é só tentar adicionar dois objetos que a referência deles são iguais, ele não vai permitir, e é muito simples que a gente faça também em for e coisas do tipo, E é muito simples que a gente faça também em Forza e coisas do tipo, e capture até as keys. É uma estrutura de dados que vai nos dar mais controle. Então, eu posso colocar aqui no meu construtor também, que vou receber a sessão aqui, mas não precisa ser obrigatório no construtor, eu já quero passar todas as sessões, essa é a questão, a gente pode lidar com uma outra operação para justamente eu vou ter que em algum momento separado permitir que se adicione sessões então não preciso fazer tudo no construtor essa visão que a gente vai não tendo quando a gente trabalha muito com os ORMs então aqui eu vejo se eu tenho sessão, na verdade eu nem preciso fazer um new aqui em cima, porque no construtor sempre a gente está verificando se tem sections, aí eu crio um vazio ali, beleza Vou fazer um new aqui em cima, né? Porque no consultor sempre a gente está verificando se tem sections. Aí eu crio um vazio ali. Beleza. Então, a mesma história a gente vai fazer com os spots na seção. Então, vamos lá. Aqui vem os spots, os lugares e event spot. Aí aqui em cima, no create não, no construtor, que a gente tem que permitir a hidratação dessa entidade, eu coloco aqui e tenho ali a minha lógica. Aí você começa a se perguntar assim, mas dentro de sessão e dentro de spot, por exemplo, dentro de spot eu não deveria ter um section ID para poder delimitar o relacionamento dele com a sessão? E aqui dentro de section eu não deveria ter um event ID para poder delimitar o meu relacionamento dele com a sessão, e aqui dentro de section, eu não deveria ter um event ID para poder delimitar o meu relacionamento com o evento? Isso aqui é mais algo do ORM que ele está utilizando ali por conta do banco de dados, ou porque tem que ter mesmo na sua modelagem? Você já se perguntou por isso? Porque aqui na nossa modelagem, como sessão e event spot está dentro protegido pelo próprio evento, isso aqui não tem necessidade nenhuma nenhuma mesmo tá então, a gente tem que na verdade é ficar desvacinado pelos ORMs é perder esse vício, não tem necessidade isso é apenas uma necessidade para controlar ali a chave estrangeira. Vamos criar um testezinho aqui para poder brincar com esse evento. Então, tenho aqui event entity. Deve criar um evento. Posso tirar esses dois aqui de cima. Então, agora, quando eu quiser criar um evento, a gente vai precisar, na verdade, quando importar, porque eu não importei. O evento tem que tomar cuidado, porque o Node tem uma classe evento também. Então se você não importa, você vai estranhar que os dados não foram passados. Então vamos supor que eu esteja criando aqui o evento 1 com a data tal, descrição... não precisaria passar mas eu vou passar. E o último dado aqui que eu tenho que fazer é passar um PartnerId e posso simplesmente fazer um new PartnerId. Então vamos ver aqui o que vai ser mostrado. Então está aqui o meu evento. Tem lá o id que é um objeto de valor, o PartnerId e Sections, que é um set, que é uma estrutura de dados do próprio JavaScript. Aí, para poder adicionar a seção, eu vou acessar e fazer dessa forma aqui? Não, tá? Não. O que você sai fazer dessa forma aqui? Não, tá? Não. Porque isso aqui representa anemia de domínio. Eu tenho que ter uma operação que tenha um significado. E também já vai outra dica, outra reflexão sobre a questão de getter e setter. Aqui no JavaScript, eu não estou fazendo porque não tem necessidade e talvez em alguma outra linguagem valha a pena, inclusive vale a pena até pelo comportamento, às vezes, do RM que você vai querer utilizar. Setter e getter também não é regra de negócio. Você está apenas fazendo um encapsulamento no campo, aquilo não representa um processo de negócio que você tenha que fazer. Então, tudo que a gente vai manipular aqui nas nossas entidades, sempre, sempre vai ser por operação. Mas vamos fazer aqui uma section só para validar esse comportamento aqui. Para criar uma sessão. Eu tenho que importar primeiro a sessão. E aí eu tenho. Na verdade, eu acho que é melhor fazer pelo create, porque tem muito dado ali e eu não preciso de todos aqueles dados. Então, tem o nome da sessão, a descrição, total de spots, a gente não está fazendo nada ainda para poder gerar os spots e o preço. Vamos colocar que o ingresso do show aqui é mil e está faltando mais o que aqui? Ele está chiando. Ah, que eu não tenho que ter um mil aqui. Maravilha. Então só para ver aqui esse comportamento acontecendo, vamos fazer na verdade um addSession que seria a operação, mas a gente vai criar ela depois. Está aqui o addSession, pode fazer um Console.log Está aqui dentro do set, o ID que foi gerado, a gente não passou, as outras informações, total de spots 100, total de spots reservados 0, esse 1000, e vamos gerar pelo menos um spotzinho aqui, event spot, o legal do event spot é que não tem que passar nada, eu pegaria ali aquela seção e faria um Spot Edge. O console.log vai conseguir mostrar tudo? Eu teria que usar o console.dir ali para poder mostrar tudo, mas eu tenho ali um set que foi adicionado lá. Uma coisa que pode ser melhorada aqui no 2JSON, nós podemos adicionar aqui... O Copilot já fez o que eu queria, que é justamente pegar cada seção. Isso aqui é uma forma de a gente converter o set para um array convencional, faz ali o map e converte para 2JSON. Então, lá dentro do section, eu posso fazer a mesma coisa. Então, isso aqui é legal porque você tem um agregado complexo, quer ver ali todos os dados, você faz um 2JSON. Então, aqui na hora de fazer um 2JSON, a gente vai ter uma resposta eu acredito um pouco melhor aqui no console.log, apesar que no caso do spots ele não vai mostrar, eu teria que usar um console.dir, eu poderia passar aqui um console.dir com acho que é o ele não está me dando... É o def. Um def nível. Isso aqui é para avaliar o nível de complexidade que eu quero que seja mostrado. Ele vai mostrar tudo aqui. Eu coloquei um def, um valor bem alto. Então, está lá o meu spot. Show de bola. Então, lembre-se. Você não precisa passar esse ID aqui dentro. Isso é coisa de ORM. Ah, mas o meu ORM define que eu tenho que ter aqui uma informação aqui dentro. Essa informação pode muito bem ficar oculta no seu objeto. E tem vários modos de a gente trabalhar com isso. Depois, na hora que a gente integrar com o ORM, nós vamos ver essa questão. Show de bola. Agora, vamos começar com as operações em cima aqui do nosso agregado para que a gente possa criar as nossas regras de negócio. Então, é isso aí. E até a próxima.