diff --git a/src/server/api/v1/controllers/timersApiController.ts b/src/server/api/v1/controllers/timersApiController.ts index bb2808e81..6feea60bc 100644 --- a/src/server/api/v1/controllers/timersApiController.ts +++ b/src/server/api/v1/controllers/timersApiController.ts @@ -1,5 +1,30 @@ import timersManager from "../../../../backend/timers/timer-manager"; import { Request, Response } from "express"; +import { Timer } from "../../../../types/timers"; + +function findTimer(req: Request, res: Response): Timer | undefined { + const timerId: string = req.params.timerId; + + if (!(timerId.length > 0)) { + res.status(400).send({ + status: "error", + message: "No timerId provided" + }); + return undefined; + } + + const timer = timersManager.getItem(timerId); + + if (timer == null) { + res.status(404).send({ + status: "error", + message: `Timer '${timerId}' not found` + }); + return undefined; + } + + return timer; +} export async function getTimers(req: Request, res: Response): Promise { const timers = timersManager.getAllItems() @@ -15,23 +40,40 @@ export async function getTimers(req: Request, res: Response): Promise } export async function getTimerById(req: Request, res: Response): Promise { - const timerId: string = req.params.timerId; + const timer = findTimer(req, res); + if (!timer) { + return; + } - if (!(timerId.length > 0)) { - return res.status(400).send({ - status: "error", - message: "No timerId provided" - }); + return res.json(timer); +} + +export async function updateTimerById(req: Request, res: Response): Promise { + const timer = findTimer(req, res); + if (!timer) { + return; } - const timer = timersManager.getItem(timerId); + const action: string = req.params.action; - if (timer == null) { - return res.status(404).send({ + if ( + action !== "enable" && + action !== "disable" && + action !== "toggle" && + action !== "clear" + ) { + return res.status(400).send({ status: "error", - message: `Timer '${timerId}' not found` + message: "invalid action provided" }); } - return res.json(timer); -} \ No newline at end of file + if (action === "clear") { + timersManager.updateIntervalForTimer(timer); + return res.status(200).send(); + } + + const isActive = action === "toggle" ? !timer.active : action === "enable"; + timersManager.updateTimerActiveStatus(timer.id, isActive); + return res.status(200).send(); +} diff --git a/src/server/api/v1/v1Router.js b/src/server/api/v1/v1Router.js index 3d0a439e2..5a3d36887 100644 --- a/src/server/api/v1/v1Router.js +++ b/src/server/api/v1/v1Router.js @@ -190,6 +190,11 @@ router .route("/timers/:timerId") .get(timers.getTimerById); +// Action can be "toggle", "enable", "disable" or "clear" +router + .route("/timers/:timerId/:action") + .get(timers.updateTimerById); + const queues = require("./controllers/effectQueuesApiController"); router