From 491be89653f5673150c3adb62d702f2398c81c35 Mon Sep 17 00:00:00 2001 From: Miodec Date: Thu, 8 Jul 2021 23:28:00 +0100 Subject: [PATCH] converted presets to new system --- backend/api/controllers/preset.js | 18 ++- backend/api/routes/preset.js | 16 ++- backend/dao/preset.js | 30 ++++- src/js/db.js | 12 ++ src/js/popups/edit-preset-popup.js | 188 ++++++++++++++++++----------- src/js/preset-controller.js | 2 +- src/js/settings.js | 2 +- 7 files changed, 177 insertions(+), 91 deletions(-) diff --git a/backend/api/controllers/preset.js b/backend/api/controllers/preset.js index 99cb4b034..a3b7a7458 100644 --- a/backend/api/controllers/preset.js +++ b/backend/api/controllers/preset.js @@ -1,4 +1,4 @@ -const PresetDAO = require("../../dao/presetDAO"); +const PresetDAO = require("../../dao/preset"); const { isTagPresetNameValid, validateConfig, @@ -6,6 +6,16 @@ const { const MonkeyError = require("../../handlers/error"); class PresetController { + static async getPresets(req, res, next) { + try { + const { uid } = req.decodedToken; + let presets = await PresetDAO.getPresets(uid); + return res.status(200).json(presets); + } catch (e) { + return next(e); + } + } + static async addPreset(req, res, next) { try { const { name, config } = req.body; @@ -13,8 +23,8 @@ class PresetController { if (!isTagPresetNameValid(name)) throw new MonkeyError(400, "Invalid preset name."); validateConfig(config); - await PresetDAO.addPreset(uid, name, config); - return res.sendStatus(200); + let preset = await PresetDAO.addPreset(uid, name, config); + return res.status(200).json(preset); } catch (e) { return next(e); } @@ -26,7 +36,7 @@ class PresetController { const { uid } = req.decodedToken; if (!isTagPresetNameValid(name)) throw new MonkeyError(400, "Invalid preset name."); - validateConfig(config); + if (config) validateConfig(config); await PresetDAO.editPreset(uid, id, name, config); return res.sendStatus(200); } catch (e) { diff --git a/backend/api/routes/preset.js b/backend/api/routes/preset.js index 86517d393..9c246fad8 100644 --- a/backend/api/routes/preset.js +++ b/backend/api/routes/preset.js @@ -1,18 +1,16 @@ -import { authenticateRequest } from "../../middlewares/auth"; -import PresetController from "../controllers/preset"; +const { authenticateRequest } = require("../../middlewares/auth"); +const PresetController = require("../controllers/preset"); const { Router } = require("express"); const router = Router(); -router.post("/presets/add", authenticateRequest, PresetController.addPreset); +router.get("/", authenticateRequest, PresetController.getPresets); -router.post("/presets/edit", authenticateRequest, PresetController.editPreset); +router.post("/add", authenticateRequest, PresetController.addPreset); -router.get( - "/presets/remove", - authenticateRequest, - PresetController.removePreset -); +router.post("/edit", authenticateRequest, PresetController.editPreset); + +router.post("/remove", authenticateRequest, PresetController.removePreset); module.exports = router; diff --git a/backend/dao/preset.js b/backend/dao/preset.js index 9ee5ffa45..344edd533 100644 --- a/backend/dao/preset.js +++ b/backend/dao/preset.js @@ -3,20 +3,38 @@ const { mongoDB } = require("../init/mongodb"); const uuid = require("uuid"); class PresetDAO { + static async getPresets(uid) { + const preset = await mongoDB() + .collection("presets") + .find({ uid }) + .sort({ timestamp: -1 }) + .toArray(); // this needs to be changed to later take patreon into consideration + return preset; + } + static async addPreset(uid, name, config) { const count = await mongoDB().collection("presets").find({ uid }).count(); if (count >= 10) throw new MonkeyError(409, "Too many presets"); - return await mongoDB() - .collection("presets") - .insertOne({ id: uuid.v4(), uid, name, config }); + const id = uuid.v4(); + await mongoDB().collection("presets").insertOne({ id, uid, name, config }); + return { + id, + name, + }; } static async editPreset(uid, id, name, config) { const preset = await mongoDB().collection("presets").findOne({ uid, id }); if (!preset) throw new MonkeyError(404, "Preset not found"); - return await mongoDB() - .collection("presets") - .updateOne({ uid, id }, { $set: { name, config } }); + if (config) { + return await mongoDB() + .collection("presets") + .updateOne({ uid, id }, { $set: { name, config } }); + } else { + return await mongoDB() + .collection("presets") + .updateOne({ uid, id }, { $set: { name } }); + } } static async removePreset(uid, id) { diff --git a/src/js/db.js b/src/js/db.js index 8f6a32e9e..bcb4a4e49 100644 --- a/src/js/db.js +++ b/src/js/db.js @@ -95,6 +95,18 @@ export async function initSnapshot() { } }); + let presetsData = await axiosInstance.get("/presets"); + snap.presets = presetsData.data; + snap.presets = snap.presets.sort((a, b) => { + if (a.name > b.name) { + return 1; + } else if (a.name < b.name) { + return -1; + } else { + return 0; + } + }); + dbSnapshot = snap; loadTags(dbSnapshot.tags); return dbSnapshot; diff --git a/src/js/popups/edit-preset-popup.js b/src/js/popups/edit-preset-popup.js index 1acc5a8af..738ab5832 100644 --- a/src/js/popups/edit-preset-popup.js +++ b/src/js/popups/edit-preset-popup.js @@ -4,6 +4,7 @@ import * as Notifications from "./notifications"; import * as Settings from "./settings"; import * as Config from "./config"; import axiosInstance from "./axios-instance"; +import { config } from "dotenv"; export function show(action, id, name) { if (action === "add") { @@ -63,10 +64,11 @@ function hide() { } } -function apply() { +async function apply() { let action = $("#presetWrapper #presetEdit").attr("action"); let inputVal = $("#presetWrapper #presetEdit input").val(); let presetid = $("#presetWrapper #presetEdit").attr("presetid"); + let override = $("#presetWrapper #presetEdit label input").prop("checked"); let configChanges = Config.getConfigChanges(); let activeTagIds = []; DB.getSnapshot().tags.forEach((tag) => { @@ -78,80 +80,126 @@ function apply() { hide(); if (action === "add") { Loader.show(); - axiosInstance - .post("/addPreset", { - obj: { - name: inputVal, - config: configChanges, - }, - }) - .then((e) => { - console.log(e); - console.log("Should be ready to go away"); - Loader.hide(); - let status = e.data.resultCode; - if (status === 1) { - Notifications.add("Preset added", 1, 2); - DB.getSnapshot().presets.push({ - name: inputVal, - config: configChanges, - _id: e.data.id, - }); - Settings.update(); - } else if (status === -1) { - Notifications.add("Invalid preset name", 0); - } else if (status === -2) { - Notifications.add("You can't add any more presets", 0); - } else if (status < -1) { - Notifications.add("Unknown error: " + e.data.message, -1); - } - }); - } else if (action === "edit") { - Loader.show(); - axiosInstance - .post("/editPreset", { - presetName: inputVal, - presetid: presetid, + let response; + try { + response = await axiosInstance.post("/presets/add", { + name: inputVal, config: configChanges, - }) - .then((e) => { - Loader.hide(); - let status = e.data.resultCode; - if (status === 1) { - Notifications.add("Preset updated", 1); - let preset = DB.getSnapshot().presets.filter( - (preset) => preset._id == presetid - )[0]; - preset.name = inputVal; - preset.config = configChanges; - Settings.update(); - } else if (status === -1) { - Notifications.add("Invalid preset name", 0); - } else if (status < -1) { - Notifications.add("Unknown error: " + e.data.message, -1); - } }); - } else if (action === "remove") { + } catch (e) { + Loader.hide(); + let msg = e?.response?.data?.message ?? e.message; + Notifications.add("Failed to add preset: " + msg, -1); + return; + } + Loader.hide(); + if (response.status !== 200) { + Notifications.add(response.data.message); + } else { + Notifications.add("Preset added", 1, 2); + DB.getSnapshot().presets.push({ + name: inputVal, + config: configChanges, + id: response.data.id, + }); + Settings.update(); + } + } else if (action === "edit") { + // Loader.show(); + // axiosInstance + // .post("/editPreset", { + // presetName: inputVal, + // presetid: presetid, + // config: configChanges, + // }) + // .then((e) => { + // Loader.hide(); + // let status = e.data.resultCode; + // if (status === 1) { + // Notifications.add("Preset updated", 1); + // let preset = DB.getSnapshot().presets.filter( + // (preset) => preset._id == presetid + // )[0]; + // preset.name = inputVal; + // preset.config = configChanges; + // Settings.update(); + // } else if (status === -1) { + // Notifications.add("Invalid preset name", 0); + // } else if (status < -1) { + // Notifications.add("Unknown error: " + e.data.message, -1); + // } + // }); Loader.show(); - axiosInstance - .post("/removePreset", { - presetid, - }) - .then((e) => { - Loader.hide(); - let status = e.data.resultCode; - if (status === 1) { - Notifications.add("Preset removed", 1); - DB.getSnapshot().presets.forEach((preset, index) => { - if (preset._id === presetid) { - DB.getSnapshot().presets.splice(index, 1); - } - }); - Settings.update(); - } else if (status < -1) { - Notifications.add("Unknown error: " + e.data.message, -1); + let response; + try { + response = await axiosInstance.post("/presets/edit", { + name: inputVal, + id: presetid, + config: override === true ? configChanges : null, + }); + } catch (e) { + Loader.hide(); + let msg = e?.response?.data?.message ?? e.message; + Notifications.add("Failed to edit preset: " + msg, -1); + return; + } + Loader.hide(); + if (response.status !== 200) { + Notifications.add(response.data.message); + } else { + Notifications.add("Preset updated", 1); + let preset = DB.getSnapshot().presets.filter( + (preset) => preset.id == presetid + )[0]; + preset.name = inputVal; + if (override === true) preset.config = configChanges; + Settings.update(); + } + } else if (action === "remove") { + // Loader.show(); + // axiosInstance + // .post("/removePreset", { + // presetid, + // }) + // .then((e) => { + // Loader.hide(); + // let status = e.data.resultCode; + // if (status === 1) { + // Notifications.add("Preset removed", 1); + // DB.getSnapshot().presets.forEach((preset, index) => { + // if (preset.id === presetid) { + // DB.getSnapshot().presets.splice(index, 1); + // } + // }); + // Settings.update(); + // } else if (status < -1) { + // Notifications.add("Unknown error: " + e.data.message, -1); + // } + // }); + Loader.show(); + let response; + try { + response = await axiosInstance.post("/presets/remove", { + id: presetid, + }); + } catch (e) { + Loader.hide(); + let msg = e?.response?.data?.message ?? e.message; + Notifications.add("Failed to remove preset: " + msg, -1); + return; + } + Loader.hide(); + if (response.status !== 200) { + Notifications.add(response.data.message); + } else { + Notifications.add("Preset removed", 1); + DB.getSnapshot().presets.forEach((preset, index) => { + if (preset.id === presetid) { + DB.getSnapshot().presets.splice(index, 1); } }); + Settings.update(); + } } } diff --git a/src/js/preset-controller.js b/src/js/preset-controller.js index 85f941503..4fc4058ba 100644 --- a/src/js/preset-controller.js +++ b/src/js/preset-controller.js @@ -8,7 +8,7 @@ import * as TagController from "./tag-controller"; export function apply(id) { // console.log(DB.getSnapshot().presets); DB.getSnapshot().presets.forEach((preset) => { - if (preset._id == id) { + if (preset.id == id) { Config.apply(JSON.parse(JSON.stringify(preset.config))); TagController.clear(true); if (preset.config.tags) { diff --git a/src/js/settings.js b/src/js/settings.js index 058f223bc..825479a9b 100644 --- a/src/js/settings.js +++ b/src/js/settings.js @@ -452,7 +452,7 @@ function refreshPresetsSettingsSection() { let presetsEl = $(".pageSettings .section.presets .presetsList").empty(); DB.getSnapshot().presets.forEach((preset) => { presetsEl.append(` -
+
${preset.name}