src/model/rating.js
/**
* Container class for all metadata pertaining to an action that a user has taken against a recommendation.
*/
export default class Rating
{
/**
* @param {Object} json The decoded JSON object that should be used as the basis for this model
* @param {string} json.mediaId The media id as given by the media object
* @param {string} json.origin How the recommendation was generated
* @param {string} json.rating String representing the rating (action)
* @param {number} json.elapsed Number of seconds since the start of playback for this media item, as an integer
* @param {number} json.duration Number of seconds this audio piece is expected to last
* @param {string} json.timestamp ISO-8601 formatted date/time; typically replaced by the client with the actual rating time
* @param {string} json.channel The channel this media item was pulled from
* @param {string} json.cohort The primary cohort of the current logged-in user
* @param {Array} json.affiliations An array of IDs & other data about collections or podcasts the user has ratings for; produced by the server and should be sent back as received; used for tracking program and podcast suggestions
*/
constructor(json) {
Object.assign(this, json);
this._hasSent = false;
this._recommendationUrl = '';
this._actionUrl = '';
}
/**
* Only send the fields back that NPR has sent us
*
* @param {string} key
* @param {boolean|string|number|Array|Object|Function} value
* @returns {undefined|boolean|string|number|Array|Object|Function}
*/
static privateMemberReplacer(key, value) {
if (['_hasSent', '_recommendationUrl', '_actionUrl'].indexOf(key) >= 0) {
return undefined;
}
return value;
}
/**
* A convenience function to cast this object back to a string, generally only used by the {@link Logger} class.
*
* @returns {string}
*/
toString() {
return `[RID=${this.mediaId}, R=${this.rating}]`;
}
}