async mapToOffer(model, options) {
        const json = model.toJSON();
        const count = await this.OfferRedemptionModel.where({offer_id: json.id}).count('id', {
            transacting: options.transacting
        });

        const lastRedeemed = await this.OfferRedemptionModel.where({offer_id: json.id}).orderBy('created_at', 'DESC').fetchAll({
            transacting: options.transacting,
            limit: 1
        });

        try {
            const lastRedeemedObject = lastRedeemed.toJSON();

            return await Offer.create({
                id: json.id,
                name: json.name,
                code: json.code,
                display_title: json.portal_title,
                display_description: json.portal_description,
                type: json.discount_type === 'amount' ? 'fixed' : json.discount_type,
                amount: json.discount_amount,
                cadence: json.interval,
                currency: json.currency,
                duration: json.duration,
                duration_in_months: json.duration_in_months,
                redemptionCount: count,
                status: json.active ? 'active' : 'archived',
                tier: {
                    id: json.product.id,
                    name: json.product.name
                },
                created_at: json.created_at,
                last_redeemed: lastRedeemedObject.length > 0 ? lastRedeemedObject[0].created_at : null
            }, null);
        } catch (err) {
            logger.error(err);
            sentry.captureException(err);
            return null;
        }
    }
@private
@param {import('bookshelf').Model<any>} model
@param {BaseOptions} options
@returns {Promise<import('./domain/models/Offer')>}