diff --git a/src/controller/admin/management/settingController.ts b/src/controller/admin/management/settingController.ts index 784ffb3..10d5dea 100644 --- a/src/controller/admin/management/settingController.ts +++ b/src/controller/admin/management/settingController.ts @@ -1,6 +1,6 @@ import { Request, Response } from "express"; import SettingHelper from "../../../helpers/settingsHelper"; -import { SettingString } from "../../../type/settingTypes"; +import { SettingString, SettingValueMapping } from "../../../type/settingTypes"; /** * @description get All settings @@ -45,6 +45,44 @@ export async function setSetting(req: Request, res: Response): Promise { res.sendStatus(204); } +/** + * @description set settings + * @param req {Request} Express req object + * @param res {Response} Express res object + * @returns {Promise<*>} + */ +export async function setSettings(req: Request, res: Response): Promise { + let setting = req.body as Array<{ key: K; value: SettingValueMapping[K] }>; + + for (let entry of setting) { + SettingHelper.setSetting(entry.key, entry.value); + } + + res.sendStatus(204); +} + +/** + * @description set setting + * @param req {Request} Express req object + * @param res {Response} Express res object + * @returns {Promise<*>} + */ +export async function setImages(req: Request, res: Response): Promise { + if (req.files && !Array.isArray(req.files) && req.files.icon) { + await SettingHelper.setSetting("club.icon", "configured"); + } else { + await SettingHelper.resetSetting("club.icon"); + } + + if (req.files && !Array.isArray(req.files) && req.files.logo) { + await SettingHelper.setSetting("club.logo", "configured"); + } else { + await SettingHelper.resetSetting("club.logo"); + } + + res.sendStatus(204); +} + /** * @description reset setting * @param req {Request} Express req object diff --git a/src/helpers/settingsHelper.ts b/src/helpers/settingsHelper.ts index 554e0d9..adddcc7 100644 --- a/src/helpers/settingsHelper.ts +++ b/src/helpers/settingsHelper.ts @@ -68,11 +68,15 @@ export default abstract class SettingHelper { /** * Sets a setting + * undefined value leads to reset of key * @param key The key of the setting * @param value The value to set */ public static async setSetting(key: K, value: SettingValueMapping[K]): Promise { - if (value === undefined || value === null) return; + if (value === undefined || value === null) { + if (key != "mail.password") this.resetSetting(key); + return; + } const stringValue = String(value); diff --git a/src/routes/admin/management/setting.ts b/src/routes/admin/management/setting.ts index 8f3ef61..c284a32 100644 --- a/src/routes/admin/management/setting.ts +++ b/src/routes/admin/management/setting.ts @@ -4,8 +4,11 @@ import { getSetting, getSettings, resetSetting, + setImages, setSetting, + setSettings, } from "../../../controller/admin/management/settingController"; +import { clubImageUpload } from "../../../middleware/multer"; var router = express.Router({ mergeParams: true }); @@ -25,6 +28,23 @@ router.put( } ); +router.put( + "/multi", + PermissionHelper.passCheckMiddleware("create", "management", "setting"), + async (req: Request, res: Response) => { + await setSettings(req, res); + } +); + +router.put( + "/images", + PermissionHelper.passCheckMiddleware("create", "management", "setting"), + clubImageUpload, + async (req: Request, res: Response) => { + await setImages(req, res); + } +); + router.delete( "/:setting", PermissionHelper.passCheckMiddleware("delete", "management", "setting"),