import { ISequelizeMapper, MapperParamsType, SequelizeMapper, } from "@/contexts/common/infrastructure"; import { KeyValueMap, Language, Name, UniqueID } from "@shared/contexts"; import { Dealer, DealerStatus, IDealerProps } from "../../domain/entities"; import { DealerRole } from "../../domain/entities/DealerRole"; import { ISalesContext } from "../Sales.context"; import { DealerCreationAttributes, Dealer_Model } from "../sequelize"; export interface IDealerMapper extends ISequelizeMapper {} class DealerMapper extends SequelizeMapper implements IDealerMapper { public constructor(props: { context: ISalesContext }) { super(props); } protected toDomainMappingImpl(source: Dealer_Model, params: any): Dealer { const props: IDealerProps = { user_id: this.mapsValue(source, "user_id", UniqueID.create), logo: "", name: this.mapsValue(source, "name", Name.create), status: this.mapsValue(source, "status", DealerStatus.create), roles: this.mapsValue(source, "roles", DealerRole.create), language: this.mapsValue(source, "language", Language.createFromCode), additionalInfo: KeyValueMap.create([ ["contact_information", source.contact_information], ["default_payment_method", source.default_payment_method], ["default_notes", source.default_notes], ["default_legal_terms", source.default_legal_terms], ["default_quote_validity", source.default_quote_validity], ]).object, }; const id = this.mapsValue(source, "id", UniqueID.create); const userOrError = Dealer.create(props, id); if (userOrError.isFailure) { throw userOrError.error; } return userOrError.object; } protected toPersistenceMappingImpl(source: Dealer, params?: MapperParamsType | undefined) { return { id: source.id.toPrimitive(), user_id: source.user_id.toPrimitive(), //contact_id: undefined, logo: "", name: source.name.toPrimitive(), status: source.status.toPrimitive(), language: source.language.toPrimitive(), contact_information: source.additionalInfo.get("contact_information")?.toString() ?? "", default_payment_method: source.additionalInfo.get("default_payment_method")?.toString() ?? "", default_notes: source.additionalInfo.get("default_notes")?.toString() ?? "", default_legal_terms: source.additionalInfo.get("default_legal_terms")?.toString() ?? "", default_quote_validity: source.additionalInfo.get("default_quote_validity")?.toString() ?? "", }; } } export const createDealerMapper = (context: ISalesContext): IDealerMapper => new DealerMapper({ context, });