TryGhost/Ghost

View on GitHub
ghost/audience-feedback/lib/AudienceFeedbackService.js

Summary

Maintainability
A
0 mins
Test Coverage
class AudienceFeedbackService {
    /** @type URL */
    #baseURL;
    /** @type {Object} */
    #urlService;
    /**
     * @param {object} deps
     * @param {object} deps.config
     * @param {URL} deps.config.baseURL
     * @param {object} deps.urlService
     */
    constructor(deps) {
        this.#baseURL = deps.config.baseURL;
        this.#urlService = deps.urlService;
    }
    /**
     * @param {string} uuid
     * @param {string} postId
     * @param {0 | 1} score
     * @param {string} key - hashed uuid value
     */
    buildLink(uuid, postId, score, key) {
        let postUrl = this.#urlService.getUrlByResourceId(postId, {absolute: true});

        if (postUrl.match(/\/404\//)) {
            postUrl = this.#baseURL;
        }
        const url = new URL(postUrl);
        url.hash = `#/feedback/${postId}/${score}/?uuid=${encodeURIComponent(uuid)}&key=${encodeURIComponent(key)}`;
        return url;
    }
}

module.exports = AudienceFeedbackService;