rittenhop-dev/versions/5.94.2/node_modules/@tryghost/members-offers/lib/application/OfferMapper.js

67 lines
1.8 KiB
JavaScript
Raw Normal View History

2024-09-23 19:40:12 -04:00
/**
* @typedef {import('../domain/models/Offer')} Offer
*/
/**
* @typedef {object} OfferDTO
* @prop {string} id
* @prop {string} name
* @prop {string} code
*
* @prop {string} display_title
* @prop {string} display_description
*
* @prop {'percent'|'fixed'|'trial'} type
*
* @prop {'month'|'year'} cadence
* @prop {number} amount
*
* @prop {boolean} currency_restriction
* @prop {string} currency
*
* @prop {'once'|'repeating'|'forever'|'trial'} duration
* @prop {null|number} duration_in_months
*
* @prop {'active'|'archived'} status
* @prop {number} redemption_count
*
* @prop {object} tier
* @prop {string} tier.id
* @prop {string} tier.name
* @prop {string} created_at
* @prop {string|null} last_redeemed
*/
class OfferMapper {
/**
* @param {Offer} offer
* @returns {OfferDTO}
*/
static toDTO(offer) {
return {
id: offer.id,
name: offer.name.value,
code: offer.code.value,
display_title: offer.displayTitle.value,
display_description: offer.displayDescription.value,
type: offer.type.value,
cadence: offer.cadence.value,
amount: offer.amount.value,
duration: offer.duration.value.type,
duration_in_months: offer.duration.value.type === 'repeating' ? offer.duration.value.months : null,
currency_restriction: offer.type.value === 'fixed',
currency: offer.type.value === 'fixed' ? offer.currency.value : null,
status: offer.status.value,
redemption_count: offer.redemptionCount,
tier: {
id: offer.tier.id,
name: offer.tier.name
},
created_at: offer.createdAt,
last_redeemed: offer.lastRedeemed
};
}
}
module.exports = OfferMapper;