Salve, Deus, beleza? Continuamos essa saga aqui no Domain Dream Design. Agora vamos falar sobre o pagamento, uma vez que a gente já contornou ali a nossa transação do pedido, da reserva, está devidamente protegida, agora a gente vai agregar com pagamento. Eu não quero pegar aqui um pagamento real, algo do tipo, isso aí é basicamente programação com alguma API, você faz ali alguma requisição e pronto. Mas eu quero falar aqui de um conceito muito importante que é usado no domain de design, que é a ACL, ou Anti-Corruption Layer, que está presente lá nos mapas de contexto. Muitas vezes, quando eu tenho a comunicação entre dois subdomínios, e vamos imaginar que esse domínio de pagamento é um domínio externo, é um domínio genérico que a gente está usando ali, que a gente pode trocar por qualquer empresa que forneça o que a gente queira. Nós temos essa relação cliente-fornecedor, mas a gente tem que se conformar, a gente tem que ser conformista, porque o meio de pagamento lá, principalmente o meio de pagamento muito grande, não vai fazer nenhuma modificação, alguma adaptação que a gente queira. Isso tem que ficar muito claro. Então, algo que a gente não vai querer no nosso subdomínio aqui de eventos é que haja um vazamento, um transbordo desse domínio externo, esse domínio genérico para o nosso subdomínio, corrompendo-o. Então, a própria palavra já diz exatamente o que é o objetivo desse ACL. A gente vai criar uma camada anticorrupção para que a corrupção fique nessa camada e não transborde para a nossa. nessa camada e não transborde para a nossa. E às vezes pode ser difícil entender essa anti-corruption lei ali, como que a gente vai fazer a implementação, mas na verdade a gente já faz isso o tempo inteiro quando a gente trabalha com orientação a objetos. E nós estamos trabalhando com o conceito de inversão de dependência. Inversão de dependência é um tipo de SL que nós estamos criando uma interface para não ficar preso numa implementação e essa implementação corromper, a gente não ficar acoplado a ela. Então, um método de pagamento para que ele seja devidamente adequado aqui aos nossos desejos, ele deve ser uma interface ou uma classe que trabalhe com interfaces. Eu poderia ter, por exemplo, aqui um Private IPayPal da vida. Ou eu poderia ter também um Private iStripe. Pronto, eu tenho esses dois métodos aqui, essas duas interfaces, inclusive, e aí a gente escolhe como que vai ser pago, porque aqui eu estou imaginando ainda um anti-corruption lei que pode ser um pequeno sistema que você desenvolve. A gente conseguiria verificar aqui se algum deles está com uma latência que não é aceitável, poderia ter mais de um. E esse sistema grava ali qual que eu deveria usar no momento, mas ele já está fazendo um teste para os outros. Olha só que interessante, a gente poderia fazer algo totalmente nesse sentido. Não vou usar essa abordagem aqui no curso, não é esse intuito aqui no MBA. Mas aqui no método de pagamento, enfim, com toda a nossa inteligência, a gente vai realizar ali o pagamento passando um token do cartão de crédito, a gente não vai manipular o cartão de crédito, e o amount que tem que ser pago. Pronto. Isso aí já vai funcionar com qualquer meio de pagamento hoje em dia. Então, eu chamei esse cara de Payment Gateway, porque Gateway é um nome que normalmente é usado quando a gente quer tratar de algo externo, então esse cara aqui que é o nosso anti-corruption layer mas num nível mais apurado a gente poderia até criar uma façade que vai ter os seus usar o Design Partner Façade pra poder compor ali esses vários métodos de pagamento. A gente só, na verdade, está usando o cartão de crédito ali, segundo o que os domain experts nos disseram, mas eu posso também compor os vários gates externos que nós estamos utilizando, enfim. Mas a questão é que nós vamos... baixar esse cara para cá também. Então, eu vou colocar, depois do Unit of Work, então está aqui o meu Payment Gateway. Então, no final das contas, essa camada anti-corrupção, ela envolve você ter uma classe ou uma interface e aí você vai criando ali as camadas necessárias. Não existe necessariamente um número, mas imagine como se você estivesse criando um mini sistema. Então, aqui eu recebo o meu Payment Gateway. E o que a gente vai receber aqui também? A gente precisa receber aqui também? A gente precisa receber o... O que eu vou chamar de Card Token, que vai ser uma String. Isso é gerado lá pelo próprio cliente. E aí, a gente faz o nosso pagamento aqui. Então, this Payment Gateway. Payment, passando. Inclusive, tem que ser depois da sessão, porque eu tenho o valor do que eu tenho, estou comprando da sessão. Então, beleza. Aqui, na verdade, eu tinha falado na aula passada que a gente poderia ter um erro aqui e teria que fazer o tratamento, mas dessa forma que a gente já colocou aqui genérica, nós estamos criando a order também, mesmo que o pagamento não ocorreu, uma ordem cancelada. E aqui eu já vou adicionar uma outra regra de negócio, que depois que eu criar o meu pagamento, que depois que eu criar o meu pagamento, criar a minha order aqui, essa order já está sendo, já está paga, porque a gente já teve o sucesso aqui. Se acontecer qualquer problema, ele veio para cá, vai criar uma order cancelada e aconteceu um problema ao reservar o seu lugar. E teria que ter aqui as sofisticações e um pouco mais de esmero para a gente poder rastrear determinados tipos de erros e ser transparente para o usuário. O seu cartão que não deu certo, apesar que aqui para cima a gente já está fazendo as validações se o spot está disponível ou não, que para a bachilha é importante saber o porquê. Aí vem aqui a questão de saber qual é o tipo de erro que nós estamos lidando aqui. Eu virei aqui alguns ínfis ou um método para poder fazer esse tratamento de erro aqui. Vamos só executar o método de teste aqui para finalizar a nossa questão, o Spot Reservation, e as duas others que foram geradas, pessoal. Então, está aqui a questão do pagamento e toda essa ideia que você poderia implementar, se vocês quiserem fazer uma PR, criar alguma ideia aqui, estão super convidados. Mas a gente fecha essa nossa aplicação e olha o tanto de coisas que nós já criamos. Agora a gente vai para poder fazer a integração aqui com o Nest e também para poder finalizar com os eventos de domínio. Então vamos seguindo a nossa saga, é isso aí e até a próxima.