import { ISequelizeMapper, MapperParamsType, SequelizeMapper, } from "@/contexts/common/infrastructure"; import { Name, UniqueID } from "@shared/contexts"; import { Dealer, IDealerProps } from "../../domain/entities"; import { ISalesContext } from "../Sales.context"; import { DEALER_STATUS, 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 = { name: this.mapsValue(source, "name", Name.create), }; 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(), id_contact: undefined, name: source.name.toPrimitive(), contact_information: "", default_payment_method: "", default_notes: "", default_legal_terms: "", default_quote_validity: "", status: DEALER_STATUS.STATUS_ACTIVE, }; } } export const createDealerMapper = (context: ISalesContext): IDealerMapper => new DealerMapper({ context, });