Uecko_ERP/modules/invoices/src/api/infrastructure/mappers/invoiceParticipantAddress.mapper.ts.bak

88 lines
2.6 KiB
TypeScript
Raw Normal View History

2025-04-01 14:26:15 +00:00
import { ISequelizeMapper, SequelizeMapper } from "@/contexts/common/infrastructure";
2025-03-18 08:05:00 +00:00
import {
City,
Country,
Email,
Note,
Phone,
PostalCode,
Province,
Street,
UniqueID,
} from "@shared/contexts";
import {
IInvoiceParticipantAddressProps,
2025-04-01 14:26:15 +00:00
InvoiceCustomer,
2025-03-18 08:05:00 +00:00
InvoiceParticipantAddress,
} from "../../domain";
import { IInvoicingContext } from "../InvoicingContext";
import {
InvoiceParticipantAddress_Model,
TCreationInvoiceParticipantAddress_Model,
} from "../sequelize";
export interface IInvoiceParticipantAddressMapper
extends ISequelizeMapper<
InvoiceParticipantAddress_Model,
TCreationInvoiceParticipantAddress_Model,
InvoiceParticipantAddress
> {}
export const createInvoiceParticipantAddressMapper = (
context: IInvoicingContext
2025-04-01 14:26:15 +00:00
): IInvoiceParticipantAddressMapper => new InvoiceParticipantAddressMapper({ context });
2025-03-18 08:05:00 +00:00
class InvoiceParticipantAddressMapper
extends SequelizeMapper<
InvoiceParticipantAddress_Model,
TCreationInvoiceParticipantAddress_Model,
InvoiceParticipantAddress
>
implements IInvoiceParticipantAddressMapper
{
2025-04-01 14:26:15 +00:00
protected toDomainMappingImpl(source: InvoiceParticipantAddress_Model, params: any) {
2025-03-18 08:05:00 +00:00
const id = this.mapsValue(source, "address_id", UniqueID.create);
const props: IInvoiceParticipantAddressProps = {
type: source.type,
street: this.mapsValue(source, "street", Street.create),
city: this.mapsValue(source, "city", City.create),
province: this.mapsValue(source, "province", Province.create),
postalCode: this.mapsValue(source, "postal_code", PostalCode.create),
country: this.mapsValue(source, "country", Country.create),
email: this.mapsValue(source, "email", Email.create),
phone: this.mapsValue(source, "phone", Phone.create),
notes: this.mapsValue(source, "notes", Note.create),
};
const addressOrError = InvoiceParticipantAddress.create(props, id);
if (addressOrError.isFailure) {
throw addressOrError.error;
}
return addressOrError.object;
}
protected toPersistenceMappingImpl(
source: InvoiceParticipantAddress,
2025-04-01 14:26:15 +00:00
params: { sourceParent: InvoiceCustomer }
2025-03-18 08:05:00 +00:00
) {
const { sourceParent } = params;
return {
address_id: source.id.toPrimitive(),
participant_id: sourceParent.id.toPrimitive(),
type: String(source.type),
title: source.title,
street: source.street.toPrimitive(),
city: source.city.toPrimitive(),
postal_code: source.postalCode.toPrimitive(),
province: source.province.toPrimitive(),
country: source.country.toPrimitive(),
email: source.email.toPrimitive(),
phone: source.phone.toPrimitive(),
};
}
}