Uecko_ERP/modules/customer-invoices/src/api/application/issued-invoices/services/issued-invoice-finder.ts
2026-03-28 22:10:05 +01:00

56 lines
1.7 KiB
TypeScript

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 { IssuedInvoice } from "../../../domain";
import type { IssuedInvoiceSummary } from "../models";
import type { IIssuedInvoiceRepository } from "../repositories";
export interface IIssuedInvoiceFinder {
findIssuedInvoiceById(
companyId: UniqueID,
invoiceId: UniqueID,
transaction?: unknown
): Promise<Result<IssuedInvoice, Error>>;
issuedInvoiceExists(
companyId: UniqueID,
invoiceId: UniqueID,
transaction?: unknown
): Promise<Result<boolean, Error>>;
findIssuedInvoicesByCriteria(
companyId: UniqueID,
criteria: Criteria,
transaction?: unknown
): Promise<Result<Collection<IssuedInvoiceSummary>, Error>>;
}
export class IssuedInvoiceFinder implements IIssuedInvoiceFinder {
constructor(private readonly repository: IIssuedInvoiceRepository) {}
async findIssuedInvoiceById(
companyId: UniqueID,
invoiceId: UniqueID,
transaction?: unknown
): Promise<Result<IssuedInvoice, Error>> {
return this.repository.getByIdInCompany(companyId, invoiceId, transaction);
}
async issuedInvoiceExists(
companyId: UniqueID,
invoiceId: UniqueID,
transaction?: unknown
): Promise<Result<boolean, Error>> {
return this.repository.existsByIdInCompany(companyId, invoiceId, transaction);
}
async findIssuedInvoicesByCriteria(
companyId: UniqueID,
criteria: Criteria,
transaction?: unknown
): Promise<Result<Collection<IssuedInvoiceSummary>, Error>> {
return this.repository.findByCriteriaInCompany(companyId, criteria, transaction);
}
}