import type { CustomerInvoiceListDTO } from "@erp/customer-invoices/api/infrastructure"; import type { Criteria } from "@repo/rdx-criteria/server"; import type { UniqueID } from "@repo/rdx-ddd"; import type { Collection, Result } from "@repo/rdx-utils"; import type { Transaction } from "sequelize"; import type { ICustomerInvoiceRepository, Proforma } from "../../../domain"; export interface IIssuedInvoiceFinder { findIssuedInvoiceById( companyId: UniqueID, invoiceId: UniqueID, transaction?: Transaction ): Promise>; issuedInvoiceExists( companyId: UniqueID, invoiceId: UniqueID, transaction?: Transaction ): Promise>; findIssuedInvoicesByCriteria( companyId: UniqueID, criteria: Criteria, transaction?: Transaction ): Promise, Error>>; } export class IssuedInvoiceFinder implements IIssuedInvoiceFinder { constructor(private readonly repository: ICustomerInvoiceRepository) {} async findIssuedInvoiceById( companyId: UniqueID, invoiceId: UniqueID, transaction?: Transaction ): Promise> { return this.repository.getIssuedInvoiceByIdInCompany(companyId, invoiceId, transaction, {}); } async issuedInvoiceExists( companyId: UniqueID, invoiceId: UniqueID, transaction?: Transaction ): Promise> { return this.repository.existsByIdInCompany(companyId, invoiceId, transaction, { is_proforma: false, }); } async findIssuedInvoicesByCriteria( companyId: UniqueID, criteria: Criteria, transaction?: Transaction ): Promise, Error>> { return this.repository.findIssuedInvoicesByCriteriaInCompany( companyId, criteria, transaction, {} ); } }