/** * File which deals with adding and removing downloads from * the admin section of the website. * * @author Jeffery Russell 6-30-18 */ /** Whiskers template file */ const TEMPLATE_FILE = "admin/adminDownloads.html"; const includes = require('../includes/includes.js'); //updates db const sql = require('../utils/sql'); //parses post data const qs = require('querystring'); /** * Processes post requests from the addDownload form * * @param postData * @returns {*|Promise} */ const addDownloadPostData = function(postData) { return new Promise(function(resolve, reject) { const post = qs.parse(postData); if(post.add_download) { sql.addDownload(post.add_download_name, post.add_download_file) .then(function() { resolve(); }).catch(function(error) { reject(error); }) } else { resolve(); } }); }; /** * Removes a download if requested by the * post data from an admin. */ const removeDownloads = function(postData) { return new Promise(function(resolve, reject) { const post = qs.parse(postData); if(post.delete_download) { sql.removeDownload(post.delete_download).then(function() { resolve(); }).catch(function(err) { reject(err); }); } else { resolve(); } }); }; /** * Fetches the download items in the database so that * the template engine can use it to display them in * a table. * * @param templateContext-- context item used by whiskers * @returns {Promise} */ const displayDownloads = function(templateContext) { return new Promise(function(resolve, reject) { sql.getAllDownloads().then(function(downloads) { templateContext.downloads = downloads; resolve(); }).catch(function(error) { reject(error); }); }); }; module.exports= { /** Fetches context information for the template and handles * post data for the downloads. * * @param postData posted by user * @param templateContext json object used as the template context * @returns {Promise} renders the template used for this page */ main: function(templateContext) { return new Promise(function(resolve, reject) { Promise.all([includes.fetchTemplate(TEMPLATE_FILE), displayDownloads(templateContext)]).then(function(template) { templateContext.adminPage = template[0]; resolve(); }).catch(function(error) { console.log("error in add downloads.js"); reject(error); }); }); }, processPostData: function(postData) { return new Promise(function(resolve, reject) { Promise.all([addDownloadPostData(postData), removeDownloads(postData)]).then(function() { resolve(); }).catch(function(error) { console.log("Error in admin downloads"); reject(error); }) }) } };