Salve, beleza? Continuamos essa saga aqui no Domain Dreaming Design. Agora nós vamos testar a criação da order. Nós temos várias regras de negócio acontecendo ali. Eu já trouxe o teste para que a gente possa brincar, que é o método mais rápido aqui para a gente poder ver se está funcionando ou não. Então, eu já criei algumas coisas aqui, como a instância do próprio MicroRM, também o Entity Manager, a nossa instância do próprio MicroRM, também o Entity Manager, a nossa instância do Unit of Work, que até está sendo usada aqui embaixo. Mas, a princípio, a gente precisa criar um Customer, um Partner e um Evento. Então, eu tenho aqui os três repositórios. Aqui é a criação do Customer, com dados simples, do Partner também. Inicia-se o evento, adiciona aqui e poderia até chamar o unit of work flush, mas estou chamando melhor, entity manager flush, estou chamando o commit que no final das contas vai fazer a mesma coisa porque ele está recebendo ali o entity manager então, uma vez que eu tenho isso aqui também eu preciso fazer outras coisas no evento como de outras coisas não somente mais uma coisa que adicionar a sessão eu preciso de ter pelo menos uma sessão ali a descrição a gente precisa do preço vou colocar 100 reais e o total de spots deixa como 1000. Beleza. Aí ele vai salvar tudo bonitinho ali, vamos só rodar o teste novamente para ver se não tem nenhum problema, show de bola. Eu não fiz a publicação do evento. Ele está com o Expublished Falsos, a sessão e os spots também. Então, vamos fazer aqui agora um teste do Order Service. Eu criaria ele lá em cima. Eu vou criar ele aqui embaixo. Então, a gente vai ter aqui o Order Service. Esse é a instância de New Order Service. vamos criar ele aqui embaixo? Então a gente vai ter aqui o orderService essa é a instância de new orderService, a gente vai precisar do orderRepo que é a primeira coisa que eu deveria ter criado aqui, o comparator já vai me ajudar então vou importar no repositório, então vai, vai lá. Primeira coisa, o order repo. Depois, o customer repo. Depois, o event repo. Aí, nós temos também o repositório do spot reservation. Então, spot reservation repo. Nosso serviço, como a gente já fez ali na modelagem, estava claro o número de dependências. Ele acaba dependendo de todo mundo que está ali abaixo. Então, Spot Reservation e o último é o Unit of Work, não é isso mesmo? Certo. Então, agora, nós temos que chamar o OrderService.create e eu tenho que passar o ID do evento, o ID da sessão, que eu posso pegar ali a posição 0. A gente consegue pegar a posição 0 dessa forma aqui. E o que ele está achando em relação ao id? Ah tá, porque aqui precisa ser o ponto value e aqui também, porque a gente vai passar o valor por ali, não é o objeto de valor, então tem que tomar cuidado. A mesma coisa vale para o Customer e o Spot. A gente está pegando aqui dessa forma, né? Zero. Se não funcionar aqui dessa forma, vamos até antes fazer aqui uma avaliação, antes de testar se a gente consegue pegar o valor de testar se a gente consegue pegar o valor dessa forma aqui, que eu estou achando que o Spot ID para ver se ele está disponível. Deixa de bola, então. Vamos realizar aqui o nosso teste colocando um Await aqui. Provavelmente ele tem que dar uma zica. Até o meu octa.gest já deu uma zica aqui, mas eu quero ver a zica no meu terminal. Olha, deu um erro ali. Falando que o spot não está disponível. Justamente naquele método nosso de validação. Então, vamos fazer aqui a mudança na nossa seção. Eu tenho que fazer um Publish All para... Imagino que seja isso, mas de qualquer forma a gente tinha que fazer, mas um erro pode ser outro. Vamos ver aqui agora. Na aqui, a gente tem um erro a gente está tentando fazer um Spot Reservation e será que eu coloquei o esquema dele ali? Na verdade a gente está fazendo aqui uma coisa errada no repositório do spot reservation que a gente está buscando pelo id. Isso aqui está errado porque a gente não tem ID nele. Nós temos Spot ID. Acho que é até legal colocar aqui um Spot ID para deixar bem claro qual o tipo do campo que nós estamos trabalhando. Então, beleza. Deixa eu ver se o teste já quebrou vamos executar novamente e agora ele falou que o spot já está reservado o Spot já está reservado, a gente está buscando pela entidade correta até achei que era o SpotAid que a gente estava buscando aqui, ou melhor, com o Event Spot mas na verdade não. Olhando aqui na lógica do otherService, o que eu esqueci de fazer aqui? A wait, velho a wait. Vamos executar de novo, deixa eu só ver se no meu terminal aqui tinha algum teste preso. pronto o que que ele fez aqui, parece que ele rejeitou de alguma maneira a minha execução qual linha que ele executou aqui do order service ele chegou aqui no Qual linha que ele executou aqui do Order Service? Ele chegou aqui no... Que é do teste. Aqui do Order Service... Ela foi abortada por algum motivo. É que ele não está mostrando nenhuma linha específica, mas está mostrando aqui. Aqui, né? Que é princípio aqui, se a gente fizer o comentário dessa parte, não dá problema. Então, essa execução daqui para cima está correta, alguma coisa no otherService que ainda a gente não conseguiu identificar. Mais uma vez era um await faltando, estava faltando um await aqui no commit, ele iria tentar processar isso depois que o microRM já foi fechado, ia acontecer depois do close aqui, agora ao executar, nós vamos ter aqui o sucesso. Então, não temos nenhum erro. Aí é um teste bem simples para ver se isso aqui está funcionando. Eu posso chamar mais uma vez essa mesma linha. Estou tentando fazer uma reserva com a reserva já feita. Então... eu estou tentando fazer uma reserva com a reserva já feita. Então, ele vai mostrar ali que a gente já tem uma reserva feita. Mas, além disso, a gente poderia acrescentar aqui uma regra que está faltando acrescentar aqui uma regra que está faltando depois de fazer a transação, no próprio evento, que eu posso marcar ele como reservado, na verdade, aquele lugar específico. A gente vai fazer essa operação aqui depois do edge, e ela está sobre o controle transacional do Unit of Work. Isso aqui vai servir para a gente poder marcar. Então, deixa eu pegar essa operação aqui. Dentro do agregado, a gente pode ter a operação de marcar o Spot como reservado. Passo o ID da sessão do Spot, busco a sessão em questão, inclusive a gente pode até, fiz aqui uma validação, se tiver, se a sessão não existir, vai lançar um erro ali e dentro da sessão que a gente faz o código que vai marcar então deixa eu pegar o código aqui event session aí aqui eu recebo o ID do spot busco ele, se ele não existir se ele estiver reservado eu falo que ele já está reservado inclusive, então isso aqui é mais uma outra verificação que é importante, eu não posso marcar como reservado se ele já está como reservado. E aí dentro do spot, a gente marca ele como reservado de fato. Então aqui, event spot, e aqui é marcar como reservado, que é a operação que a gente não tinha ainda, que tinha marcar como publicado. Então aqui no final do nosso processamento, a gente criou uma order, criou o spot reservation e alterou o evento. E nesse caso aqui, eu não posso esquecer de pegar o this event repo add para que ele faça a alteração também. Eu tirei o meu teste daqui do jogo. Tirei. Então vamos executar novamente. já deu o... eu estava dando o erro já antes, mas vou deixar isso aqui comentado, que vocês podem brincar depois e fazer também outros testes. Pronto. Depois eu tenho que tirar esses console logs também. Então nós conseguimos fazer a nossa operação. Claro que isso aqui é apenas um teste bem simples para ver se o order test está funcionando. A gente precisaria fazer, se eu quisesse trabalhar com testes automatizados, fazer alguns outros tipos de testes e etc. Mas está aqui uma regra de negócio mais complexa, como que a gente vai usando o repositório, vai usando os agregados no meio de uma operação aqui de um application service, pessoal. Então, vamos continuar nossa saga. É isso aí e até a próxima.