95 lines
2.7 KiB
TypeScript
95 lines
2.7 KiB
TypeScript
|
|
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(),
|
||
|
|
};
|
||
|
|
}
|
||
|
|
}
|