use Prettier, add Pool
This commit is contained in:
@@ -3,7 +3,7 @@
|
||||
"es6": true,
|
||||
"node": true
|
||||
},
|
||||
"extends": "eslint:recommended",
|
||||
"extends": ["eslint:recommended", "plugin:prettier/recommended"],
|
||||
"globals": {
|
||||
"Atomics": "readonly",
|
||||
"SharedArrayBuffer": "readonly"
|
||||
|
||||
7
.prettierrc
Normal file
7
.prettierrc
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"trailingComma": "all",
|
||||
"tabWidth": 4,
|
||||
"semi": false,
|
||||
"singleQuote": true,
|
||||
"printWidth": 200
|
||||
}
|
||||
48
auth.js
48
auth.js
@@ -1,50 +1,48 @@
|
||||
// auth.js
|
||||
const jwtPlugin = require('hapi-auth-jwt2').plugin;
|
||||
const jwt = require('jsonwebtoken');
|
||||
const crypto = require('crypto');
|
||||
const jwtPlugin = require('hapi-auth-jwt2').plugin
|
||||
const jwt = require('jsonwebtoken')
|
||||
const crypto = require('crypto')
|
||||
|
||||
const validate = function (credentials) {
|
||||
// Run any checks here to confirm we want to grant these credentials access
|
||||
return {
|
||||
isValid: true,
|
||||
credentials // request.auth.credentials
|
||||
credentials, // request.auth.credentials
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
exports.configureAuth = async (server) => {
|
||||
await server.register(jwtPlugin);
|
||||
await server.register(jwtPlugin)
|
||||
server.auth.strategy('admin', 'jwt', {
|
||||
key: process.env.JWT_KEY,
|
||||
validate,
|
||||
verifyOptions: { algorithms: [ 'HS256' ] }
|
||||
});
|
||||
verifyOptions: { algorithms: ['HS256'] },
|
||||
})
|
||||
|
||||
// Default all routes to require JWT and opt out for public routes
|
||||
server.auth.default('admin')
|
||||
};
|
||||
}
|
||||
|
||||
// TODO: save login timestemp
|
||||
// TODO: save login timestamp
|
||||
exports.login = async (email, password, request) => {
|
||||
return new Promise((resolve, reject) => {
|
||||
const sql = 'SELECT id, login, pass, adminstatus FROM accounts WHERE login = \'' + email + '\'';
|
||||
const sql = "SELECT id, login, pass, adminstatus FROM accounts WHERE login = '" + email + "'"
|
||||
request.app.db.query(sql, (err, results) => {
|
||||
if (err) console.error(err);
|
||||
if (err) console.error(err)
|
||||
if (email === results[0].login) {
|
||||
const md5pw = crypto.createHash('md5').update(password).digest("hex");
|
||||
const md5pw = crypto.createHash('md5').update(password).digest('hex')
|
||||
if (md5pw === results[0].pass) {
|
||||
const accountId = results[0].id;
|
||||
const adminstatus = results[0].adminstatus;
|
||||
const credentials = { email , "id": accountId, "admin": adminstatus};
|
||||
const token = jwt.sign(credentials, process.env.JWT_KEY, { algorithm: 'HS256', expiresIn: '24 hours' });
|
||||
return resolve({token, accountId, adminstatus});
|
||||
}
|
||||
else {
|
||||
return reject("wrong credentials");
|
||||
const accountId = results[0].id
|
||||
const adminstatus = results[0].adminstatus
|
||||
const credentials = { email, id: accountId, admin: adminstatus }
|
||||
const token = jwt.sign(credentials, process.env.JWT_KEY, { algorithm: 'HS256', expiresIn: '24 hours' })
|
||||
return resolve({ token, accountId, adminstatus })
|
||||
} else {
|
||||
return reject('wrong credentials')
|
||||
}
|
||||
} else {
|
||||
return reject("wrong credentials");
|
||||
return reject('wrong credentials')
|
||||
}
|
||||
});
|
||||
})
|
||||
})
|
||||
// if (!(email === 'mario@wattsche.de' && password === 'mmario')) return Boom.notAcceptable();
|
||||
};
|
||||
}
|
||||
|
||||
2045
package-lock.json
generated
2045
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -24,6 +24,7 @@
|
||||
"jsonwebtoken": "^8.5.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"eslint": "^8.3.0"
|
||||
"eslint": "^8.3.0",
|
||||
"eslint-config-prettier": "^8.5.0"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,63 +1,64 @@
|
||||
const jwt = require('jsonwebtoken');
|
||||
const jwt = require('jsonwebtoken')
|
||||
|
||||
exports.configureAccountRoutes = (server) => {
|
||||
// server.route accepts an object or an array
|
||||
return server.route([
|
||||
{
|
||||
// Alle Accountdaten
|
||||
method: 'GET',
|
||||
path: '/getAccount',
|
||||
handler: async (request, h) => {
|
||||
return new Promise((resolve) => {
|
||||
const token = request.query.token;
|
||||
const decoded = jwt.verify(token, process.env.JWT_KEY);
|
||||
const aid = decoded.id;
|
||||
const sql = 'SELECT login, name, vorname, verein, anrede, strasse, plz, ort, telefon FROM accounts WHERE id = ' + aid;
|
||||
{
|
||||
// Alle Accountdaten
|
||||
method: 'GET',
|
||||
path: '/getAccount',
|
||||
handler: async (request, h) => {
|
||||
return new Promise((resolve) => {
|
||||
const token = request.query.token
|
||||
const decoded = jwt.verify(token, process.env.JWT_KEY)
|
||||
const aid = decoded.id
|
||||
const sql = 'SELECT login, name, vorname, verein, anrede, strasse, plz, ort, telefon FROM accounts WHERE id = ' + aid
|
||||
|
||||
request.app.db.query(sql, (err, results) => {
|
||||
if (err) console.error(err);
|
||||
console.log('result', results);
|
||||
return resolve(results);
|
||||
});
|
||||
});
|
||||
},
|
||||
options: {
|
||||
// TODO CORS ENTFERNE
|
||||
cors: {
|
||||
origin: ['*'],
|
||||
additionalHeaders: ['cache-control', 'x-requested-with']
|
||||
request.app.db.query(sql, (err, results) => {
|
||||
if (err) console.error(err)
|
||||
console.log('result', results)
|
||||
return resolve(results)
|
||||
})
|
||||
})
|
||||
},
|
||||
auth: 'admin'
|
||||
}
|
||||
},
|
||||
{
|
||||
// Alle Vereine
|
||||
method: 'GET',
|
||||
path: '/getClubs',
|
||||
handler: async (request, h) => {
|
||||
return new Promise((resolve) => {
|
||||
const sql = 'SELECT verein FROM accounts WHERE verein != "" GROUP By verein';
|
||||
options: {
|
||||
// TODO CORS ENTFERNE
|
||||
cors: {
|
||||
origin: ['*'],
|
||||
additionalHeaders: ['cache-control', 'x-requested-with'],
|
||||
},
|
||||
auth: 'admin',
|
||||
},
|
||||
},
|
||||
{
|
||||
// Alle Vereine
|
||||
method: 'GET',
|
||||
path: '/getClubs',
|
||||
handler: async (request, h) => {
|
||||
return new Promise((resolve) => {
|
||||
const sql = 'SELECT verein FROM accounts WHERE verein != "" GROUP By verein'
|
||||
|
||||
request.app.db.query(sql, (err, results) => {
|
||||
if (err) console.error(err);
|
||||
|
||||
let clubs = [];
|
||||
results.forEach((item) => {
|
||||
clubs.push(item.verein);
|
||||
});
|
||||
// console.log('result', results);
|
||||
// console.log('clubs', clubs);
|
||||
return resolve(clubs);
|
||||
});
|
||||
});
|
||||
},
|
||||
options: {
|
||||
// TODO CORS ENTFERNE
|
||||
cors: {
|
||||
origin: ['*'],
|
||||
additionalHeaders: ['cache-control', 'x-requested-with']
|
||||
request.app.db.query(sql, (err, results) => {
|
||||
if (err) console.error(err)
|
||||
|
||||
let clubs = []
|
||||
results.forEach((item) => {
|
||||
clubs.push(item.verein)
|
||||
})
|
||||
// console.log('result', results);
|
||||
// console.log('clubs', clubs);
|
||||
return resolve(clubs)
|
||||
})
|
||||
})
|
||||
},
|
||||
auth: false,
|
||||
}
|
||||
},
|
||||
])};
|
||||
options: {
|
||||
// TODO CORS ENTFERNE
|
||||
cors: {
|
||||
origin: ['*'],
|
||||
additionalHeaders: ['cache-control', 'x-requested-with'],
|
||||
},
|
||||
auth: false,
|
||||
},
|
||||
},
|
||||
])
|
||||
}
|
||||
|
||||
1312
routes/group.js
1312
routes/group.js
File diff suppressed because it is too large
Load Diff
162
routes/login.js
162
routes/login.js
@@ -1,94 +1,92 @@
|
||||
const {login} = require('../auth');
|
||||
const jwt = require('jsonwebtoken');
|
||||
const { login } = require('../auth')
|
||||
const jwt = require('jsonwebtoken')
|
||||
|
||||
exports.configureLoginRoutes = (server) => {
|
||||
// server.route accepts an object or an array
|
||||
return server.route([
|
||||
{
|
||||
method: "GET", path: "/", options: {auth: false},
|
||||
handler: function () {
|
||||
return {text: 'Token not required'};
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
method: 'GET', path: '/checkToken',
|
||||
handler: function (request, h) {
|
||||
const token = request.query.token;
|
||||
const decoded = jwt.verify(token, process.env.JWT_KEY);
|
||||
return h
|
||||
.response({text: 'You used a Token!'})
|
||||
.type('text/html')
|
||||
.header("Authorization", request.headers.authorization)
|
||||
.header("x-kt-account",decoded.id)
|
||||
.header("x-kt-admin", decoded.admin)
|
||||
.code(201);
|
||||
},
|
||||
options: {
|
||||
// TODO CORS ENTFERNE
|
||||
// cors: {
|
||||
// origin: ['*'],
|
||||
// headers: ["Access-Control-Allow-Headers", "Access-Control-Allow-Origin","Accept", "Authorization", "Content-Type", "If-None-Match", "Accept-language"],
|
||||
// credentials: true
|
||||
// },
|
||||
|
||||
cors: {
|
||||
origin: ['*'],
|
||||
additionalHeaders: ['cache-control', 'x-requested-with'],
|
||||
exposedHeaders: ['x-kt-account', 'x-kt-admin']
|
||||
{
|
||||
method: 'GET',
|
||||
path: '/',
|
||||
options: { auth: false },
|
||||
handler: function () {
|
||||
return { text: 'Token not required' }
|
||||
},
|
||||
auth: false
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
method: 'GET', path: '/token', options: {auth: 'admin',},
|
||||
handler: async (request, h) => {
|
||||
const token = request.query.token;
|
||||
const decoded = jwt.verify(token, process.env.JWT_KEY);
|
||||
console.log(decoded); // bar
|
||||
|
||||
return h
|
||||
.response({text: 'You used a Token!'})
|
||||
.type('text/html')
|
||||
.header("Authorization", request.headers.authorization)
|
||||
.code(201);
|
||||
},
|
||||
},
|
||||
|
||||
{
|
||||
// {"login":{"email": "mario@wattsche.de", "password": "mmario"}}
|
||||
method: 'POST',
|
||||
path: '/authentications',
|
||||
handler: async (request,h) => {
|
||||
const {email, password} = request.payload.login;
|
||||
const result = await login(email, password, request);
|
||||
console.log(result);
|
||||
if (result.token === "wrong credentials"){
|
||||
{
|
||||
method: 'GET',
|
||||
path: '/checkToken',
|
||||
handler: function (request, h) {
|
||||
const token = request.query.token
|
||||
const decoded = jwt.verify(token, process.env.JWT_KEY)
|
||||
return h
|
||||
.response({ text: 'You used a Token!' })
|
||||
.type('text/html')
|
||||
.code(403);
|
||||
} else {
|
||||
return h
|
||||
.response(result.token)
|
||||
.type('text/html')
|
||||
.header("Authorization", request.headers.authorization)
|
||||
.header("x-kt-account", result.accountId)
|
||||
.header("x-kt-admin", result.adminstatus)
|
||||
.header("x-kt-token", result.token)
|
||||
.code(200);
|
||||
}
|
||||
},
|
||||
options: {
|
||||
// TODO CORS ENTFERNE
|
||||
cors: {
|
||||
origin: ['*'],
|
||||
additionalHeaders: ['cache-control', 'x-requested-with'],
|
||||
exposedHeaders: ['x-kt-account', 'x-kt-admin', 'x-kt-token']
|
||||
.header('Authorization', request.headers.authorization)
|
||||
.header('x-kt-account', decoded.id)
|
||||
.header('x-kt-admin', decoded.admin)
|
||||
.code(201)
|
||||
},
|
||||
auth: false
|
||||
}
|
||||
}
|
||||
options: {
|
||||
// TODO CORS ENTFERNE
|
||||
// cors: {
|
||||
// origin: ['*'],
|
||||
// headers: ["Access-Control-Allow-Headers", "Access-Control-Allow-Origin","Accept", "Authorization", "Content-Type", "If-None-Match", "Accept-language"],
|
||||
// credentials: true
|
||||
// },
|
||||
|
||||
cors: {
|
||||
origin: ['*'],
|
||||
additionalHeaders: ['cache-control', 'x-requested-with'],
|
||||
exposedHeaders: ['x-kt-account', 'x-kt-admin'],
|
||||
},
|
||||
auth: false,
|
||||
},
|
||||
},
|
||||
|
||||
{
|
||||
method: 'GET',
|
||||
path: '/token',
|
||||
options: { auth: 'admin' },
|
||||
handler: async (request, h) => {
|
||||
const token = request.query.token
|
||||
const decoded = jwt.verify(token, process.env.JWT_KEY)
|
||||
console.log(decoded) // bar
|
||||
|
||||
return h.response({ text: 'You used a Token!' }).type('text/html').header('Authorization', request.headers.authorization).code(201)
|
||||
},
|
||||
},
|
||||
|
||||
{
|
||||
// {"login":{"email": "mario@wattsche.de", "password": "mmario"}}
|
||||
method: 'POST',
|
||||
path: '/authentications',
|
||||
handler: async (request, h) => {
|
||||
const { email, password } = request.payload.login
|
||||
const result = await login(email, password, request)
|
||||
console.log(result)
|
||||
if (result.token === 'wrong credentials') {
|
||||
return h.type('text/html').code(403)
|
||||
} else {
|
||||
return h
|
||||
.response(result.token)
|
||||
.type('text/html')
|
||||
.header('Authorization', request.headers.authorization)
|
||||
.header('x-kt-account', result.accountId)
|
||||
.header('x-kt-admin', result.adminstatus)
|
||||
.header('x-kt-token', result.token)
|
||||
.code(200)
|
||||
}
|
||||
},
|
||||
options: {
|
||||
// TODO CORS ENTFERNE
|
||||
cors: {
|
||||
origin: ['*'],
|
||||
additionalHeaders: ['cache-control', 'x-requested-with'],
|
||||
exposedHeaders: ['x-kt-account', 'x-kt-admin', 'x-kt-token'],
|
||||
},
|
||||
auth: false,
|
||||
},
|
||||
},
|
||||
])
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,397 +1,392 @@
|
||||
const Joi = require('joi');
|
||||
const jwt = require('jsonwebtoken');
|
||||
const Joi = require('joi')
|
||||
const jwt = require('jsonwebtoken')
|
||||
const utils = require('../utils')
|
||||
|
||||
exports.configureParticipantRoutes = (server) => {
|
||||
// server.route accepts an object or an array
|
||||
return server.route([
|
||||
{
|
||||
// Alle Teilnehmer eines $Turniers
|
||||
method: 'GET',
|
||||
path: '/tournament/{tid}/participants',
|
||||
handler: async (request, h) => {
|
||||
return new Promise((resolve) => {
|
||||
const tid = request.params.tid;
|
||||
const sql = `SELECT turniergruppen.id AS gid, turniergruppen.turnier_id, encounters.begegnung, encounters.aka, encounters.shiro, teilnehmer.id, teilnehmer.vorname, teilnehmer.name, teilnehmer.verein
|
||||
{
|
||||
// Alle Teilnehmer eines $Turniers
|
||||
method: 'GET',
|
||||
path: '/tournament/{tid}/participants',
|
||||
handler: async (request, h) => {
|
||||
return new Promise((resolve) => {
|
||||
const tid = request.params.tid
|
||||
const sql = `SELECT turniergruppen.id AS gid, turniergruppen.turnier_id, encounters.begegnung, encounters.aka, encounters.shiro, teilnehmer.id, teilnehmer.vorname, teilnehmer.name, teilnehmer.verein
|
||||
FROM turniergruppen, encounters, teilnehmer
|
||||
WHERE turniergruppen.turnier_id = ${tid}
|
||||
AND turniergruppen.id = encounters.gruppen_id
|
||||
AND (encounters.aka = teilnehmer.id OR encounters.shiro = teilnehmer.id)`;
|
||||
AND (encounters.aka = teilnehmer.id OR encounters.shiro = teilnehmer.id)`
|
||||
|
||||
request.app.db.query(sql, (err, results) => {
|
||||
if (err) console.error(err);
|
||||
// console.log('result', results);
|
||||
return resolve(results);
|
||||
});
|
||||
});
|
||||
},
|
||||
options: {
|
||||
auth: false,
|
||||
validate: {
|
||||
params: {
|
||||
tid: Joi.number().integer().min(0)
|
||||
}
|
||||
request.app.db.query(sql, (err, results) => {
|
||||
if (err) console.error(err)
|
||||
// console.log('result', results);
|
||||
return resolve(results)
|
||||
})
|
||||
})
|
||||
},
|
||||
// TODO CORS ENTFERNE
|
||||
cors: {
|
||||
origin: ['*'],
|
||||
additionalHeaders: ['cache-control', 'x-requested-with']
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
// Alle Teilnehmer der Gruppe
|
||||
method: 'GET',
|
||||
path: '/group/{gid}/participants',
|
||||
handler: async (request, h) => {
|
||||
return new Promise((resolve) => {
|
||||
const gid = request.params.gid;
|
||||
const sql = "SELECT teilnehmer.id, teilnehmer.name, teilnehmer.vorname, teilnehmer.verein FROM teilnehmer_turniergruppe, teilnehmer WHERE turniergruppe_id = " + gid + " AND teilnehmer_id = teilnehmer.id";
|
||||
request.app.db.query(sql, (err, results) => {
|
||||
if (err) console.error(err);
|
||||
// console.log('result', results);
|
||||
return resolve(results);
|
||||
});
|
||||
// db().query('SELECT id, gid, turnier_id, geschlecht, gurtVon, gurtBis, disziplin, altervon, alterbis, pool, finalteilnehmer FROM turniergruppen WHERE turnier_id = "' + tid + '" ORDER BY gid', function (error, results, fields) {
|
||||
});
|
||||
},
|
||||
options: {
|
||||
validate: {
|
||||
params: {
|
||||
gid: Joi.number().integer().min(0)
|
||||
}
|
||||
options: {
|
||||
auth: false,
|
||||
validate: {
|
||||
params: {
|
||||
tid: Joi.number().integer().min(0),
|
||||
},
|
||||
},
|
||||
// TODO CORS ENTFERNE
|
||||
cors: {
|
||||
origin: ['*'],
|
||||
additionalHeaders: ['cache-control', 'x-requested-with'],
|
||||
},
|
||||
},
|
||||
// TODO CORS ENTFERNE
|
||||
cors: {
|
||||
origin: ['*'],
|
||||
additionalHeaders: ['cache-control', 'x-requested-with']
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
// Alle Teilnehmer_ids der $Gruppe - Daten kommen aus der Auslosung
|
||||
method: 'GET',
|
||||
path: '/group/encounters/{gid}',
|
||||
handler: async (request, h) => {
|
||||
return new Promise((resolve) => {
|
||||
const gid = request.params.gid;
|
||||
// db().query('SELECT begegnungen.id FROM wettkampfbaeume, korunden, begegnungen WHERE wettkampfbaeume.gruppen_id = "' + gid + '" AND wettkampfbaeume.id = korunden.wettkampfbaum_id AND korunden.id = begegnungen.runden_id', function (error, results, fields) {
|
||||
// db().query('SELECT * FROM wettkampfbaeume, korunden, begegnungen WHERE wettkampfbaeume.gruppen_id = "' + gid + '" AND wettkampfbaeume.id = korunden.wettkampfbaum_id AND korunden.id = begegnungen.runden_id', function (error, results, fields) {
|
||||
// db().query('SELECT * FROM encounters WHERE gruppen_id = ' + gid, function (error, results, fields) {
|
||||
const sql = 'SELECT * FROM encounters WHERE gruppen_id = ' + gid + ' ORDER BY begegnung DESC';
|
||||
request.app.db.query(sql, (err, results) => {
|
||||
if (err) console.error(err);
|
||||
// console.log('result', results);
|
||||
return resolve(results);
|
||||
});
|
||||
});
|
||||
},
|
||||
options: {
|
||||
validate: {
|
||||
params: {
|
||||
gid: Joi.number().integer().min(0)
|
||||
}
|
||||
{
|
||||
// Alle Teilnehmer der Gruppe
|
||||
method: 'GET',
|
||||
path: '/group/{gid}/participants',
|
||||
handler: async (request, h) => {
|
||||
return new Promise((resolve) => {
|
||||
const gid = request.params.gid
|
||||
const sql =
|
||||
'SELECT teilnehmer.id, teilnehmer.name, teilnehmer.vorname, teilnehmer.verein FROM teilnehmer_turniergruppe, teilnehmer WHERE turniergruppe_id = ' +
|
||||
gid +
|
||||
' AND teilnehmer_id = teilnehmer.id'
|
||||
request.app.db.query(sql, (err, results) => {
|
||||
if (err) console.error(err)
|
||||
// console.log('result', results);
|
||||
return resolve(results)
|
||||
})
|
||||
// db().query('SELECT id, gid, turnier_id, geschlecht, gurtVon, gurtBis, disziplin, altervon, alterbis, pool, finalteilnehmer FROM turniergruppen WHERE turnier_id = "' + tid + '" ORDER BY gid', function (error, results, fields) {
|
||||
})
|
||||
},
|
||||
options: {
|
||||
validate: {
|
||||
params: {
|
||||
gid: Joi.number().integer().min(0),
|
||||
},
|
||||
},
|
||||
// TODO CORS ENTFERNE
|
||||
cors: {
|
||||
origin: ['*'],
|
||||
additionalHeaders: ['cache-control', 'x-requested-with'],
|
||||
},
|
||||
},
|
||||
// TODO CORS ENTFERNE
|
||||
cors: {
|
||||
origin: ['*'],
|
||||
additionalHeaders: ['cache-control', 'x-requested-with']
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
// Teilnehmer zu ID
|
||||
method: 'GET',
|
||||
path: '/participant/{id}',
|
||||
handler: async (request, h) => {
|
||||
return new Promise((resolve) => {
|
||||
const id = request.params.id;
|
||||
const sql = 'SELECT teilnehmer.id, teilnehmer.vorname, teilnehmer.name, teilnehmer.verein FROM starter, teilnehmer, begegnungen WHERE begegnungen.id = "' + id + '" AND begegnungen.id = starter.begegnungs_id AND starter.teilnehmer_id = teilnehmer.id';
|
||||
request.app.db.query(sql, (err, results) => {
|
||||
if (err) console.error(err);
|
||||
// console.log('result', results);
|
||||
return resolve(results);
|
||||
});
|
||||
});
|
||||
},
|
||||
options: {
|
||||
validate: {
|
||||
params: {
|
||||
id: Joi.number().integer().min(0)
|
||||
}
|
||||
{
|
||||
// Alle Teilnehmer_ids der $Gruppe - Daten kommen aus der Auslosung
|
||||
method: 'GET',
|
||||
path: '/group/encounters/{gid}',
|
||||
handler: async (request, h) => {
|
||||
return new Promise((resolve) => {
|
||||
const gid = request.params.gid
|
||||
// db().query('SELECT begegnungen.id FROM wettkampfbaeume, korunden, begegnungen WHERE wettkampfbaeume.gruppen_id = "' + gid + '" AND wettkampfbaeume.id = korunden.wettkampfbaum_id AND korunden.id = begegnungen.runden_id', function (error, results, fields) {
|
||||
// db().query('SELECT * FROM wettkampfbaeume, korunden, begegnungen WHERE wettkampfbaeume.gruppen_id = "' + gid + '" AND wettkampfbaeume.id = korunden.wettkampfbaum_id AND korunden.id = begegnungen.runden_id', function (error, results, fields) {
|
||||
// db().query('SELECT * FROM encounters WHERE gruppen_id = ' + gid, function (error, results, fields) {
|
||||
const sql = 'SELECT * FROM encounters WHERE gruppen_id = ' + gid + ' ORDER BY begegnung DESC'
|
||||
request.app.db.query(sql, (err, results) => {
|
||||
if (err) console.error(err)
|
||||
// console.log('result', results);
|
||||
return resolve(results)
|
||||
})
|
||||
})
|
||||
},
|
||||
// TODO CORS ENTFERNE
|
||||
cors: {
|
||||
origin: ['*'],
|
||||
additionalHeaders: ['cache-control', 'x-requested-with']
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
// Alle gemeldeten Einzel registrationen (teilnehmer.id, disziplin) des Turniers x
|
||||
method: 'GET',
|
||||
path: '/getSingleRegistrations/{tid}',
|
||||
handler: async (request, h) => {
|
||||
return new Promise((resolve) => {
|
||||
const tid = request.params.tid;
|
||||
const token = request.query.token;
|
||||
const decoded = jwt.verify(token, process.env.JWT_KEY);
|
||||
const aid = decoded.id;
|
||||
const sql = `SELECT turniergruppen.disziplin, turniergruppen.gid, turniergruppen.pool, teilnehmer_turniergruppe.teilnehmer_id, teilnehmer.name, teilnehmer.vorname, teilnehmer.verein, teilnehmer.gurt, teilnehmer.geschlecht
|
||||
options: {
|
||||
validate: {
|
||||
params: {
|
||||
gid: Joi.number().integer().min(0),
|
||||
},
|
||||
},
|
||||
// TODO CORS ENTFERNE
|
||||
cors: {
|
||||
origin: ['*'],
|
||||
additionalHeaders: ['cache-control', 'x-requested-with'],
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
// Teilnehmer zu ID
|
||||
method: 'GET',
|
||||
path: '/participant/{id}',
|
||||
handler: async (request, h) => {
|
||||
return new Promise((resolve) => {
|
||||
const id = request.params.id
|
||||
const sql =
|
||||
'SELECT teilnehmer.id, teilnehmer.vorname, teilnehmer.name, teilnehmer.verein FROM starter, teilnehmer, begegnungen WHERE begegnungen.id = "' +
|
||||
id +
|
||||
'" AND begegnungen.id = starter.begegnungs_id AND starter.teilnehmer_id = teilnehmer.id'
|
||||
request.app.db.query(sql, (err, results) => {
|
||||
if (err) console.error(err)
|
||||
// console.log('result', results);
|
||||
return resolve(results)
|
||||
})
|
||||
})
|
||||
},
|
||||
options: {
|
||||
validate: {
|
||||
params: {
|
||||
id: Joi.number().integer().min(0),
|
||||
},
|
||||
},
|
||||
// TODO CORS ENTFERNE
|
||||
cors: {
|
||||
origin: ['*'],
|
||||
additionalHeaders: ['cache-control', 'x-requested-with'],
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
// Alle gemeldeten Einzel registrationen (teilnehmer.id, disziplin) des Turniers x
|
||||
method: 'GET',
|
||||
path: '/getSingleRegistrations/{tid}',
|
||||
handler: async (request, h) => {
|
||||
return new Promise((resolve) => {
|
||||
const tid = request.params.tid
|
||||
const token = request.query.token
|
||||
const decoded = jwt.verify(token, process.env.JWT_KEY)
|
||||
const aid = decoded.id
|
||||
const sql = `SELECT turniergruppen.disziplin, turniergruppen.gid, turniergruppen.pool, teilnehmer_turniergruppe.teilnehmer_id, teilnehmer.name, teilnehmer.vorname, teilnehmer.verein, teilnehmer.gurt, teilnehmer.geschlecht
|
||||
FROM turniergruppen, teilnehmer_turniergruppe, teilnehmer
|
||||
WHERE turnier_id = ${tid}
|
||||
AND teilnehmer_turniergruppe.turniergruppe_id = turniergruppen.id
|
||||
AND teilnehmer_turniergruppe.teilnehmer_id = teilnehmer.id
|
||||
AND (turniergruppen.disziplin = 'Kumite-Einzel' OR turniergruppen.disziplin = 'Kata-Einzel')
|
||||
AND teilnehmer.account_id = ${aid}`;
|
||||
AND teilnehmer.account_id = ${aid}`
|
||||
|
||||
request.app.db.query(sql, (err, results) => {
|
||||
if (err) console.error(err);
|
||||
console.log('result', results);
|
||||
return resolve(results);
|
||||
});
|
||||
});
|
||||
},
|
||||
options: {
|
||||
validate: {
|
||||
params: {
|
||||
tid: Joi.number().integer().min(0)
|
||||
}
|
||||
},
|
||||
cors: {
|
||||
origin: ['*'],
|
||||
additionalHeaders: ['cache-control', 'x-requested-with'],
|
||||
exposedHeaders: ['x-kt-account', 'x-kt-admin', 'x-kt-token']
|
||||
},
|
||||
auth: 'admin'
|
||||
}
|
||||
},
|
||||
{
|
||||
// Alle Teilnehmer des Accounts
|
||||
method: 'GET',
|
||||
path: '/participants',
|
||||
handler: async (request, h) => {
|
||||
return new Promise((resolve) => {
|
||||
const token = request.query.token;
|
||||
const decoded = jwt.verify(token, process.env.JWT_KEY);
|
||||
const id = decoded.id;
|
||||
|
||||
const sql = 'SELECT teilnehmer.id, teilnehmer.vorname, teilnehmer.name, teilnehmer.verein, teilnehmer.gurt, teilnehmer.gebDatum, teilnehmer.geschlecht FROM teilnehmer WHERE teilnehmer.account_id =' + id;
|
||||
request.app.db.query(sql, (err, results) => {
|
||||
if (err) console.error(err);
|
||||
// console.log('result', results);
|
||||
return resolve(results);
|
||||
});
|
||||
});
|
||||
},
|
||||
options: {
|
||||
// TODO CORS ENTFERNE
|
||||
cors: {
|
||||
origin: ['*'],
|
||||
additionalHeaders: ['cache-control', 'x-requested-with']
|
||||
},
|
||||
auth: 'admin'
|
||||
}
|
||||
},
|
||||
{
|
||||
// Alle Teilnehmer
|
||||
// todo: ADMINCHECK ODER TURNIERERSTELLER
|
||||
method: 'GET',
|
||||
path: '/allParticipants',
|
||||
handler: async (request, h) => {
|
||||
const p = new Promise((resolve, reject) => {
|
||||
const token = request.query.token;
|
||||
const decoded = jwt.verify(token, process.env.JWT_KEY);
|
||||
|
||||
if (decoded.admin === 'y') {
|
||||
const sql = 'SELECT teilnehmer.id, teilnehmer.vorname, teilnehmer.name, teilnehmer.verein, teilnehmer.gurt, teilnehmer.gebDatum, teilnehmer.geschlecht FROM teilnehmer';
|
||||
request.app.db.query(sql, (err, results) => {
|
||||
if (err) console.error(err);
|
||||
if (err) console.error(err)
|
||||
console.log('result', results)
|
||||
return resolve(results)
|
||||
})
|
||||
})
|
||||
},
|
||||
options: {
|
||||
validate: {
|
||||
params: {
|
||||
tid: Joi.number().integer().min(0),
|
||||
},
|
||||
},
|
||||
cors: {
|
||||
origin: ['*'],
|
||||
additionalHeaders: ['cache-control', 'x-requested-with'],
|
||||
exposedHeaders: ['x-kt-account', 'x-kt-admin', 'x-kt-token'],
|
||||
},
|
||||
auth: 'admin',
|
||||
},
|
||||
},
|
||||
{
|
||||
// Alle Teilnehmer des Accounts
|
||||
method: 'GET',
|
||||
path: '/participants',
|
||||
handler: async (request, h) => {
|
||||
return new Promise((resolve) => {
|
||||
const token = request.query.token
|
||||
const decoded = jwt.verify(token, process.env.JWT_KEY)
|
||||
const id = decoded.id
|
||||
|
||||
const sql =
|
||||
'SELECT teilnehmer.id, teilnehmer.vorname, teilnehmer.name, teilnehmer.verein, teilnehmer.gurt, teilnehmer.gebDatum, teilnehmer.geschlecht FROM teilnehmer WHERE teilnehmer.account_id =' +
|
||||
id
|
||||
request.app.db.query(sql, (err, results) => {
|
||||
if (err) console.error(err)
|
||||
// console.log('result', results);
|
||||
return resolve(results);
|
||||
});
|
||||
|
||||
// db().query('SELECT teilnehmer.id, teilnehmer.vorname, teilnehmer.name, teilnehmer.verein, teilnehmer.gurt, teilnehmer.gebDatum, teilnehmer.geschlecht FROM teilnehmer', function (error, results) {
|
||||
// if (error) throw error;
|
||||
// // console.log(results);
|
||||
// db().end();
|
||||
// return resolve(results);
|
||||
// });
|
||||
|
||||
} else {
|
||||
return reject(new Error('allParticipants: not allowed accountID: ' + decoded.id));
|
||||
}
|
||||
});
|
||||
console.log(p);
|
||||
return p;
|
||||
},
|
||||
options: {
|
||||
// TODO CORS ENTFERNE
|
||||
cors: {
|
||||
origin: ['*'],
|
||||
additionalHeaders: ['cache-control', 'x-requested-with']
|
||||
return resolve(results)
|
||||
})
|
||||
})
|
||||
},
|
||||
auth: 'admin',
|
||||
}
|
||||
},
|
||||
{
|
||||
// Teilnehmer hinzufügen
|
||||
method: 'PUT',
|
||||
path: '/registerParticipant',
|
||||
handler: async (request, h) => {
|
||||
return new Promise((resolve) => {
|
||||
const token = request.query.token;
|
||||
const decoded = jwt.verify(token, process.env.JWT_KEY);
|
||||
const aid = decoded.id;
|
||||
const d = new Date(Date.now());
|
||||
const now = d.getFullYear() + "-" +
|
||||
("00" + (d.getMonth() + 1)).slice(-2) + "-" +
|
||||
("00" + d.getDate()).slice(-2) + " " +
|
||||
("00" + d.getHours()).slice(-2) + ":" +
|
||||
("00" + d.getMinutes()).slice(-2) + ":" +
|
||||
("00" + d.getSeconds()).slice(-2)
|
||||
// const utc_timestamp = Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate(), now.getUTCHours(), now.getUTCMinutes(), now.getUTCSeconds(), now.getUTCMilliseconds());
|
||||
const {teilnehmerId, turniergruppeId} = request.payload;
|
||||
console.log('teilnehmerId', teilnehmerId , 'turniergruppeId', turniergruppeId[0].id, 'now', now);
|
||||
const sql = `INSERT INTO teilnehmer_turniergruppe (id, teilnehmer_id, turniergruppe_id, timestamp) VALUES (NULL, ${teilnehmerId}, ${turniergruppeId[0].id}, '${now}');`;
|
||||
|
||||
request.app.db.query(sql, (err, results) => {
|
||||
if (err) console.error(err);
|
||||
console.log('result', results);
|
||||
return resolve(results);
|
||||
});
|
||||
});
|
||||
},
|
||||
options: {
|
||||
cors: {
|
||||
origin: ['*'],
|
||||
additionalHeaders: ['cache-control', 'x-requested-with'],
|
||||
exposedHeaders: ['x-kt-account', 'x-kt-admin', 'x-kt-token']
|
||||
options: {
|
||||
// TODO CORS ENTFERNE
|
||||
cors: {
|
||||
origin: ['*'],
|
||||
additionalHeaders: ['cache-control', 'x-requested-with'],
|
||||
},
|
||||
auth: 'admin',
|
||||
},
|
||||
auth: 'admin'
|
||||
}
|
||||
},
|
||||
{
|
||||
// Teilnehmer abmelden
|
||||
method: 'PUT',
|
||||
path: '/deregisterParticipant',
|
||||
handler: async (request, h) => {
|
||||
return new Promise((resolve) => {
|
||||
const d = new Date(Date.now());
|
||||
const now = d.getFullYear() + "-" +
|
||||
("00" + (d.getMonth() + 1)).slice(-2) + "-" +
|
||||
("00" + d.getDate()).slice(-2) + " " +
|
||||
("00" + d.getHours()).slice(-2) + ":" +
|
||||
("00" + d.getMinutes()).slice(-2) + ":" +
|
||||
("00" + d.getSeconds()).slice(-2)
|
||||
const {teilnehmerId, turniergruppeId} = request.payload;
|
||||
console.log('teilnehmerId', teilnehmerId , 'turniergruppeId', turniergruppeId[0].id, 'now', now);
|
||||
const sql = `DELETE FROM teilnehmer_turniergruppe WHERE teilnehmer_id = ${teilnehmerId} AND turniergruppe_id = ${turniergruppeId[0].id}`;
|
||||
|
||||
request.app.db.query(sql, (err, results) => {
|
||||
if (err) console.error(err);
|
||||
console.log('result', results);
|
||||
return resolve(results);
|
||||
});
|
||||
});
|
||||
},
|
||||
options: {
|
||||
cors: {
|
||||
origin: ['*'],
|
||||
additionalHeaders: ['cache-control', 'x-requested-with'],
|
||||
exposedHeaders: ['x-kt-account', 'x-kt-admin', 'x-kt-token']
|
||||
},
|
||||
auth: 'admin'
|
||||
}
|
||||
},
|
||||
{
|
||||
// Teilnehmer hinzufügen
|
||||
method: 'POST',
|
||||
path: '/addParticipant',
|
||||
handler: async (request, h) => {
|
||||
const p = new Promise((resolve) => {
|
||||
const token = request.query.token;
|
||||
const decoded = jwt.verify(token, process.env.JWT_KEY);
|
||||
const aid = decoded.id;
|
||||
const {name, vorname, verein, gurt, gebDatum, geschlecht} = request.payload;
|
||||
let birthDate = gebDatum.split('.');
|
||||
birthDate = birthDate.reverse().join('-');
|
||||
const sql = `INSERT INTO teilnehmer (name, vorname, verein, gurt, gebDatum, geschlecht, account_id) VALUES ("${name}","${vorname}","${verein}","${gurt}","${birthDate}","${geschlecht}","${aid}");`;
|
||||
{
|
||||
// Alle Teilnehmer
|
||||
// todo: ADMINCHECK ODER TURNIERERSTELLER
|
||||
method: 'GET',
|
||||
path: '/allParticipants',
|
||||
handler: async (request, h) => {
|
||||
const p = new Promise((resolve, reject) => {
|
||||
const token = request.query.token
|
||||
const decoded = jwt.verify(token, process.env.JWT_KEY)
|
||||
|
||||
request.app.db.query(sql, (err, results) => {
|
||||
if (err) console.error(err);
|
||||
console.log('result', results);
|
||||
return resolve(results);
|
||||
});
|
||||
});
|
||||
return p;
|
||||
},
|
||||
options: {
|
||||
cors: {
|
||||
origin: ['*'],
|
||||
additionalHeaders: ['cache-control', 'x-requested-with'],
|
||||
exposedHeaders: ['x-kt-account', 'x-kt-admin', 'x-kt-token']
|
||||
},
|
||||
auth: 'admin',
|
||||
}
|
||||
},
|
||||
{
|
||||
// Teilnehmer editieren
|
||||
//TODO use PUT
|
||||
method: 'POST',
|
||||
path: '/editParticipant',
|
||||
handler: async (request, h) => {
|
||||
return new Promise((resolve) => {
|
||||
const token = request.query.token;
|
||||
const decoded = jwt.verify(token, process.env.JWT_KEY);
|
||||
const aid = decoded.id;
|
||||
const {id, name, vorname, verein, gurt, gebDatum, geschlecht} = request.payload;
|
||||
let birthDate = gebDatum.split('.');
|
||||
birthDate = birthDate.reverse().join('-');
|
||||
const sql =`Update teilnehmer SET name = '${name}', vorname = '${vorname}', verein = '${verein}', gurt = '${gurt}', gebDatum = '${birthDate}', geschlecht = '${geschlecht}'
|
||||
WHERE id= '${id}' AND account_id = ${aid}`;
|
||||
if (decoded.admin === 'y') {
|
||||
const sql = 'SELECT teilnehmer.id, teilnehmer.vorname, teilnehmer.name, teilnehmer.verein, teilnehmer.gurt, teilnehmer.gebDatum, teilnehmer.geschlecht FROM teilnehmer'
|
||||
request.app.db.query(sql, (err, results) => {
|
||||
if (err) console.error(err)
|
||||
// console.log('result', results);
|
||||
return resolve(results)
|
||||
})
|
||||
|
||||
request.app.db.query(sql, (err, results) => {
|
||||
if (err) console.error(err);
|
||||
console.log('result', results);
|
||||
return resolve(results);
|
||||
});
|
||||
});
|
||||
},
|
||||
options: {
|
||||
cors: {
|
||||
origin: ['*'],
|
||||
additionalHeaders: ['cache-control', 'x-requested-with'],
|
||||
exposedHeaders: ['x-kt-account', 'x-kt-admin', 'x-kt-token']
|
||||
// db().query('SELECT teilnehmer.id, teilnehmer.vorname, teilnehmer.name, teilnehmer.verein, teilnehmer.gurt, teilnehmer.gebDatum, teilnehmer.geschlecht FROM teilnehmer', function (error, results) {
|
||||
// if (error) throw error;
|
||||
// // console.log(results);
|
||||
// db().end();
|
||||
// return resolve(results);
|
||||
// });
|
||||
} else {
|
||||
return reject(new Error('allParticipants: not allowed accountID: ' + decoded.id))
|
||||
}
|
||||
})
|
||||
console.log(p)
|
||||
return p
|
||||
},
|
||||
auth: 'admin'
|
||||
}
|
||||
},
|
||||
{
|
||||
// Teilnehmer löschen (aus eigenen Account)
|
||||
method: 'DELETE',
|
||||
path: '/participant/{id}',
|
||||
handler: async (request, h) => {
|
||||
return new Promise((resolve) => {
|
||||
const id = request.params.id;
|
||||
const token = request.query.token;
|
||||
const decoded = jwt.verify(token, process.env.JWT_KEY);
|
||||
const aid = decoded.id;
|
||||
const sql = 'DELETE FROM teilnehmer WHERE account_id =' + aid + ' AND id =' + id;
|
||||
options: {
|
||||
// TODO CORS ENTFERNE
|
||||
cors: {
|
||||
origin: ['*'],
|
||||
additionalHeaders: ['cache-control', 'x-requested-with'],
|
||||
},
|
||||
auth: 'admin',
|
||||
},
|
||||
},
|
||||
{
|
||||
// Teilnehmer hinzufügen
|
||||
method: 'PUT',
|
||||
path: '/registerParticipant',
|
||||
handler: async (request, h) => {
|
||||
return new Promise((resolve) => {
|
||||
const token = request.query.token
|
||||
const decoded = jwt.verify(token, process.env.JWT_KEY)
|
||||
const aid = decoded.id
|
||||
const { teilnehmerId, turniergruppeId } = request.payload
|
||||
console.log('teilnehmerId', teilnehmerId, 'turniergruppeId', turniergruppeId[0].id, 'now', utils.timestamp())
|
||||
const sql = `INSERT INTO teilnehmer_turniergruppe (id, teilnehmer_id, turniergruppe_id, timestamp) VALUES (NULL, ${teilnehmerId}, ${
|
||||
turniergruppeId[0].id
|
||||
}, '${utils.timestamp()}');`
|
||||
|
||||
request.app.db.query(sql, (err, results) => {
|
||||
if (err) console.error(err);
|
||||
console.log('result', results);
|
||||
return resolve(results);
|
||||
});
|
||||
});
|
||||
},
|
||||
options: {
|
||||
// TODO CORS ENTFERNE
|
||||
cors: {
|
||||
origin: ['*'],
|
||||
additionalHeaders: ['cache-control', 'x-requested-with']
|
||||
request.app.db.query(sql, (err, results) => {
|
||||
if (err) console.error(err)
|
||||
console.log('result', results)
|
||||
return resolve(results)
|
||||
})
|
||||
})
|
||||
},
|
||||
auth: 'admin'
|
||||
}
|
||||
},
|
||||
])};
|
||||
options: {
|
||||
cors: {
|
||||
origin: ['*'],
|
||||
additionalHeaders: ['cache-control', 'x-requested-with'],
|
||||
exposedHeaders: ['x-kt-account', 'x-kt-admin', 'x-kt-token'],
|
||||
},
|
||||
auth: 'admin',
|
||||
},
|
||||
},
|
||||
{
|
||||
// Teilnehmer abmelden
|
||||
method: 'PUT',
|
||||
path: '/deregisterParticipant',
|
||||
handler: async (request, h) => {
|
||||
return new Promise((resolve) => {
|
||||
const { teilnehmerId, turniergruppeId } = request.payload
|
||||
console.log('teilnehmerId', teilnehmerId, 'turniergruppeId', turniergruppeId[0].id)
|
||||
const sql = `DELETE FROM teilnehmer_turniergruppe WHERE teilnehmer_id = ${teilnehmerId} AND turniergruppe_id = ${turniergruppeId[0].id}`
|
||||
request.app.db.query(sql, (err, results) => {
|
||||
if (err) console.error(err)
|
||||
console.log('result', results)
|
||||
return resolve(results)
|
||||
})
|
||||
})
|
||||
},
|
||||
options: {
|
||||
cors: {
|
||||
origin: ['*'],
|
||||
additionalHeaders: ['cache-control', 'x-requested-with'],
|
||||
exposedHeaders: ['x-kt-account', 'x-kt-admin', 'x-kt-token'],
|
||||
},
|
||||
auth: 'admin',
|
||||
},
|
||||
},
|
||||
{
|
||||
// Teilnehmer hinzufügen
|
||||
method: 'POST',
|
||||
path: '/addParticipant',
|
||||
handler: async (request, h) => {
|
||||
const p = new Promise((resolve) => {
|
||||
const token = request.query.token
|
||||
const decoded = jwt.verify(token, process.env.JWT_KEY)
|
||||
const aid = decoded.id
|
||||
const { name, vorname, verein, gurt, gebDatum, geschlecht } = request.payload
|
||||
let birthDate = gebDatum.split('.')
|
||||
birthDate = birthDate.reverse().join('-')
|
||||
const sql = `INSERT INTO teilnehmer (name, vorname, verein, gurt, gebDatum, geschlecht, account_id) VALUES ("${name}","${vorname}","${verein}","${gurt}","${birthDate}","${geschlecht}","${aid}");`
|
||||
|
||||
request.app.db.query(sql, (err, results) => {
|
||||
if (err) console.error(err)
|
||||
console.log('result', results)
|
||||
return resolve(results)
|
||||
})
|
||||
})
|
||||
return p
|
||||
},
|
||||
options: {
|
||||
cors: {
|
||||
origin: ['*'],
|
||||
additionalHeaders: ['cache-control', 'x-requested-with'],
|
||||
exposedHeaders: ['x-kt-account', 'x-kt-admin', 'x-kt-token'],
|
||||
},
|
||||
auth: 'admin',
|
||||
},
|
||||
},
|
||||
{
|
||||
// Teilnehmer editieren
|
||||
//TODO use PUT
|
||||
method: 'POST',
|
||||
path: '/editParticipant',
|
||||
handler: async (request, h) => {
|
||||
return new Promise((resolve) => {
|
||||
const token = request.query.token
|
||||
const decoded = jwt.verify(token, process.env.JWT_KEY)
|
||||
const aid = decoded.id
|
||||
const { id, name, vorname, verein, gurt, gebDatum, geschlecht } = request.payload
|
||||
let birthDate = gebDatum.split('.')
|
||||
birthDate = birthDate.reverse().join('-')
|
||||
const sql = `Update teilnehmer SET name = '${name}', vorname = '${vorname}', verein = '${verein}', gurt = '${gurt}', gebDatum = '${birthDate}', geschlecht = '${geschlecht}'
|
||||
WHERE id= '${id}' AND account_id = ${aid}`
|
||||
|
||||
request.app.db.query(sql, (err, results) => {
|
||||
if (err) console.error(err)
|
||||
console.log('result', results)
|
||||
return resolve(results)
|
||||
})
|
||||
})
|
||||
},
|
||||
options: {
|
||||
cors: {
|
||||
origin: ['*'],
|
||||
additionalHeaders: ['cache-control', 'x-requested-with'],
|
||||
exposedHeaders: ['x-kt-account', 'x-kt-admin', 'x-kt-token'],
|
||||
},
|
||||
auth: 'admin',
|
||||
},
|
||||
},
|
||||
{
|
||||
// Teilnehmer löschen (aus eigenen Account)
|
||||
method: 'DELETE',
|
||||
path: '/participant/{id}',
|
||||
handler: async (request, h) => {
|
||||
return new Promise((resolve) => {
|
||||
const id = request.params.id
|
||||
const token = request.query.token
|
||||
const decoded = jwt.verify(token, process.env.JWT_KEY)
|
||||
const aid = decoded.id
|
||||
const sql = 'DELETE FROM teilnehmer WHERE account_id =' + aid + ' AND id =' + id
|
||||
|
||||
request.app.db.query(sql, (err, results) => {
|
||||
if (err) console.error(err)
|
||||
console.log('result', results)
|
||||
return resolve(results)
|
||||
})
|
||||
})
|
||||
},
|
||||
options: {
|
||||
// TODO CORS ENTFERNE
|
||||
cors: {
|
||||
origin: ['*'],
|
||||
additionalHeaders: ['cache-control', 'x-requested-with'],
|
||||
},
|
||||
auth: 'admin',
|
||||
},
|
||||
},
|
||||
])
|
||||
}
|
||||
|
||||
182
routes/pool.js
Normal file
182
routes/pool.js
Normal file
@@ -0,0 +1,182 @@
|
||||
const Joi = require('joi')
|
||||
const db = require('../db')
|
||||
const jwt = require('jsonwebtoken')
|
||||
const utils = require('../utils')
|
||||
|
||||
exports.configurePoolRoutes = (server) => {
|
||||
// server.route accepts an object or an array
|
||||
return server.route([
|
||||
{
|
||||
// Pools erstellen
|
||||
// TODO: edit admincheck
|
||||
method: 'POST',
|
||||
path: '/pools/create',
|
||||
handler: async (request, h) => {
|
||||
const p = new Promise((resolve, reject) => {
|
||||
const token = request.query.token
|
||||
const decoded = jwt.verify(token, process.env.JWT_KEY)
|
||||
const { groups } = request.payload
|
||||
|
||||
// TODO: aid = turnier ersteller 1. über tid die accountid abfragen = acountid from turnier (|| acountid from turnier === decoded.id)
|
||||
if (decoded.admin !== 'y') {
|
||||
return reject(new Error('/createPools: not allowed accountID: ' + decoded.id))
|
||||
}
|
||||
// console.log(JSON.stringify(request.payload, null, 4));
|
||||
// console.log('groups',groups);
|
||||
|
||||
// Für Alle Gruppen des Turniers
|
||||
let pools = {
|
||||
B: { id: null, participants: [] },
|
||||
C: { id: null, participants: [] },
|
||||
D: { id: null, participants: [] },
|
||||
}
|
||||
|
||||
for (let i = 0; i < groups.length; i++) {
|
||||
const discipline = groups[i].disziplin
|
||||
|
||||
// 1. Abfragen, wie viele Teilnehmer
|
||||
// 2. Neue Gruppen in DB erstellen
|
||||
// 2. Teilnehmer neu zuordnen
|
||||
if (discipline) {
|
||||
if (discipline == 'Kata-Einzel' || discipline == 'Kumite-Einzel') {
|
||||
let sql = `SELECT teilnehmer_turniergruppe.teilnehmer_id, teilnehmer.verein FROM teilnehmer_turniergruppe, teilnehmer
|
||||
WHERE turniergruppe_id = ${groups[i].id}
|
||||
AND teilnehmer.id=teilnehmer_turniergruppe.teilnehmer_id
|
||||
ORDER BY verein`
|
||||
|
||||
request.app.db.query(sql, (err, groupParticipants) => {
|
||||
if (err) console.error(err)
|
||||
const groupCount = groupParticipants.length
|
||||
console.log('Anzahl Teilnehmer ' + groupCount + ': Gruppe ' + groups[i].id)
|
||||
|
||||
// Wenn Gruppe größer 16 erstelle Neue Gruppe und verteile die Teilnehmer auf die Gruppen.
|
||||
|
||||
// Gruppe ist zwischen 16-33
|
||||
if (16 < groupCount && groupCount < 33) {
|
||||
// Gruppe Pool B in db schreiben
|
||||
sql = `INSERT INTO karateturniere.turniergruppen
|
||||
(gid, turnier_id, geschlecht, gurtVon, gurtBis, disziplin, altervon, alterbis, pool, finalteilnehmer, platz1, platz2, platz3, platz4, platz1team, platz2team, platz3team, platz4team, results)
|
||||
VALUES(${groups[i].gid}, ${groups[i].turnier_id}, '${groups[i].geschlecht}', '${groups[i].gurtVon}', '${groups[i].gurtBis}', '${groups[i].disziplin}', '${groups[i].altervon}', '${groups[i].alterbis}', 'B', 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL);`
|
||||
// console.log('sql',sql)
|
||||
request.app.db.query(sql, (err, results) => {
|
||||
if (err) console.error(err)
|
||||
|
||||
// reset pools
|
||||
pools.B.id = results.insertId
|
||||
pools.B.participants = []
|
||||
pools.C.participants = []
|
||||
pools.D.participants = []
|
||||
|
||||
console.log('pools.B.id', pools.B.id)
|
||||
console.log('groupCount', groupCount)
|
||||
// console.log('groupParticipants', groupParticipants);
|
||||
|
||||
for (let j = 0; j < groupCount; j++) {
|
||||
const randZeroOne = Math.round(Math.random())
|
||||
groupParticipants[j + randZeroOne] && pools.B.participants.push(groupParticipants[j + randZeroOne].teilnehmer_id)
|
||||
j++
|
||||
}
|
||||
console.log(pools.B.participants)
|
||||
|
||||
// generiere SQL umd alle aus Pool A nach Pool B umzuschreiben
|
||||
sql = ''
|
||||
pools.B.participants.forEach((el) => {
|
||||
sql += `UPDATE karateturniere.teilnehmer_turniergruppe
|
||||
SET teilnehmer_id=${el}, turniergruppe_id=${pools.B.id}, timestamp='${utils.timestamp()}'
|
||||
WHERE teilnehmer_id= ${el} AND turniergruppe_id = ${groups[i].id};
|
||||
`
|
||||
})
|
||||
|
||||
request.app.db.query(sql, (err, results) => {
|
||||
if (err) console.error(err)
|
||||
})
|
||||
})
|
||||
} else if (33 <= groupCount && groupCount < 65) {
|
||||
// Gruppe ist zwischen 33 - 65
|
||||
|
||||
// Gruppe Pool B, C, D in DB schreiben
|
||||
sql = `INSERT INTO karateturniere.turniergruppen
|
||||
(gid, turnier_id, geschlecht, gurtVon, gurtBis, disziplin, altervon, alterbis, pool, finalteilnehmer, platz1, platz2, platz3, platz4, platz1team, platz2team, platz3team, platz4team, results)
|
||||
VALUES(${groups[i].gid}, ${groups[i].turnier_id}, '${groups[i].geschlecht}', '${groups[i].gurtVon}', '${groups[i].gurtBis}', '${groups[i].disziplin}', '${groups[i].altervon}', '${groups[i].alterbis}', 'B', 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL);
|
||||
INSERT INTO karateturniere.turniergruppen
|
||||
(gid, turnier_id, geschlecht, gurtVon, gurtBis, disziplin, altervon, alterbis, pool, finalteilnehmer, platz1, platz2, platz3, platz4, platz1team, platz2team, platz3team, platz4team, results)
|
||||
VALUES(${groups[i].gid}, ${groups[i].turnier_id}, '${groups[i].geschlecht}', '${groups[i].gurtVon}', '${groups[i].gurtBis}', '${groups[i].disziplin}', '${groups[i].altervon}', '${groups[i].alterbis}', 'C', 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL);
|
||||
INSERT INTO karateturniere.turniergruppen
|
||||
(gid, turnier_id, geschlecht, gurtVon, gurtBis, disziplin, altervon, alterbis, pool, finalteilnehmer, platz1, platz2, platz3, platz4, platz1team, platz2team, platz3team, platz4team, results)
|
||||
VALUES(${groups[i].gid}, ${groups[i].turnier_id}, '${groups[i].geschlecht}', '${groups[i].gurtVon}', '${groups[i].gurtBis}', '${groups[i].disziplin}', '${groups[i].altervon}', '${groups[i].alterbis}', 'D', 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL);`
|
||||
|
||||
request.app.db.query(sql, (err, results) => {
|
||||
if (err) console.error(err)
|
||||
console.log('results', results[0])
|
||||
|
||||
// reset pools
|
||||
pools.B.participants = []
|
||||
pools.C.participants = []
|
||||
pools.D.participants = []
|
||||
pools.B.id = results[0].insertId
|
||||
pools.C.id = results[1].insertId
|
||||
pools.D.id = results[2].insertId
|
||||
console.log('pools', pools)
|
||||
console.log('groupCount', groupCount)
|
||||
|
||||
// console.log('groupParticipants', groupParticipants);
|
||||
|
||||
const rand = [0, 1, 2, 3]
|
||||
// shuffle Teams array
|
||||
rand.sort(() => Math.round(Math.random()) - 0.5)
|
||||
console.log('rand', rand)
|
||||
for (let j = 0; j < groupCount; j++) {
|
||||
groupParticipants[j + rand[0]] && pools.B.participants.push(groupParticipants[j + rand[0]].teilnehmer_id)
|
||||
groupParticipants[j + rand[1]] && pools.C.participants.push(groupParticipants[j + rand[1]].teilnehmer_id)
|
||||
groupParticipants[j + rand[2]] && pools.D.participants.push(groupParticipants[j + rand[2]].teilnehmer_id)
|
||||
j += 3
|
||||
}
|
||||
|
||||
console.log('pools', pools)
|
||||
|
||||
// generiere SQL umd alle aus Pool A nach Pool B,C,D umzuschreiben
|
||||
sql = ''
|
||||
pools.B.participants.forEach((el) => {
|
||||
sql += `UPDATE karateturniere.teilnehmer_turniergruppe
|
||||
SET teilnehmer_id=${el}, turniergruppe_id=${pools.B.id}, timestamp='${utils.timestamp()}'
|
||||
WHERE teilnehmer_id= ${el} AND turniergruppe_id = ${groups[i].id};`
|
||||
})
|
||||
pools.C.participants.forEach((el) => {
|
||||
sql += `UPDATE karateturniere.teilnehmer_turniergruppe
|
||||
SET teilnehmer_id=${el}, turniergruppe_id=${pools.C.id}, timestamp='${utils.timestamp()}'
|
||||
WHERE teilnehmer_id= ${el} AND turniergruppe_id = ${groups[i].id};`
|
||||
})
|
||||
pools.D.participants.forEach((el) => {
|
||||
sql += `UPDATE karateturniere.teilnehmer_turniergruppe
|
||||
SET teilnehmer_id=${el}, turniergruppe_id=${pools.D.id}, timestamp='${utils.timestamp()}'
|
||||
WHERE teilnehmer_id= ${el} AND turniergruppe_id = ${groups[i].id};`
|
||||
})
|
||||
|
||||
request.app.db.query(sql, (err, results) => {
|
||||
if (err) console.error(err)
|
||||
})
|
||||
})
|
||||
}
|
||||
})
|
||||
} else {
|
||||
// TODO Teams ändern
|
||||
}
|
||||
}
|
||||
}
|
||||
return resolve(true)
|
||||
})
|
||||
|
||||
console.log(p)
|
||||
return p
|
||||
},
|
||||
options: {
|
||||
cors: {
|
||||
origin: ['*'],
|
||||
additionalHeaders: ['cache-control', 'x-requested-with'],
|
||||
exposedHeaders: ['x-kt-account', 'x-kt-admin', 'x-kt-token'],
|
||||
},
|
||||
auth: 'admin',
|
||||
},
|
||||
},
|
||||
])
|
||||
}
|
||||
456
routes/team.js
456
routes/team.js
@@ -1,257 +1,247 @@
|
||||
const Joi = require('joi');
|
||||
const jwt = require('jsonwebtoken');
|
||||
const Joi = require('joi')
|
||||
const jwt = require('jsonwebtoken')
|
||||
const utils = require('../utils')
|
||||
|
||||
exports.configureTeamRoutes = (server) => {
|
||||
// server.route accepts an object or an array
|
||||
return server.route([
|
||||
{
|
||||
// Alle Teams
|
||||
method: 'GET',
|
||||
path: '/teams',
|
||||
handler: async (request, h) => {
|
||||
return new Promise((resolve) => {
|
||||
const sql = "SELECT teams.id, teams.teamName FROM teams";
|
||||
request.app.db.query(sql, (err, results) => {
|
||||
if (err) console.error(err);
|
||||
// console.log('result', results);
|
||||
return resolve(results);
|
||||
});
|
||||
});
|
||||
},
|
||||
options: {
|
||||
// TODO CORS ENTFERNE
|
||||
auth: false,
|
||||
cors: {
|
||||
origin: ['*'],
|
||||
additionalHeaders: ['cache-control', 'x-requested-with']
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
// Alle Teams der Gruppe
|
||||
method: 'GET',
|
||||
path: '/group/{gid}/teams',
|
||||
handler: async (request, h) => {
|
||||
return new Promise((resolve) => {
|
||||
const gid = request.params.gid;
|
||||
const sql = "SELECT teams.id, teams.teamName FROM team_turniergruppe, teams WHERE turniergruppe_id = " + gid + " AND team_id = teams.id";
|
||||
request.app.db.query(sql, (err, results) => {
|
||||
if (err) console.error(err);
|
||||
// console.log('result', results);
|
||||
return resolve(results);
|
||||
});
|
||||
});
|
||||
},
|
||||
options: {
|
||||
validate: {
|
||||
params: {
|
||||
gid: Joi.number().integer().min(0)
|
||||
}
|
||||
{
|
||||
// Alle Teams
|
||||
method: 'GET',
|
||||
path: '/teams',
|
||||
handler: async (request, h) => {
|
||||
return new Promise((resolve) => {
|
||||
const sql = 'SELECT teams.id, teams.teamName FROM teams'
|
||||
request.app.db.query(sql, (err, results) => {
|
||||
if (err) console.error(err)
|
||||
// console.log('result', results);
|
||||
return resolve(results)
|
||||
})
|
||||
})
|
||||
},
|
||||
// TODO CORS ENTFERNE
|
||||
cors: {
|
||||
origin: ['*'],
|
||||
additionalHeaders: ['cache-control', 'x-requested-with']
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
// Team zu ID
|
||||
method: 'GET',
|
||||
path: '/teams/{id}',
|
||||
handler: async (request, h) => {
|
||||
return new Promise((resolve) => {
|
||||
const id = request.params.id;
|
||||
const sql = 'SELECT teams.id, teams.teamName FROM starter, teams, begegnungen WHERE begegnungen.id = "' + id + '" AND begegnungen.id = starter.begegnungs_id AND starter.team_id = teams.id';
|
||||
request.app.db.query(sql, (err, results) => {
|
||||
if (err) console.error(err);
|
||||
console.log('result', results);
|
||||
return resolve(results);
|
||||
});
|
||||
});
|
||||
},
|
||||
options: {
|
||||
validate: {
|
||||
params: {
|
||||
id: Joi.number().integer().min(0)
|
||||
}
|
||||
options: {
|
||||
// TODO CORS ENTFERNE
|
||||
auth: false,
|
||||
cors: {
|
||||
origin: ['*'],
|
||||
additionalHeaders: ['cache-control', 'x-requested-with'],
|
||||
},
|
||||
},
|
||||
// TODO CORS ENTFERNE
|
||||
cors: {
|
||||
origin: ['*'],
|
||||
additionalHeaders: ['cache-control', 'x-requested-with']
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
/*
|
||||
* Alle gemeldeten Team registrationen
|
||||
* return: (anzahl, gruppenID) des Turniers x
|
||||
*/
|
||||
method: 'GET',
|
||||
path: '/getTeamRegistrations/{tid}',
|
||||
handler: async (request, h) => {
|
||||
return new Promise((resolve) => {
|
||||
const tid = request.params.tid;
|
||||
const token = request.query.token;
|
||||
const decoded = jwt.verify(token, process.env.JWT_KEY);
|
||||
const aid = decoded.id;
|
||||
const sql = `SELECT COUNT(turniergruppen.id) AS count, turniergruppen.id, turniergruppen.disziplin, turniergruppen.gid, turniergruppen.geschlecht, turniergruppen.pool, teams.teamName
|
||||
},
|
||||
{
|
||||
// Alle Teams der Gruppe
|
||||
method: 'GET',
|
||||
path: '/group/{gid}/teams',
|
||||
handler: async (request, h) => {
|
||||
return new Promise((resolve) => {
|
||||
const gid = request.params.gid
|
||||
const sql = 'SELECT teams.id, teams.teamName FROM team_turniergruppe, teams WHERE turniergruppe_id = ' + gid + ' AND team_id = teams.id'
|
||||
request.app.db.query(sql, (err, results) => {
|
||||
if (err) console.error(err)
|
||||
// console.log('result', results);
|
||||
return resolve(results)
|
||||
})
|
||||
})
|
||||
},
|
||||
options: {
|
||||
validate: {
|
||||
params: {
|
||||
gid: Joi.number().integer().min(0),
|
||||
},
|
||||
},
|
||||
// TODO CORS ENTFERNE
|
||||
cors: {
|
||||
origin: ['*'],
|
||||
additionalHeaders: ['cache-control', 'x-requested-with'],
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
// Team zu ID
|
||||
method: 'GET',
|
||||
path: '/teams/{id}',
|
||||
handler: async (request, h) => {
|
||||
return new Promise((resolve) => {
|
||||
const id = request.params.id
|
||||
const sql =
|
||||
'SELECT teams.id, teams.teamName FROM starter, teams, begegnungen WHERE begegnungen.id = "' + id + '" AND begegnungen.id = starter.begegnungs_id AND starter.team_id = teams.id'
|
||||
request.app.db.query(sql, (err, results) => {
|
||||
if (err) console.error(err)
|
||||
console.log('result', results)
|
||||
return resolve(results)
|
||||
})
|
||||
})
|
||||
},
|
||||
options: {
|
||||
validate: {
|
||||
params: {
|
||||
id: Joi.number().integer().min(0),
|
||||
},
|
||||
},
|
||||
// TODO CORS ENTFERNE
|
||||
cors: {
|
||||
origin: ['*'],
|
||||
additionalHeaders: ['cache-control', 'x-requested-with'],
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
/*
|
||||
* Alle gemeldeten Team registrationen
|
||||
* return: (anzahl, gruppenID) des Turniers x
|
||||
*/
|
||||
method: 'GET',
|
||||
path: '/getTeamRegistrations/{tid}',
|
||||
handler: async (request, h) => {
|
||||
return new Promise((resolve) => {
|
||||
const tid = request.params.tid
|
||||
const token = request.query.token
|
||||
const decoded = jwt.verify(token, process.env.JWT_KEY)
|
||||
const aid = decoded.id
|
||||
const sql = `SELECT COUNT(turniergruppen.id) AS count, turniergruppen.id, turniergruppen.disziplin, turniergruppen.gid, turniergruppen.geschlecht, turniergruppen.pool, teams.teamName
|
||||
FROM turniergruppen, team_turniergruppe, teams
|
||||
WHERE turnier_id = ${tid}
|
||||
AND team_turniergruppe.turniergruppe_id = turniergruppen.id
|
||||
AND (turniergruppen.disziplin = 'Kumite-Team' OR turniergruppen.disziplin = 'Kata-Team' OR turniergruppen.disziplin = 'Kata-Team-Mixed')
|
||||
And teams.id = team_turniergruppe.team_id
|
||||
AND teams.account_id = ${aid}
|
||||
GROUP BY turniergruppen.id`;
|
||||
GROUP BY turniergruppen.id`
|
||||
|
||||
request.app.db.query(sql, (err, results) => {
|
||||
if (err) console.error(err);
|
||||
console.log('result', results);
|
||||
return resolve(results);
|
||||
});
|
||||
});
|
||||
},
|
||||
options: {
|
||||
cors: {
|
||||
origin: ['*'],
|
||||
additionalHeaders: ['cache-control', 'x-requested-with'],
|
||||
exposedHeaders: ['x-kt-account', 'x-kt-admin', 'x-kt-token']
|
||||
request.app.db.query(sql, (err, results) => {
|
||||
if (err) console.error(err)
|
||||
console.log('result', results)
|
||||
return resolve(results)
|
||||
})
|
||||
})
|
||||
},
|
||||
auth: 'admin'
|
||||
}
|
||||
},
|
||||
{
|
||||
// Anzahl gemeldeter Teams eines Accounts pro Gruppe
|
||||
method: 'GET',
|
||||
path: '/countTeams/{tid}',
|
||||
handler: async (request, h) => {
|
||||
return new Promise((resolve) => {
|
||||
const tid = request.params.tid;
|
||||
const token = request.query.token;
|
||||
const decoded = jwt.verify(token, process.env.JWT_KEY);
|
||||
const aid = decoded.id;
|
||||
const sql = `SELECT COUNT(*) as n FROM teams AS T1, team_turniergruppe AS T2
|
||||
options: {
|
||||
cors: {
|
||||
origin: ['*'],
|
||||
additionalHeaders: ['cache-control', 'x-requested-with'],
|
||||
exposedHeaders: ['x-kt-account', 'x-kt-admin', 'x-kt-token'],
|
||||
},
|
||||
auth: 'admin',
|
||||
},
|
||||
},
|
||||
{
|
||||
// Anzahl gemeldeter Teams eines Accounts pro Gruppe
|
||||
method: 'GET',
|
||||
path: '/countTeams/{tid}',
|
||||
handler: async (request, h) => {
|
||||
return new Promise((resolve) => {
|
||||
const tid = request.params.tid
|
||||
const token = request.query.token
|
||||
const decoded = jwt.verify(token, process.env.JWT_KEY)
|
||||
const aid = decoded.id
|
||||
const sql = `SELECT COUNT(*) as n FROM teams AS T1, team_turniergruppe AS T2
|
||||
WHERE T1.account_id=${aid}
|
||||
AND T1.id = T2.team_id
|
||||
AND T2.turniergruppe_id=${tid}`;
|
||||
request.app.db.query(sql, (err, results) => {
|
||||
if (err) console.error(err);
|
||||
// console.log('result', results);
|
||||
return resolve(results[0].n);
|
||||
});
|
||||
});
|
||||
},
|
||||
options: {
|
||||
validate: {
|
||||
params: {
|
||||
tid: Joi.number().integer().min(0)
|
||||
}
|
||||
},
|
||||
// TODO CORS ENTFERNE
|
||||
cors: {
|
||||
origin: ['*'],
|
||||
additionalHeaders: ['cache-control', 'x-requested-with']
|
||||
},
|
||||
auth: 'admin'
|
||||
}
|
||||
},
|
||||
{
|
||||
// Team hinzufügen
|
||||
method: 'PUT',
|
||||
path: '/registerTeam',
|
||||
handler: async (request, h) => {
|
||||
return new Promise((resolve) => {
|
||||
const token = request.query.token;
|
||||
const decoded = jwt.verify(token, process.env.JWT_KEY);
|
||||
const aid = decoded.id;
|
||||
const {teamName, turniergruppeId} = request.payload;
|
||||
const d = new Date(Date.now());
|
||||
const now = d.getFullYear() + "-" +
|
||||
("00" + (d.getMonth() + 1)).slice(-2) + "-" +
|
||||
("00" + d.getDate()).slice(-2) + " " +
|
||||
("00" + d.getHours()).slice(-2) + ":" +
|
||||
("00" + d.getMinutes()).slice(-2) + ":" +
|
||||
("00" + d.getSeconds()).slice(-2)
|
||||
console.log(
|
||||
'teamName', teamName,
|
||||
'turniergruppeId', turniergruppeId,
|
||||
);
|
||||
let teamid;
|
||||
|
||||
let sql = `INSERT INTO teams (id, teamName, account_id) VALUES (NULL, '${teamName}', ${aid});`;
|
||||
request.app.db.query(sql, (err, results) => {
|
||||
if (err) console.error(err);
|
||||
console.log('result', results);
|
||||
});
|
||||
|
||||
sql = `SELECT id FROM teams ORDER BY id DESC LIMIT 1`;
|
||||
request.app.db.query(sql, (err, results) => {
|
||||
if (err) console.error(err);
|
||||
teamid = results[0].id;
|
||||
console.log('results', results[0].id);
|
||||
console.log('teamid', teamid);
|
||||
|
||||
sql = `INSERT INTO team_turniergruppe (team_id, turniergruppe_id, erstellt) VALUES (${teamid}, ${turniergruppeId}, '${now}');`;
|
||||
AND T2.turniergruppe_id=${tid}`
|
||||
request.app.db.query(sql, (err, results) => {
|
||||
if (err) console.error(err);
|
||||
console.log(results);
|
||||
return resolve(results);
|
||||
});
|
||||
});
|
||||
// console.log('query2', query2)
|
||||
});
|
||||
},
|
||||
options: {
|
||||
cors: {
|
||||
origin: ['*'],
|
||||
additionalHeaders: ['cache-control', 'x-requested-with'],
|
||||
exposedHeaders: ['x-kt-account', 'x-kt-admin', 'x-kt-token']
|
||||
if (err) console.error(err)
|
||||
// console.log('result', results);
|
||||
return resolve(results[0].n)
|
||||
})
|
||||
})
|
||||
},
|
||||
auth: 'admin'
|
||||
}
|
||||
},
|
||||
{
|
||||
// Team entfernen
|
||||
method: 'PUT',
|
||||
path: '/deregisterTeam',
|
||||
handler: async (request, h) => {
|
||||
return new Promise((resolve) => {
|
||||
const {teamName, turniergruppeId} = request.payload;
|
||||
console.log(
|
||||
'teamName', teamName,
|
||||
'turniergruppeId', turniergruppeId,
|
||||
);
|
||||
let sql = `SELECT team_id FROM team_turniergruppe, teams
|
||||
options: {
|
||||
validate: {
|
||||
params: {
|
||||
tid: Joi.number().integer().min(0),
|
||||
},
|
||||
},
|
||||
// TODO CORS ENTFERNE
|
||||
cors: {
|
||||
origin: ['*'],
|
||||
additionalHeaders: ['cache-control', 'x-requested-with'],
|
||||
},
|
||||
auth: 'admin',
|
||||
},
|
||||
},
|
||||
{
|
||||
// Team hinzufügen
|
||||
method: 'PUT',
|
||||
path: '/registerTeam',
|
||||
handler: async (request, h) => {
|
||||
return new Promise((resolve) => {
|
||||
const token = request.query.token
|
||||
const decoded = jwt.verify(token, process.env.JWT_KEY)
|
||||
const aid = decoded.id
|
||||
const { teamName, turniergruppeId } = request.payload
|
||||
console.log('teamName', teamName, 'turniergruppeId', turniergruppeId)
|
||||
let teamid
|
||||
|
||||
let sql = `INSERT INTO teams (id, teamName, account_id) VALUES (NULL, '${teamName}', ${aid});`
|
||||
request.app.db.query(sql, (err, results) => {
|
||||
if (err) console.error(err)
|
||||
console.log('result', results)
|
||||
})
|
||||
|
||||
sql = `SELECT id FROM teams ORDER BY id DESC LIMIT 1`
|
||||
request.app.db.query(sql, (err, results) => {
|
||||
if (err) console.error(err)
|
||||
teamid = results[0].id
|
||||
console.log('results', results[0].id)
|
||||
console.log('teamid', teamid)
|
||||
|
||||
sql = `INSERT INTO team_turniergruppe (team_id, turniergruppe_id, erstellt) VALUES (${teamid}, ${turniergruppeId}, '${utils.timestamp()}');`
|
||||
request.app.db.query(sql, (err, results) => {
|
||||
if (err) console.error(err)
|
||||
console.log(results)
|
||||
return resolve(results)
|
||||
})
|
||||
})
|
||||
// console.log('query2', query2)
|
||||
})
|
||||
},
|
||||
options: {
|
||||
cors: {
|
||||
origin: ['*'],
|
||||
additionalHeaders: ['cache-control', 'x-requested-with'],
|
||||
exposedHeaders: ['x-kt-account', 'x-kt-admin', 'x-kt-token'],
|
||||
},
|
||||
auth: 'admin',
|
||||
},
|
||||
},
|
||||
{
|
||||
// Team entfernen
|
||||
method: 'PUT',
|
||||
path: '/deregisterTeam',
|
||||
handler: async (request, h) => {
|
||||
return new Promise((resolve) => {
|
||||
const { teamName, turniergruppeId } = request.payload
|
||||
console.log('teamName', teamName, 'turniergruppeId', turniergruppeId)
|
||||
let sql = `SELECT team_id FROM team_turniergruppe, teams
|
||||
WHERE team_turniergruppe.team_id = teams.id
|
||||
AND team_turniergruppe.turniergruppe_id = ${turniergruppeId}
|
||||
AND teams.teamName = '${teamName}'
|
||||
ORDER BY team_id DESC LIMIT 1`;
|
||||
|
||||
request.app.db.query(sql, (err, results) => {
|
||||
if (err) console.error(err);
|
||||
console.log('result', results);
|
||||
|
||||
sql = `DELETE FROM team_turniergruppe
|
||||
WHERE turniergruppe_id = ${turniergruppeId}
|
||||
AND team_id = '${results[0].team_id}'`;
|
||||
ORDER BY team_id DESC LIMIT 1`
|
||||
|
||||
request.app.db.query(sql, (err, results) => {
|
||||
if (err) console.error(err);
|
||||
console.log('result', results);
|
||||
|
||||
return resolve(results);
|
||||
});
|
||||
});
|
||||
});
|
||||
},
|
||||
options: {
|
||||
cors: {
|
||||
origin: ['*'],
|
||||
additionalHeaders: ['cache-control', 'x-requested-with'],
|
||||
exposedHeaders: ['x-kt-account', 'x-kt-admin', 'x-kt-token']
|
||||
if (err) console.error(err)
|
||||
console.log('result', results)
|
||||
|
||||
sql = `DELETE FROM team_turniergruppe
|
||||
WHERE turniergruppe_id = ${turniergruppeId}
|
||||
AND team_id = '${results[0].team_id}'`
|
||||
|
||||
request.app.db.query(sql, (err, results) => {
|
||||
if (err) console.error(err)
|
||||
console.log('result', results)
|
||||
|
||||
return resolve(results)
|
||||
})
|
||||
})
|
||||
})
|
||||
},
|
||||
auth: 'admin'
|
||||
}
|
||||
},
|
||||
])};
|
||||
options: {
|
||||
cors: {
|
||||
origin: ['*'],
|
||||
additionalHeaders: ['cache-control', 'x-requested-with'],
|
||||
exposedHeaders: ['x-kt-account', 'x-kt-admin', 'x-kt-token'],
|
||||
},
|
||||
auth: 'admin',
|
||||
},
|
||||
},
|
||||
])
|
||||
}
|
||||
|
||||
76
server.js
76
server.js
@@ -1,16 +1,17 @@
|
||||
'use strict';
|
||||
'use strict'
|
||||
|
||||
const Hapi = require('@hapi/hapi');
|
||||
const {configureAuth} = require('./auth');
|
||||
const {configureAccountRoutes} = require('./routes/account');
|
||||
const {configureLoginRoutes} = require('./routes/login');
|
||||
const {configureEncounterRoutes} = require('./routes/encounter');
|
||||
const {configureTournamentRoutes} = require('./routes/tournament');
|
||||
const {configureGroupRoutes} = require('./routes/group');
|
||||
const {configureParticipantRoutes} = require('./routes/participant');
|
||||
const {configureTeamRoutes} = require('./routes/team');
|
||||
const {configureRoutes} = require('./routes');
|
||||
require('dotenv').config();
|
||||
const Hapi = require('@hapi/hapi')
|
||||
const { configureAuth } = require('./auth')
|
||||
const { configureAccountRoutes } = require('./routes/account')
|
||||
const { configureLoginRoutes } = require('./routes/login')
|
||||
const { configureEncounterRoutes } = require('./routes/encounter')
|
||||
const { configureTournamentRoutes } = require('./routes/tournament')
|
||||
const { configureGroupRoutes } = require('./routes/group')
|
||||
const { configureParticipantRoutes } = require('./routes/participant')
|
||||
const { configurePoolRoutes } = require('./routes/pool')
|
||||
const { configureTeamRoutes } = require('./routes/team')
|
||||
const { configureRoutes } = require('./routes')
|
||||
require('dotenv').config()
|
||||
|
||||
// const Bcrypt = require('bcrypt');
|
||||
|
||||
@@ -19,18 +20,19 @@ const init = async () => {
|
||||
const server = new Hapi.Server({
|
||||
host: process.env.HOST,
|
||||
port: process.env.PORT,
|
||||
routes: {cors: true}
|
||||
});
|
||||
await configureAuth(server);
|
||||
await configureAccountRoutes(server);
|
||||
await configureLoginRoutes(server);
|
||||
await configureEncounterRoutes(server);
|
||||
await configureTournamentRoutes(server);
|
||||
await configureGroupRoutes(server);
|
||||
await configureParticipantRoutes(server);
|
||||
await configureTeamRoutes(server);
|
||||
await configureRoutes(server);
|
||||
routes: { cors: true },
|
||||
})
|
||||
|
||||
await configureAuth(server)
|
||||
await configureAccountRoutes(server)
|
||||
await configureLoginRoutes(server)
|
||||
await configureEncounterRoutes(server)
|
||||
await configureTournamentRoutes(server)
|
||||
await configureGroupRoutes(server)
|
||||
await configureParticipantRoutes(server)
|
||||
await configurePoolRoutes(server)
|
||||
await configureTeamRoutes(server)
|
||||
await configureRoutes(server)
|
||||
|
||||
await server.register({
|
||||
plugin: require('hapi-plugin-mysql'),
|
||||
@@ -41,20 +43,20 @@ const init = async () => {
|
||||
password: process.env.DB_PASS,
|
||||
database: process.env.DB_DB,
|
||||
connectionLimit: 10,
|
||||
debug:false,
|
||||
debug: false,
|
||||
waitForConnections: true,
|
||||
multipleStatements: true
|
||||
}
|
||||
});
|
||||
multipleStatements: true,
|
||||
},
|
||||
})
|
||||
|
||||
await server.start();
|
||||
return server;
|
||||
};
|
||||
await server.start()
|
||||
return server
|
||||
}
|
||||
|
||||
|
||||
init().then(server => {
|
||||
console.log('Server running at:', server.info.uri);
|
||||
})
|
||||
.catch(error => {
|
||||
console.log(error);
|
||||
});
|
||||
init()
|
||||
.then((server) => {
|
||||
console.log('Server running at:', server.info.uri)
|
||||
})
|
||||
.catch((error) => {
|
||||
console.log(error)
|
||||
})
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
GET http://localhost:8000/checkToken?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6Im1hcmlvQHdhdHRzY2hlLmRlIiwiaWQiOjEwNDQsImFkbWluIjoieSIsImlhdCI6MTYxNDg1OTQ4NywiZXhwIjoxNjE0OTQ1ODg3fQ.OuC72R2_tPnYNDgbXBT6mKAOZ3kYhYXKGkq4jGjKHWA HTTP/1.1
|
||||
|
||||
###
|
||||
|
||||
|
||||
16
utils.js
Normal file
16
utils.js
Normal file
@@ -0,0 +1,16 @@
|
||||
exports.timestamp = () => {
|
||||
const d = new Date(Date.now())
|
||||
return (
|
||||
d.getFullYear() +
|
||||
'-' +
|
||||
('00' + (d.getMonth() + 1)).slice(-2) +
|
||||
'-' +
|
||||
('00' + d.getDate()).slice(-2) +
|
||||
' ' +
|
||||
('00' + d.getHours()).slice(-2) +
|
||||
':' +
|
||||
('00' + d.getMinutes()).slice(-2) +
|
||||
':' +
|
||||
('00' + d.getSeconds()).slice(-2)
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user