mirror of
https://github.com/PhoenixTwoFive/karaoqueue.git
synced 2025-05-19 11:01:47 +02:00
Add appState
appState contains variables that indicate whether an event is currently ongoing, and whether registration is currently allowed.
This commit is contained in:
parent
80682ab883
commit
9b31131d5b
@ -0,0 +1,14 @@
|
|||||||
|
import AppState from "../models/appState.model";
|
||||||
|
import fs from "fs";
|
||||||
|
|
||||||
|
const appState = new AppState();
|
||||||
|
|
||||||
|
if (fs.existsSync("/tmp/.kqueue_eventlock")) {
|
||||||
|
appState.currentlyInEvent=true;
|
||||||
|
} else {
|
||||||
|
appState.currentlyInEvent=false;
|
||||||
|
}
|
||||||
|
|
||||||
|
appState.registrationEnabled=false;
|
||||||
|
|
||||||
|
export default appState;
|
@ -1,4 +1,7 @@
|
|||||||
import { Controller, Get, Res, Post, Delete, Patch, Req } from "routing-controllers";
|
import { Request, Response } from "express";
|
||||||
|
import { Controller, Get, Res, Post, Delete, Patch, Req, Authorized, CurrentUser } from "routing-controllers";
|
||||||
|
import appState from "../containers/appState.container";
|
||||||
|
import DataStoredInToken from "../interfaces/dataStoredInToken.interface";
|
||||||
|
|
||||||
|
|
||||||
@Controller("/queue")
|
@Controller("/queue")
|
||||||
@ -8,25 +11,33 @@ export class QueueController {
|
|||||||
* Fetch entry Queue content
|
* Fetch entry Queue content
|
||||||
*/
|
*/
|
||||||
@Get()
|
@Get()
|
||||||
getQueue(@Req() req: any, @Res() res: any) {
|
getQueue(@Req() req: Request, @Res() res: Response) {
|
||||||
res.setHeader('Content-Type', 'application/json');
|
res.setHeader('Content-Type', 'application/json');
|
||||||
res.end(JSON.stringify({ placeholder: "//TODO fetch" }));
|
res.send(JSON.stringify({ placeholder: "//TODO fetch" }));
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Add entry to Queue
|
* Add entry to Queue
|
||||||
*/
|
*/
|
||||||
@Post()
|
@Post()
|
||||||
addEntry(@Req() req: any, @Res() res: any) {
|
addEntry(@Req() req: Request, @Res() res: Response) {
|
||||||
res.setHeader('Content-Type', 'application/json');
|
res.setHeader('Content-Type', 'application/json');
|
||||||
res.end(JSON.stringify({ placeholder: "//TODO add" }));
|
if (appState.registrationEnabled) {
|
||||||
|
res.send(JSON.stringify({ placeholder: "//TODO add" }));
|
||||||
|
} else {
|
||||||
|
res.status(403)
|
||||||
|
res.send("Entry submission is currently not allowed.")
|
||||||
|
}
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
@Delete()
|
@Delete()
|
||||||
clearQueue(@Req() req: any, @Res() res: any) {
|
@Authorized()
|
||||||
|
clearQueue(@Req() req: Request, @Res() res: Response) {
|
||||||
return "//TODO clear";
|
return "//TODO clear";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -34,21 +45,32 @@ export class QueueController {
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
@Get("/:entry:id")
|
@Get("/:entry:id")
|
||||||
getEntry(@Req() req: any, @Res() res: any) {
|
getEntry(@Req() req: Request, @Res() res: Response) {
|
||||||
res.setHeader('Content-Type', 'application/json');
|
res.setHeader('Content-Type', 'application/json');
|
||||||
res.end(JSON.stringify({ placeholder: "//TODO get" }));
|
res.send(JSON.stringify({ placeholder: "//TODO get" }));
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
@Patch("/:entry_id")
|
@Patch("/:entry_id")
|
||||||
editEntry(@Req() req: any, @Res() res: any) {
|
editEntry(@Req() req: Request, @Res() res: Response, @CurrentUser() user?: DataStoredInToken) {
|
||||||
return "//TODO edit"
|
if (user) {
|
||||||
|
return "You're "+user._id;
|
||||||
|
} else {
|
||||||
|
/*TODO: Require song-specific auth to modify queue entry */
|
||||||
|
return "You are not logged in."
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Delete("/:entry_id")
|
@Delete("/:entry_id")
|
||||||
deleteEntry(@Req() req: any, @Res() res: any) {
|
deleteEntry(@Req() req: Request, @Res() res: Response, @CurrentUser() user?: DataStoredInToken) {
|
||||||
return "//TODO delete"
|
if (user) {
|
||||||
|
return "You're " + user._id;
|
||||||
|
} else {
|
||||||
|
/*TODO: Require song-specific auth to delete queue entry */
|
||||||
|
return "You are not logged in."
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,25 +1,52 @@
|
|||||||
import { Controller, Get, Param, QueryParam } from "routing-controllers";
|
import { Response } from "express";
|
||||||
|
import { Authorized, Controller, Get, Param, QueryParam, Res } from "routing-controllers";
|
||||||
|
import appState from "../containers/appState.container";
|
||||||
|
import fs from "fs";
|
||||||
|
|
||||||
@Controller("/rpc")
|
@Controller("/rpc")
|
||||||
|
@Authorized()
|
||||||
export class RpcController {
|
export class RpcController {
|
||||||
@Get("/start_event")
|
@Get("/start_event")
|
||||||
doStartEvent() {
|
doStartEvent() {
|
||||||
return "//TODO start_event"
|
/* TODO: Wipe state (queue and song playbacks) when starting new event. Maybe also refresh Song database automatically? */
|
||||||
|
appState.currentlyInEvent = true;
|
||||||
|
fs.openSync("/tmp/.kqueue_eventlock", 'w')
|
||||||
|
return 200;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Get("/end_event")
|
@Get("/end_event")
|
||||||
doEndEvent() {
|
doEndEvent() {
|
||||||
return "//TODO end_event"
|
appState.currentlyInEvent = false;
|
||||||
|
fs.unlinkSync("/tmp/.kqueue_eventlock");
|
||||||
|
return 200;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Get("/enable_registration")
|
@Get("/enable_registration")
|
||||||
doEnableRegistration() {
|
doEnableRegistration(@Res() res: Response) {
|
||||||
return "//TODO enable_registration"
|
if (appState.currentlyInEvent) {
|
||||||
|
appState.registrationEnabled = true;
|
||||||
|
return 200;
|
||||||
|
} else {
|
||||||
|
res.status(403).send("No event currently active")
|
||||||
|
return res;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Get("/disable_registration")
|
@Get("/disable_registration")
|
||||||
doDisableRegistration() {
|
doDisableRegistration(@Res() res: Response) {
|
||||||
return "//TODO disable_registration"
|
if (appState.currentlyInEvent) {
|
||||||
|
appState.registrationEnabled = false;
|
||||||
|
return 200;
|
||||||
|
} else {
|
||||||
|
res.status(403).send("No event currently active")
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Get("/get_state")
|
||||||
|
doGetState() {
|
||||||
|
return appState;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Get("/get_playstats")
|
@Get("/get_playstats")
|
||||||
|
6
backend/karaoqueue-backend/src/models/appState.model.ts
Normal file
6
backend/karaoqueue-backend/src/models/appState.model.ts
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
class AppState {
|
||||||
|
registrationEnabled: boolean;
|
||||||
|
currentlyInEvent: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
export default AppState;
|
Loading…
x
Reference in New Issue
Block a user