Presupuestador_web/server/src/contexts/sales/infrastructure/mappers/dealer.mapper.ts

85 lines
3.1 KiB
TypeScript
Raw Normal View History

2024-05-21 16:48:40 +00:00
import {
ISequelizeMapper,
MapperParamsType,
SequelizeMapper,
} from "@/contexts/common/infrastructure";
2024-07-12 16:13:53 +00:00
import { CurrencyData, KeyValueMap, Language, Name, UniqueID } from "@shared/contexts";
2024-09-23 17:00:23 +00:00
import { Dealer, DealerLogotype, DealerStatus, IDealerProps } from "../../domain/entities";
2024-05-21 16:48:40 +00:00
import { ISalesContext } from "../Sales.context";
2024-06-17 16:54:30 +00:00
import { DealerCreationAttributes, Dealer_Model } from "../sequelize";
2024-05-21 16:48:40 +00:00
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 {
2024-07-03 10:27:58 +00:00
const name = this.mapsValue(source, "name", Name.create);
const user_id = this.mapsValue(source, "user_id", UniqueID.create);
const status = this.mapsValue(source, "status", DealerStatus.create);
const language = this.mapsValue(source, "lang_code", Language.createFromCode);
2024-07-12 16:13:53 +00:00
const currency = this.mapsValue(source, "currency_code", CurrencyData.createFromCode);
2024-09-23 17:00:23 +00:00
const logo = this.mapsValue(source, "logo", DealerLogotype.create);
2024-07-03 10:27:58 +00:00
const additionalInfoOrError = 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],
["default_tax", source.default_tax],
2024-07-03 10:27:58 +00:00
]);
2024-05-21 16:48:40 +00:00
const props: IDealerProps = {
2024-07-03 10:27:58 +00:00
user_id,
2024-07-12 16:13:53 +00:00
//logo: "",
2024-07-03 10:27:58 +00:00
name,
status,
language,
2024-07-12 16:13:53 +00:00
currency,
2024-07-03 10:27:58 +00:00
additionalInfo: additionalInfoOrError.object,
2024-09-23 17:00:23 +00:00
logo,
2024-05-21 16:48:40 +00:00
};
const id = this.mapsValue(source, "id", UniqueID.create);
2024-07-03 10:27:58 +00:00
const dealerOrError = Dealer.create(props, id);
2024-05-21 16:48:40 +00:00
2024-07-03 10:27:58 +00:00
if (dealerOrError.isFailure) {
throw dealerOrError.error;
2024-05-21 16:48:40 +00:00
}
2024-07-03 10:27:58 +00:00
return dealerOrError.object;
2024-05-21 16:48:40 +00:00
}
protected toPersistenceMappingImpl(source: Dealer, params?: MapperParamsType | undefined) {
return {
id: source.id.toPrimitive(),
2024-06-14 12:07:20 +00:00
user_id: source.user_id.toPrimitive(),
2024-06-17 16:54:30 +00:00
//contact_id: undefined,
2024-07-12 16:13:53 +00:00
currency_code: source.currency.toPrimitive(),
//logo: "",
2024-05-21 16:48:40 +00:00
name: source.name.toPrimitive(),
2024-06-17 16:54:30 +00:00
status: source.status.toPrimitive(),
2024-07-03 10:27:58 +00:00
lang_code: source.language.toPrimitive(),
2024-06-17 16:54:30 +00:00
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() ?? "",
default_tax: Number(source.additionalInfo.get("default_tax") ?? 0),
2024-09-23 17:00:23 +00:00
logo: source.logo.toPrimitive(),
2024-05-21 16:48:40 +00:00
};
}
}
export const createDealerMapper = (context: ISalesContext): IDealerMapper =>
new DealerMapper({
context,
});