import { SequelizeRepository } from "@/core"; import { Transaction } from "sequelize"; export class ContactRepository extends SequelizeRepository implements IContactRepository { protected mapper: IContactMapper; public constructor(props: { mapper: IContactMapper; adapter: ISequelizeAdapter; transaction: Transaction; }) { const { adapter, mapper, transaction } = props; super({ adapter, transaction }); this.mapper = mapper; } public async getById2(id: UniqueID, billingAddressId: UniqueID, shippingAddressId: UniqueID) { const Contact_Model = this.adapter.getModel("Contact_Model"); const ContactAddress_Model = this.adapter.getModel("ContactAddress_Model"); const rawContact: any = await Contact_Model.findOne({ where: { id: id.toString() }, include: [ { model: ContactAddress_Model, as: "billingAddress", where: { id: billingAddressId.toString(), }, }, { model: ContactAddress_Model, as: "shippingAddress", where: { id: shippingAddressId.toString(), }, }, ], transaction: this.transaction, }); if (!rawContact === true) { return null; } return this.mapper.mapToDomain(rawContact); } public async getById(id: UniqueID): Promise { const rawContact: any = await this._getById("Contact_Model", id, { include: [{ all: true }], }); if (!rawContact === true) { return null; } return this.mapper.mapToDomain(rawContact); } public async exists(id: UniqueID): Promise { return this._exists("Customer", "id", id.toString()); } }