mirror of
https://github.com/janishutz/libreevent.git
synced 2025-11-25 13:24:24 +00:00
seatplan saving and loading for admin & user
This commit is contained in:
43
src/server/admin/adminAPIRoutes.js
Normal file
43
src/server/admin/adminAPIRoutes.js
Normal file
@@ -0,0 +1,43 @@
|
||||
/*
|
||||
* libreevent - adminAPIRoutes.js
|
||||
*
|
||||
* Created by Janis Hutz 07/20/2023, Licensed under the GPL V3 License
|
||||
* https://janishutz.com, development@janishutz.com
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
const posth = require( './api/postHandler.js' );
|
||||
const geth = require( './api/getHandler.js' );
|
||||
const postHandler = new posth();
|
||||
const getHandler = new geth();
|
||||
const path = require( 'path' );
|
||||
|
||||
// settings is missing in arguments which shouldn't pose any problem
|
||||
module.exports = ( app ) => {
|
||||
// Add specific routes here to have them be checked first to not get general handling
|
||||
|
||||
app.get( '/admin/getAPI/:call', ( req, res ) => {
|
||||
if ( req.session.loggedInAdmin ) {
|
||||
getHandler.handleCall( req.params.call, req.query ).then( data => {
|
||||
res.send( data );
|
||||
} ).catch( error => {
|
||||
res.status( 500 ).send( error );
|
||||
} );
|
||||
} else {
|
||||
res.status( 403 ).sendFile( path.join( __dirname + '/../ui/' + ( req.query.lang ?? 'en' ) + '/errors/403.html' ) );
|
||||
}
|
||||
} );
|
||||
|
||||
app.post( '/admin/API/:call', ( req, res ) => {
|
||||
if ( req.session.loggedInAdmin ) {
|
||||
postHandler.handleCall( req.params.call, req.body, req.query.lang ).then( data => {
|
||||
res.send( data );
|
||||
} ).catch( error => {
|
||||
res.status( 500 ).send( error );
|
||||
} );
|
||||
} else {
|
||||
res.status( 403 ).sendFile( path.join( __dirname + '/../ui/' + ( req.query.lang ?? 'en' ) + '/errors/403.html' ) );
|
||||
}
|
||||
} );
|
||||
};
|
||||
48
src/server/admin/api/getHandler.js
Normal file
48
src/server/admin/api/getHandler.js
Normal file
@@ -0,0 +1,48 @@
|
||||
/*
|
||||
* libreevent - getHandler.js
|
||||
*
|
||||
* Created by Janis Hutz 07/20/2023, Licensed under the GPL V3 License
|
||||
* https://janishutz.com, development@janishutz.com
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
const db = require( '../../backend/db/db.js' );
|
||||
|
||||
class GETHandler {
|
||||
constructor () {
|
||||
|
||||
}
|
||||
|
||||
handleCall ( call, query ) {
|
||||
return new Promise( ( resolve, reject ) => {
|
||||
if ( call === 'getSeatplan' ) {
|
||||
db.getJSONDataSimple( 'seatplan', query.location ).then( data => {
|
||||
if ( Object.keys( data ).length > 0 ) {
|
||||
resolve( data[ 'save' ] );
|
||||
} else {
|
||||
reject( 'No data found for this location' );
|
||||
}
|
||||
} ).catch( error => {
|
||||
reject( error );
|
||||
} );
|
||||
} else if ( call === 'getSeatplanDraft' ) {
|
||||
db.getJSONDataSimple( 'seatplan', query.location ).then( data => {
|
||||
if ( Object.keys( data ).length > 0 ) {
|
||||
if ( Object.keys( data[ 'draft' ] ).length > 0 ) {
|
||||
resolve( data[ 'draft' ] );
|
||||
} else {
|
||||
resolve( data[ 'save' ] );
|
||||
}
|
||||
} else {
|
||||
reject( 'No data found for this location' );
|
||||
}
|
||||
} ).catch( error => {
|
||||
reject( error );
|
||||
} );
|
||||
}
|
||||
} );
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = GETHandler;
|
||||
41
src/server/admin/api/postHandler.js
Normal file
41
src/server/admin/api/postHandler.js
Normal file
@@ -0,0 +1,41 @@
|
||||
/*
|
||||
* libreevent - postHandler.js
|
||||
*
|
||||
* Created by Janis Hutz 07/20/2023, Licensed under the GPL V3 License
|
||||
* https://janishutz.com, development@janishutz.com
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
const db = require( '../../backend/db/db.js' );
|
||||
|
||||
class POSTHandler {
|
||||
constructor () {
|
||||
|
||||
}
|
||||
|
||||
handleCall ( call, data, lang ) {
|
||||
return new Promise( ( resolve, reject ) => {
|
||||
console.log( lang );
|
||||
if ( call === 'saveSeatplanDraft' ) {
|
||||
db.getJSONDataSimple( 'seatplan', data.location ).then( res => {
|
||||
let dat = res;
|
||||
dat[ 'draft' ] = data.data;
|
||||
db.writeJSONDataSimple( 'seatplan', data.location, dat ).then( resp => {
|
||||
resolve( resp );
|
||||
} ).catch( error => {
|
||||
reject( error );
|
||||
} );
|
||||
} );
|
||||
} else if ( call === 'saveSeatplan' ) {
|
||||
db.writeJSONDataSimple( 'seatplan', data.location, { 'draft': {}, 'save': data.data } ).then( resp => {
|
||||
resolve( resp );
|
||||
} ).catch( error => {
|
||||
reject( error );
|
||||
} );
|
||||
}
|
||||
} );
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = POSTHandler;
|
||||
@@ -48,6 +48,8 @@ let file = path.join( __dirname + '/../webapp/main/dist/index.html' );
|
||||
|
||||
if ( settings.init ) {
|
||||
require( './admin/adminRoutes.js' )( app, settings ); // admin routes
|
||||
require( './admin/adminAPIRoutes.js' )( app, settings ); // admin api routes
|
||||
require( './backend/userAPIRoutes.js' )( app, settings ); // admin api routes
|
||||
require( './backend/userRoutes.js' )( app, settings ); // user routes
|
||||
} else {
|
||||
require( './setup/setupRoutes.js' )( app, settings ); // setup routes
|
||||
|
||||
34
src/server/backend/api/getHandler.js
Normal file
34
src/server/backend/api/getHandler.js
Normal file
@@ -0,0 +1,34 @@
|
||||
/*
|
||||
* libreevent - getHandler.js
|
||||
*
|
||||
* Created by Janis Hutz 07/20/2023, Licensed under the GPL V3 License
|
||||
* https://janishutz.com, development@janishutz.com
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
const db = require( '../db/db.js' );
|
||||
|
||||
class GETHandler {
|
||||
constructor () {
|
||||
|
||||
}
|
||||
|
||||
handleCall ( call, query ) {
|
||||
return new Promise( ( resolve, reject ) => {
|
||||
if ( call === 'getSeatplan' ) {
|
||||
db.getJSONDataSimple( 'seatplan', query.location ).then( data => {
|
||||
if ( Object.keys( data ).length > 0 ) {
|
||||
resolve( data[ 'save' ] );
|
||||
} else {
|
||||
reject( 'No data found for this location' );
|
||||
}
|
||||
} ).catch( error => {
|
||||
reject( error );
|
||||
} );
|
||||
}
|
||||
} );
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = GETHandler;
|
||||
41
src/server/backend/api/postHandler.js
Normal file
41
src/server/backend/api/postHandler.js
Normal file
@@ -0,0 +1,41 @@
|
||||
/*
|
||||
* libreevent - postHandler.js
|
||||
*
|
||||
* Created by Janis Hutz 07/20/2023, Licensed under the GPL V3 License
|
||||
* https://janishutz.com, development@janishutz.com
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
const db = require( '../db/db.js' );
|
||||
|
||||
class POSTHandler {
|
||||
constructor () {
|
||||
|
||||
}
|
||||
|
||||
handleCall ( call, data, lang ) {
|
||||
return new Promise( ( resolve, reject ) => {
|
||||
console.log( lang );
|
||||
if ( call === 'saveSeatplanDraft' ) {
|
||||
db.getJSONDataSimple( 'seatplan', data.location ).then( res => {
|
||||
let dat = res;
|
||||
dat[ 'draft' ] = data.data;
|
||||
db.writeJSONDataSimple( 'seatplan', data.location, dat ).then( resp => {
|
||||
resolve( resp );
|
||||
} ).catch( error => {
|
||||
reject( error );
|
||||
} );
|
||||
} );
|
||||
} else if ( call === 'saveSeatplan' ) {
|
||||
db.writeJSONDataSimple( 'seatplan', data.location, { 'draft': {}, 'save': data.data } ).then( resp => {
|
||||
resolve( resp );
|
||||
} ).catch( error => {
|
||||
reject( error );
|
||||
} );
|
||||
}
|
||||
} );
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = POSTHandler;
|
||||
1
src/server/backend/db/data/seatplan.json
Normal file
1
src/server/backend/db/data/seatplan.json
Normal file
@@ -0,0 +1 @@
|
||||
{"test2":{"draft":{},"save":{"seatInfo":{"data":{"1":{"0":22},"2":{"0":9},"3":{"0":9}},"count":0},"data":{"1":{"x":299.02,"y":17.157,"h":564.951,"w":731.618,"active":false,"draggable":true,"resizable":true,"id":1,"origin":1,"shape":"rectangular","type":"seat","startingRow":1,"seatNumberingPosition":1,"sector":"A","text":{"text":"TestText","textSize":20,"colour":"#20FFFF"},"numberingDirection":"left","category":"1"},"2":{"x":359.069,"y":661.765,"h":121.324,"w":604.167,"active":false,"draggable":true,"resizable":true,"id":2,"origin":3,"shape":"rectangular","type":"stage","startingRow":1,"seatNumberingPosition":1,"sector":"A","text":{"text":"TestText","textSize":20,"colour":"#20FFFF"},"ticketCount":1,"numberingDirection":"left","category":"1"},"3":{"x":519.608,"y":671.569,"h":83.333,"w":306.373,"active":false,"draggable":true,"resizable":true,"id":3,"origin":1,"shape":"rectangular","type":"text","startingRow":1,"seatNumberingPosition":2,"sector":"A","text":{"text":"Stage","textSize":25,"colour":"#2160ff"},"ticketCount":1,"numberingDirection":"left","category":"1"}}}},"test":{"draft":{},"save":{"seatInfo":{"data":{"1":{"0":22}},"count":0},"data":{"1":{"x":122.549,"y":122.549,"h":371.324,"w":735.294,"active":false,"draggable":true,"resizable":true,"id":1,"origin":1,"shape":"rectangular","type":"seat","startingRow":1,"seatNumberingPosition":1,"sector":"A","text":{"text":"TestText","textSize":20,"colour":"#20FFFF"},"numberingDirection":"left","category":"1"}}}}}
|
||||
@@ -26,7 +26,7 @@ if ( settings.db === 'mysql' ) {
|
||||
dbh.connect();
|
||||
}
|
||||
|
||||
module.exports.getDataSimple = function getData ( db, column, searchQuery ) {
|
||||
module.exports.getDataSimple = ( db, column, searchQuery ) => {
|
||||
return new Promise( resolve => {
|
||||
dbh.query( { 'command': 'getFilteredData', 'property': column, 'searchQuery': searchQuery }, dbRef[ db ] ).then( data => {
|
||||
console.log( data );
|
||||
@@ -37,23 +37,78 @@ module.exports.getDataSimple = function getData ( db, column, searchQuery ) {
|
||||
} );
|
||||
};
|
||||
|
||||
module.exports.writeDataSimple = function writeData ( db, column, searchQuery ) {
|
||||
module.exports.writeDataSimple = ( db, column, searchQuery ) => {
|
||||
return new Promise( ( resolve, reject ) => {
|
||||
|
||||
} );
|
||||
};
|
||||
|
||||
module.exports.getJSONData = function getData ( file ) {
|
||||
module.exports.getJSONData = ( file ) => {
|
||||
return new Promise( ( resolve, reject ) => {
|
||||
fs.readFile( path.join( __dirname + '/../../' + file ), ( error, data ) => {
|
||||
fs.readFile( path.join( __dirname + '/data/' + file + '.json' ), ( error, data ) => {
|
||||
if ( error ) {
|
||||
reject( 'Error occurred: Error trace: ' + error );
|
||||
} else {
|
||||
if ( data.byteLength > 0 ) {
|
||||
resolve( JSON.parse( data ) ?? {} );
|
||||
} else {
|
||||
resolve( { } );
|
||||
}
|
||||
}
|
||||
resolve( JSON.parse( data ) );
|
||||
} );
|
||||
} );
|
||||
};
|
||||
|
||||
module.exports.getJSONDataSync = function getData ( file ) {
|
||||
module.exports.getJSONDataSimple = ( file, identifier ) => {
|
||||
return new Promise( ( resolve, reject ) => {
|
||||
fs.readFile( path.join( __dirname + '/data/' + file + '.json' ), ( error, data ) => {
|
||||
if ( error ) {
|
||||
reject( 'Error occurred: Error trace: ' + error );
|
||||
} else {
|
||||
if ( data.byteLength > 0 ) {
|
||||
resolve( JSON.parse( data )[ identifier ] ?? {} );
|
||||
} else {
|
||||
resolve( { } );
|
||||
}
|
||||
}
|
||||
} );
|
||||
} );
|
||||
};
|
||||
|
||||
module.exports.getJSONDataSync = ( file ) => {
|
||||
return JSON.parse( fs.readFileSync( path.join( __dirname + '/../../' + file ) ) );
|
||||
};
|
||||
|
||||
module.exports.writeJSONDataSimple = ( db, identifier, values ) => {
|
||||
return new Promise( ( resolve, reject ) => {
|
||||
fs.readFile( path.join( __dirname + '/data/' + db + '.json' ), ( error, data ) => {
|
||||
if ( error ) {
|
||||
reject( 'Error occurred: Error trace: ' + error );
|
||||
} else {
|
||||
let dat = {};
|
||||
if ( data.byteLength > 0 ) {
|
||||
dat = JSON.parse( data ) ?? {};
|
||||
}
|
||||
dat[ identifier ] = values;
|
||||
fs.writeFile( path.join( __dirname + '/data/' + db + '.json' ), JSON.stringify( dat ), ( error ) => {
|
||||
if ( error ) {
|
||||
reject( 'Error occurred: Error trace: ' + error );
|
||||
}
|
||||
resolve( true );
|
||||
} );
|
||||
}
|
||||
} );
|
||||
} );
|
||||
};
|
||||
|
||||
module.exports.writeJSONData = ( db, data ) => {
|
||||
return new Promise( ( resolve, reject ) => {
|
||||
fs.writeFile( path.join( __dirname + '/data/' + db + '.json' ), JSON.stringify( data ), ( error ) => {
|
||||
if ( error ) {
|
||||
reject( 'Error occurred: Error trace: ' + error );
|
||||
} else {
|
||||
resolve( true );
|
||||
}
|
||||
} );
|
||||
} );
|
||||
};
|
||||
@@ -0,0 +1 @@
|
||||
{}
|
||||
35
src/server/backend/userAPIRoutes.js
Normal file
35
src/server/backend/userAPIRoutes.js
Normal file
@@ -0,0 +1,35 @@
|
||||
/*
|
||||
* libreevent - adminAPIRoutes.js
|
||||
*
|
||||
* Created by Janis Hutz 07/20/2023, Licensed under the GPL V3 License
|
||||
* https://janishutz.com, development@janishutz.com
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
const posth = require( './api/postHandler.js' );
|
||||
const geth = require( './api/getHandler.js' );
|
||||
const postHandler = new posth();
|
||||
const getHandler = new geth();
|
||||
const path = require( 'path' );
|
||||
|
||||
// settings is missing in arguments which shouldn't pose any problem
|
||||
module.exports = ( app ) => {
|
||||
// Add specific routes here to have them be checked first to not get general handling
|
||||
|
||||
app.get( '/getAPI/:call', ( req, res ) => {
|
||||
getHandler.handleCall( req.params.call, req.query ).then( data => {
|
||||
res.send( data );
|
||||
} ).catch( error => {
|
||||
res.status( 500 ).send( error );
|
||||
} );
|
||||
} );
|
||||
|
||||
app.post( '/API/:call', ( req, res ) => {
|
||||
postHandler.handleCall( req.params.call, req.body, req.query.lang ).then( data => {
|
||||
res.send( data );
|
||||
} ).catch( error => {
|
||||
res.status( 500 ).send( error );
|
||||
} );
|
||||
} );
|
||||
};
|
||||
@@ -1,9 +1,19 @@
|
||||
const express = require( 'express' );
|
||||
let app = express();
|
||||
const http = require( 'http' );
|
||||
const alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
|
||||
let result = '';
|
||||
|
||||
app.use( express.static( '.' ) );
|
||||
// https://stackoverflow.com/questions/36129721/convert-number-to-alphabet-letter
|
||||
function printToLetter( number ) {
|
||||
let charIndex = number % alphabet.length;
|
||||
let quotient = number / alphabet.length;
|
||||
if ( charIndex - 1 === -1 ) {
|
||||
charIndex = alphabet.length;
|
||||
quotient --;
|
||||
}
|
||||
result = alphabet.charAt( charIndex - 1 ) + result;
|
||||
if ( quotient >= 1 ) {
|
||||
printToLetter( parseInt( quotient ) );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
const PORT = process.env.PORT || 8081;
|
||||
http.createServer( app ).listen( PORT );
|
||||
printToLetter( 150036 );
|
||||
console.log( result );
|
||||
11
src/server/ui/en/errors/403.html
Normal file
11
src/server/ui/en/errors/403.html
Normal file
@@ -0,0 +1,11 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>403</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>403</h1>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user