2026-02-07 22:07:23 +00:00
|
|
|
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";
|
|
|
|
|
|
2026-02-17 10:35:07 +00:00
|
|
|
import type { IssuedInvoice } from "../../../domain";
|
|
|
|
|
import type { IssuedInvoiceListDTO } from "../dtos";
|
|
|
|
|
import type { IIssuedInvoiceRepository } from "../repositories";
|
2026-02-07 22:07:23 +00:00
|
|
|
|
|
|
|
|
export interface IIssuedInvoiceFinder {
|
|
|
|
|
findIssuedInvoiceById(
|
|
|
|
|
companyId: UniqueID,
|
|
|
|
|
invoiceId: UniqueID,
|
|
|
|
|
transaction?: Transaction
|
2026-02-17 10:35:07 +00:00
|
|
|
): Promise<Result<IssuedInvoice, Error>>;
|
2026-02-07 22:07:23 +00:00
|
|
|
|
|
|
|
|
issuedInvoiceExists(
|
|
|
|
|
companyId: UniqueID,
|
|
|
|
|
invoiceId: UniqueID,
|
|
|
|
|
transaction?: Transaction
|
|
|
|
|
): Promise<Result<boolean, Error>>;
|
|
|
|
|
|
|
|
|
|
findIssuedInvoicesByCriteria(
|
|
|
|
|
companyId: UniqueID,
|
|
|
|
|
criteria: Criteria,
|
|
|
|
|
transaction?: Transaction
|
2026-02-17 10:35:07 +00:00
|
|
|
): Promise<Result<Collection<IssuedInvoiceListDTO>, Error>>;
|
2026-02-07 22:07:23 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export class IssuedInvoiceFinder implements IIssuedInvoiceFinder {
|
2026-02-17 10:35:07 +00:00
|
|
|
constructor(private readonly repository: IIssuedInvoiceRepository) {}
|
2026-02-07 22:07:23 +00:00
|
|
|
|
|
|
|
|
async findIssuedInvoiceById(
|
|
|
|
|
companyId: UniqueID,
|
|
|
|
|
invoiceId: UniqueID,
|
|
|
|
|
transaction?: Transaction
|
2026-02-17 10:35:07 +00:00
|
|
|
): Promise<Result<IssuedInvoice, Error>> {
|
|
|
|
|
return this.repository.getByIdInCompany(companyId, invoiceId, transaction);
|
2026-02-07 22:07:23 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async issuedInvoiceExists(
|
|
|
|
|
companyId: UniqueID,
|
|
|
|
|
invoiceId: UniqueID,
|
|
|
|
|
transaction?: Transaction
|
|
|
|
|
): Promise<Result<boolean, Error>> {
|
2026-02-19 17:54:59 +00:00
|
|
|
return this.repository.existsByIdInCompany(companyId, invoiceId, transaction);
|
2026-02-07 22:07:23 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async findIssuedInvoicesByCriteria(
|
|
|
|
|
companyId: UniqueID,
|
|
|
|
|
criteria: Criteria,
|
|
|
|
|
transaction?: Transaction
|
2026-02-17 10:35:07 +00:00
|
|
|
): Promise<Result<Collection<IssuedInvoiceListDTO>, Error>> {
|
|
|
|
|
return this.repository.findByCriteriaInCompany(companyId, criteria, transaction);
|
2026-02-07 22:07:23 +00:00
|
|
|
}
|
|
|
|
|
}
|