All files / modules/information index.js

100% Statements 16/16
100% Branches 2/2
100% Functions 2/2
100% Lines 16/16

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45      1x 1x               1x 1x 1x   1x 1x                   1x 2x 2x 1x   1x 1x   1x 1x       1x        
/**
 * @module information
 */
const informationRepository = require("../../repositories/information");
const cache = require("../cache");
 
/**
 * Updates an information entry that already exists in the database.
 * Upon success, updates the record in the cache too.
 * @param {Object} information a valid information object
 * @return {Object} updated information entry
 */
const updateInformation = async (information) => {
    const updateInformationResult = await informationRepository.update(information);
    const updatedRecord = updateInformationResult.rows[0];
    // if successful, cache it
    cache.set(`information-${information.type}`, updatedRecord.content);
    return updatedRecord;
};
 
/**
 * Gets content of an information entry matching the input information
 * type. Fetches from cache if possible, otherwise, fetches from
 * database and caches the value for future use.
 * @param {String} type type of information
 * @return {String} content of information entry
 */
const getInformationData = async (type) => {
    const cacheKey = `information-${type}`;
    if (cache.has(cacheKey)) {
        return cache.get(cacheKey);
    } else {
        const informationResult = await informationRepository.findByType(type);
        const informationObject = informationResult.rows[0];
        // if successful, cache it
        cache.set(cacheKey, informationObject.content);
        return informationObject.content;
    }
};
 
module.exports = {
    getInformationData,
    updateInformation,
};