72 lines
2.7 KiB
TypeScript
72 lines
2.7 KiB
TypeScript
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<Dealer_Model, DealerCreationAttributes, Dealer> {}
|
|
|
|
class DealerMapper
|
|
extends SequelizeMapper<Dealer_Model, DealerCreationAttributes, Dealer>
|
|
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,
|
|
});
|