FactuGES_ERP/modules/invoices/src/api/domain/services/invoice.service.ts

87 lines
2.8 KiB
TypeScript
Raw Normal View History

2025-05-27 17:47:03 +00:00
import { Criteria } from "@repo/rdx-criteria/server";
2025-05-26 10:38:45 +00:00
import { UniqueID } from "@repo/rdx-ddd";
2025-05-09 10:45:32 +00:00
import { Collection, Result } from "@repo/rdx-utils";
2025-03-18 08:05:00 +00:00
import { Transaction } from "sequelize";
import { IInvoiceProps, Invoice } from "../aggregates";
import { IInvoiceRepository } from "../repositories";
import { IInvoiceService } from "./invoice-service.interface";
export class InvoiceService implements IInvoiceService {
constructor(private readonly repo: IInvoiceRepository) {}
2025-05-26 10:38:45 +00:00
async findInvoices(
criteria: Criteria,
transaction?: Transaction
): Promise<Result<Collection<Invoice>, Error>> {
const invoicesOrError = await this.repo.findAll(criteria, transaction);
2025-03-18 08:05:00 +00:00
if (invoicesOrError.isFailure) {
return Result.fail(invoicesOrError.error);
}
// Solo devolver usuarios activos
//const allInvoices = invoicesOrError.data.filter((invoice) => invoice.isActive);
//return Result.ok(new Collection(allInvoices));
return invoicesOrError;
}
async findInvoiceById(invoiceId: UniqueID, transaction?: Transaction): Promise<Result<Invoice>> {
2025-04-22 15:09:57 +00:00
return await this.repo.getById(invoiceId, transaction);
2025-03-18 08:05:00 +00:00
}
async updateInvoiceById(
invoiceId: UniqueID,
data: Partial<IInvoiceProps>,
transaction?: Transaction
): Promise<Result<Invoice, Error>> {
2025-04-01 14:26:15 +00:00
// Verificar si la factura existe
2025-04-22 15:09:57 +00:00
const invoiceOrError = await this.repo.getById(invoiceId, transaction);
2025-03-18 08:05:00 +00:00
if (invoiceOrError.isFailure) {
return Result.fail(new Error("Invoice not found"));
}
2025-05-02 21:43:51 +00:00
return Result.fail(new Error("No implementado"));
/*const updatedInvoiceOrError = Invoice.update(invoiceOrError.data, data);
2025-03-18 08:05:00 +00:00
if (updatedInvoiceOrError.isFailure) {
return Result.fail(
new Error(`Error updating invoice: ${updatedInvoiceOrError.error.message}`)
);
}
const updateInvoice = updatedInvoiceOrError.data;
await this.repo.update(updateInvoice, transaction);
2025-05-02 21:43:51 +00:00
return Result.ok(updateInvoice);*/
2025-03-18 08:05:00 +00:00
}
async createInvoice(
invoiceId: UniqueID,
data: IInvoiceProps,
transaction?: Transaction
): Promise<Result<Invoice, Error>> {
2025-04-01 14:26:15 +00:00
// Verificar si la factura existe
2025-04-22 15:09:57 +00:00
const invoiceOrError = await this.repo.getById(invoiceId, transaction);
2025-03-18 08:05:00 +00:00
if (invoiceOrError.isSuccess) {
return Result.fail(new Error("Invoice exists"));
}
const newInvoiceOrError = Invoice.create(data, invoiceId);
if (newInvoiceOrError.isFailure) {
return Result.fail(new Error(`Error creating invoice: ${newInvoiceOrError.error.message}`));
}
const newInvoice = newInvoiceOrError.data;
await this.repo.create(newInvoice, transaction);
return Result.ok(newInvoice);
}
async deleteInvoiceById(
invoiceId: UniqueID,
transaction?: Transaction
2025-04-01 14:26:15 +00:00
): Promise<Result<boolean, Error>> {
return this.repo.deleteById(invoiceId, transaction);
2025-03-18 08:05:00 +00:00
}
}