All files / infra/repositore-data-base-prisma invoice-repository-data-base.ts

100% Statements 90/90
83.33% Branches 10/12
100% Functions 6/6
100% Lines 90/90

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 912x 2x 2x 2x 2x 2x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 11x 11x 11x 11x 11x 11x 11x 11x 11x 11x 11x 11x 2x 2x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 2x 8x 8x 8x 8x 8x 8x 8x 8x 8x 8x 8x  
import { PrismaClient } from "@prisma/client";
import { Invoice } from "../../domain/entity/invoice";
import { InvoiceRepository } from "../../domain/repository/invoice-repository";
import { InvoiceMapper } from "./mappers/invoice-mapper";
import { UserMapper } from "./mappers/user-mapper";
export class InvoiceRepositoryDataBase implements InvoiceRepository {
  constructor(private prismaClient: PrismaClient) {}
 
  async create(invoice: Invoice): Promise<Invoice> {
    const invoicePrismaCreate = await this.prismaClient.invoice.create({
      data: {
        userId: invoice.userId,
        installationNumber: invoice.installationNumber,
        monthReferring: invoice.monthReferring,
        expirationDate: invoice.expirationDate,
        amountToBePaid: invoice.amountToBePaid,
        publicContribution: invoice.publicContribution,
        path: invoice.path,
 
        // Energy details
        quantityEnergy: invoice.energyDetails?.quantityEnergy,
        priceEnergy: invoice.energyDetails?.priceEnergy,
        unityTariffEnergy: invoice.energyDetails?.unityTariffEnergy,
        amountOfEnergyInject: invoice.energyDetails?.amountOfEnergyInject,
        priceOfEnergyInject: invoice.energyDetails?.priceOfEnergyInject,
        unityTariffOfEnergyInject: invoice.energyDetails?.unityTariffOfEnergyInject,
 
        // ICMS details
        amountIcms: invoice.icmsDetails?.amountIcms,
        priceIcms: invoice.icmsDetails?.priceIcms,
        unityIcms: invoice.icmsDetails?.unityIcms,
 
        // GDI details
        amountGDI: invoice.gdiDetails?.amountGDI,
        priceGDI: invoice.gdiDetails?.priceGDI,
        unityGDI: invoice.gdiDetails?.unityGDI,
        
      },
    });
    return InvoiceMapper.invoceMapper(invoicePrismaCreate)
  }
  async findAllUser(userId?: string): Promise<Invoice[]> {
    const invoicesWithUser = await this.prismaClient.invoice.findMany({
      where: userId ? { userId } : {},
      include: {
        user: true,
      },
    });
  
    // Mapeia cada resultado para a entidade Invoice
    const invoices = invoicesWithUser.map(invoiceWithUser => {     
      const userData = invoiceWithUser.user ;
      // Mapeia os dados da fatura para a entidade Invoice
      const invoiceEntity = InvoiceMapper.toEntity(invoiceWithUser);
      // Se houver dados do usuário, mapeia-os para a entidade User e atribui à fatura
      if (userData) {
        const userEntity = UserMapper.invoceMapper(userData);
        invoiceEntity.user = userEntity;
      }
      return invoiceEntity;
    });
  
    return invoices;
  }
 async findAll(skip: number, take: number,userId?: string): Promise<Invoice[]> {
       const page = ((skip == 0) ? skip :  skip * take);
      const invoicePrisma  = await this.prismaClient.invoice.findMany({
        where: userId ? { userId } : {},
        take:take,
        skip:page,
      }
    )
      
      const invoces = invoicePrisma.map(InvoiceMapper.toEntity)
      return invoces;
  }
 
  async findExist(userId: string, installationNumber: string, monthReferring: string): Promise<Invoice[]> {
      const invocePrisma = await this.prismaClient.invoice.findMany({
        where:{
          userId: userId,
          installationNumber: installationNumber,
          monthReferring: monthReferring
        }
      })
      const invoice = invocePrisma.map(InvoiceMapper.invoceMapper)
      console.log("INVOCEEEEEE###",invoice)
      return invoice;
  }
}