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 { IssuedInvoice } from "../../../domain"; import type { IssuedInvoiceListDTO } from "../dtos"; import type { IIssuedInvoiceRepository } from "../repositories"; 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: IIssuedInvoiceRepository) {} async findIssuedInvoiceById( companyId: UniqueID, invoiceId: UniqueID, transaction?: Transaction ): Promise> { return this.repository.getByIdInCompany(companyId, invoiceId, transaction); } async issuedInvoiceExists( companyId: UniqueID, invoiceId: UniqueID, transaction?: Transaction ): Promise> { return this.repository.existsByIdInCompany(companyId, invoiceId, transaction); } async findIssuedInvoicesByCriteria( companyId: UniqueID, criteria: Criteria, transaction?: Transaction ): Promise, Error>> { return this.repository.findByCriteriaInCompany(companyId, criteria, transaction); } }