Uecko_ERP/apps/server/src/contexts/invoicing/intrastructure/mappers/invoiceParticipantAddress.mapper.ts

95 lines
2.7 KiB
TypeScript
Raw Normal View History

2025-03-18 08:05:00 +00:00
import {
ISequelizeMapper,
SequelizeMapper,
} from "@/contexts/common/infrastructure";
import {
City,
Country,
Email,
Note,
Phone,
PostalCode,
Province,
Street,
UniqueID,
} from "@shared/contexts";
import {
IInvoiceParticipantAddressProps,
InvoiceParticipant,
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
): IInvoiceParticipantAddressMapper =>
new InvoiceParticipantAddressMapper({ context });
class InvoiceParticipantAddressMapper
extends SequelizeMapper<
InvoiceParticipantAddress_Model,
TCreationInvoiceParticipantAddress_Model,
InvoiceParticipantAddress
>
implements IInvoiceParticipantAddressMapper
{
protected toDomainMappingImpl(
source: InvoiceParticipantAddress_Model,
params: any
) {
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,
params: { sourceParent: InvoiceParticipant }
) {
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(),
};
}
}