Uecko_ERP/modules/invoices/src/api/domain/entities/invoice-customer/invoice-address.ts
2025-05-20 12:08:24 +02:00

79 lines
1.7 KiB
TypeScript

import { EmailAddress, Name, PostalAddress, ValueObject } from "@repo/rdx-ddd";
import { Result } from "@repo/rdx-utils";
import { PhoneNumber } from "libphonenumber-js";
import { InvoiceAddressType } from "../../value-objects";
export interface IInvoiceAddressProps {
type: InvoiceAddressType;
title: Name;
address: PostalAddress;
email: EmailAddress;
phone: PhoneNumber;
}
export interface IInvoiceAddress {
type: InvoiceAddressType;
title: Name;
address: PostalAddress;
email: EmailAddress;
phone: PhoneNumber;
}
export class InvoiceAddress extends ValueObject<IInvoiceAddressProps> implements IInvoiceAddress {
public static create(props: IInvoiceAddressProps) {
return Result.ok(new InvoiceAddress(props));
}
public static createShippingAddress(props: IInvoiceAddressProps) {
return Result.ok(
new InvoiceAddress({
...props,
type: InvoiceAddressType.create("shipping").data,
})
);
}
public static createBillingAddress(props: IInvoiceAddressProps) {
return Result.ok(
new InvoiceAddress({
...props,
type: InvoiceAddressType.create("billing").data,
})
);
}
get title(): Name {
return this.props.title;
}
get address(): PostalAddress {
return this.props.address;
}
get email(): EmailAddress {
return this.props.email;
}
get phone(): PhoneNumber {
return this.props.phone;
}
get type(): InvoiceAddressType {
return this.props.type;
}
getValue(): IInvoiceAddressProps {
return this.props;
}
toPrimitive() {
return {
type: this.type.toString(),
title: this.title.toString(),
address: this.address.toString(),
email: this.email.toString(),
phone: this.phone.toString(),
};
}
}