Para que eu tenha isso, eu vou usar um princípio. Esse princípio é conhecido como Dependency Inversion Principle, que diz o seguinte. High-level modules, eu vou colocar aqui, componentes de alto nível não devem depender de componentes de baixo nível. Eles devem depender de abstrações. O que a gente faz, então? Esse nil aqui não poderia acontecer. Esse nil nos amarra, esse new nos impede. Então, eu vou dizer o seguinte, eu vou injetar essa dependência. Constructor, read-only, olha que legal. Contract repository. Contract repository. E repository? Não sei. Apaguei essa linha, usei this. Olha o que é a inversão o normal seria fazer um livro invertendo eu passo de fora para passar de fora que eu faço daí bom de cabeça que eu tenho aí o copiar e colar? Fazer um negócio aqui para facilitar mais ainda. Calma. E assim a gente inverte a dependência. Mas para quê? Simples. Eu poderia vir aqui. Eu poderia fazer isso como o repository é igual poderia fornecer uma implementação falsa do list return array, o que é isso, array? Tem um objeto. O que tem dentro desse objeto? Objeto contrato. Não interessa muito os ids nesse caso, né? Então, eu poderia dizer, ó, tem id contrato, que tanto faz. Tem description, que tanto faz. Tem periods, que é 12. Tem a mouth, que tanto faz. Tem periods, que é 12. Tem a mouth, que é 6. E tem payments, que tem. Estou recriando o que está retornando, né, pessoal? Só um detalhe, isso aqui está voltando como string, tá? Por que eu estou fazendo isso? Se não passou, isso vai dar problema. id contracts não interessa. id payments não interessa. Date. A date interessa. A date interessa sim. Date é new date. 2.022.0101. 10.000.000. Só que a gente usou. E aqui, a mouth. newdate, 2022,01,01,10,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00, Então tem que funcionar, né? Vamos fazer uma coisa? Eu vou esquipar esses testes aqui. Para a gente isolar o problema. Olha a mágica acontecendo agora, hein? Eu vou vir aqui no create. Eu vou comentar. Opa. Vou fazer um psqldfs create e paguei o banco de dados eu vou dar o teste agora ele funciona? funciona e os outros funcionam? será que funcionam? vamos desesquipar os outros funcionam? como é que eu faço para os outros funcionarem? Vou fazer um before aqui. Esse before, eu vou subir. Só para não ter que ficar definindo em cada teste. Vou trazer aqui para cima. Vou fazer aqui para cima. Vou ter function aqui. Vou trazer aqui para cima. Tá? Ah, tá. Vou ter function aqui. Pronto. Vou fazer um let aqui. Generating voices. Generating voices. Tá aí. Vou pegar isso aqui. Vou pegar isso aqui Vou pegar isso aqui Apagando o restante Agora estou usando o before Vamos ver Passou Sem que eu dependa Do banco de dados Ah, mas eu quero agora fazer com banco de dados New, o que? Contract repository database, database repository. Passei com o banco de dados agora, vou rodar o teste para quebrar. Create. E está funcionando. Tranquilo? Dependency Inversion Principal. Você tem o controle da dependência. Por quê? Porque o seu componente de alto nível. Por que alto nível? Porque ele lida com regras de negócio. Ele está mais em cima. E quem está mais embaixo? A conexão com o banco. A obtenção de dados. E assim sucessivamente. Beleza? Então assim a gente começou a encaminhar mais um padrão, que é o padrão repository. Agora, dentro do padrão repository, você repara que a gente está fazendo uma conexão aqui. Essa conexão está fixa dentro da implementação do repository e eu poderia externalizar, eu poderia não ter essa dependência especificamente em cima do pgProps.