FactuGES_ERP/modules/customers/src/api/application/services/customer-finder.ts

71 lines
2.0 KiB
TypeScript
Raw Normal View History

2026-03-07 18:27:23 +00:00
import type { Criteria } from "@repo/rdx-criteria/server";
2026-03-16 17:45:45 +00:00
import type { TINNumber, UniqueID } from "@repo/rdx-ddd";
2026-03-07 18:27:23 +00:00
import type { Collection, Result } from "@repo/rdx-utils";
import type { Transaction } from "sequelize";
import type { Customer } from "../../domain";
2026-03-07 21:39:21 +00:00
import type { CustomerSummary } from "../models";
2026-03-07 18:27:23 +00:00
import type { ICustomerRepository } from "../repositories";
export interface ICustomerFinder {
findCustomerById(
companyId: UniqueID,
2026-03-16 17:45:45 +00:00
customerId: UniqueID,
transaction?: Transaction
): Promise<Result<Customer, Error>>;
findCustomerByTIN(
companyId: UniqueID,
tin: TINNumber,
2026-03-07 18:27:23 +00:00
transaction?: Transaction
): Promise<Result<Customer, Error>>;
customerExists(
companyId: UniqueID,
invoiceId: UniqueID,
transaction?: Transaction
): Promise<Result<boolean, Error>>;
findCustomersByCriteria(
companyId: UniqueID,
criteria: Criteria,
transaction?: Transaction
2026-03-07 21:39:21 +00:00
): Promise<Result<Collection<CustomerSummary>, Error>>;
2026-03-07 18:27:23 +00:00
}
export class CustomerFinder implements ICustomerFinder {
constructor(private readonly repository: ICustomerRepository) {}
async findCustomerById(
companyId: UniqueID,
customerId: UniqueID,
transaction?: Transaction
): Promise<Result<Customer, Error>> {
return this.repository.getByIdInCompany(companyId, customerId, transaction);
}
2026-03-16 17:45:45 +00:00
findCustomerByTIN(
companyId: UniqueID,
tin: TINNumber,
transaction?: Transaction
): Promise<Result<Customer, Error>> {
return this.repository.getByTINInCompany(companyId, tin, transaction);
}
2026-03-07 18:27:23 +00:00
async customerExists(
companyId: UniqueID,
customerId: UniqueID,
transaction?: Transaction
): Promise<Result<boolean, Error>> {
return this.repository.existsByIdInCompany(companyId, customerId, transaction);
}
async findCustomersByCriteria(
companyId: UniqueID,
criteria: Criteria,
transaction?: Transaction
2026-03-07 21:39:21 +00:00
): Promise<Result<Collection<CustomerSummary>, Error>> {
2026-03-07 18:27:23 +00:00
return this.repository.findByCriteriaInCompany(companyId, criteria, transaction);
}
}