Uecko_ERP/apps/server/archive/contexts/customer-billing/domain/aggregates/customer-invoice.ts

79 lines
1.8 KiB
TypeScript
Raw Normal View History

2025-05-02 21:43:51 +00:00
import { AggregateRoot, UniqueID, UtcDate } from "@/core/common/domain";
2025-05-09 10:45:32 +00:00
import { Maybe, Result } from "@repo/rdx-utils";
2025-02-25 19:17:30 +00:00
import { Customer, CustomerInvoiceItem } from "../entities";
import { InvoiceStatus } from "../value-objetcs";
2025-02-24 19:00:28 +00:00
2025-02-25 17:27:07 +00:00
export interface ICustomerInvoiceProps {
status: InvoiceStatus;
issueDate: UtcDate;
invoiceNumber: string;
invoiceType: string;
2025-03-04 17:08:33 +00:00
invoiceCustomerReference: Maybe<string>;
2025-02-24 19:00:28 +00:00
2025-02-25 17:27:07 +00:00
customer: Customer;
items: CustomerInvoiceItem[];
}
export interface ICustomerInvoice {
id: UniqueID;
status: InvoiceStatus;
issueDate: UtcDate;
invoiceNumber: string;
invoiceType: string;
2025-03-04 17:08:33 +00:00
invoiceCustomerReference: Maybe<string>;
2025-02-25 17:27:07 +00:00
customer: Customer;
items: CustomerInvoiceItem[];
//send();
//accept();
}
2025-02-24 19:00:28 +00:00
export class CustomerInvoice
extends AggregateRoot<ICustomerInvoiceProps>
implements ICustomerInvoice
{
2025-05-04 20:06:57 +00:00
id: UniqueID;
2025-02-24 19:00:28 +00:00
static create(props: ICustomerInvoiceProps, id?: UniqueID): Result<CustomerInvoice, Error> {
const invoice = new CustomerInvoice(props, id);
// Reglas de negocio / validaciones
// ...
// ...
// 🔹 Disparar evento de dominio "CustomerAuthenticatedEvent"
//const { customer } = props;
//user.addDomainEvent(new CustomerAuthenticatedEvent(id, customer.toString()));
return Result.ok(invoice);
}
2025-02-25 17:27:07 +00:00
get status(): InvoiceStatus {
return this.props.status;
}
get issueDate(): UtcDate {
return this.props.issueDate;
}
get invoiceNumber(): string {
return this.props.invoiceNumber;
}
get invoiceType(): string {
return this.props.invoiceType;
}
2025-03-04 17:08:33 +00:00
get invoiceCustomerReference(): Maybe<string> {
2025-02-25 19:17:30 +00:00
return this.props.invoiceCustomerReference;
}
2025-02-25 17:27:07 +00:00
get customer(): Customer {
return this.props.customer;
}
get items(): CustomerInvoiceItem[] {
return this.props.items;
}
2025-02-24 19:00:28 +00:00
}