235 lines
9.3 KiB
JavaScript
235 lines
9.3 KiB
JavaScript
const { login } = require('./auth')
|
|
const Joi = require('joi')
|
|
const jwt = require('jsonwebtoken')
|
|
|
|
exports.configureRoutes = (server) => {
|
|
// server.route accepts an object or an array
|
|
return server.route([
|
|
// Den Sieger der Begegnung eintragen
|
|
// 1. Sieger ID eintragen
|
|
// 2. Wertungen eintragen (JSON)
|
|
// TODO: 3. Falls noch nicht vorhanden, neue Begegnung anlegen.
|
|
// body{
|
|
// "id": 8,
|
|
// "winner": 2194,
|
|
// "wertungen": "{test}"
|
|
// }
|
|
{
|
|
// {"kumite":{"aka":{"mobobi":1,"jogai":1,"hansuku":1,"wasari":1,"ippon":1},"shiro":{"mobobi":1,"jogai":2,"hansuku":3,"wasari":4,"ippon":5}}}
|
|
method: 'POST',
|
|
path: '/winner',
|
|
handler: function (request, h) {
|
|
return new Promise((resolve, reject) => {
|
|
const { encounter, gid, winner, wertungen, pointssystem } = request.payload
|
|
console.log('request.payload', request.payload)
|
|
|
|
// 1. aka/shiro aus DB laden
|
|
const selectQuery = 'SELECT aka, shiro, wertungen FROM encounters WHERE (gruppen_id = ?) AND (begegnung = ?);'
|
|
request.app.db.query(selectQuery, [gid, encounter], function (error, results) {
|
|
if (error) return reject(error)
|
|
if (!results || !results[0]) return reject(new Error('Begegnung nicht gefunden'))
|
|
|
|
const aka = results[0].aka
|
|
const shiro = results[0].shiro
|
|
|
|
// 2. Wertungen-Objekt vorbereiten
|
|
let wertungenObj = {}
|
|
if (results[0].wertungen) {
|
|
try {
|
|
wertungenObj = JSON.parse(results[0].wertungen)
|
|
} catch (e) {
|
|
wertungenObj = {}
|
|
}
|
|
}
|
|
|
|
// 3. Farbe bestimmen
|
|
let color = null
|
|
if (winner === aka) color = 'aka'
|
|
else if (winner === shiro) color = 'shiro'
|
|
|
|
// 4. Wertung für die Farbe setzen/überschreiben
|
|
if (color) {
|
|
wertungenObj[color] = wertungen
|
|
}
|
|
|
|
const wertungenStr = JSON.stringify(wertungenObj)
|
|
|
|
// 5. Query bauen
|
|
let myquery, params
|
|
if (!pointssystem) {
|
|
// Sieger und Wertungen setzen
|
|
myquery = 'UPDATE encounters SET sieger = ?, wertungen = ? WHERE (gruppen_id = ?) AND (begegnung = ?);'
|
|
params = [winner, wertungenStr, gid, encounter]
|
|
} else {
|
|
// Nur Wertungen setzen
|
|
myquery = 'UPDATE encounters SET wertungen = ? WHERE (gruppen_id = ?) AND (begegnung = ?);'
|
|
params = [wertungenStr, gid, encounter]
|
|
}
|
|
|
|
request.app.db.query(myquery, params, function (error2, results2) {
|
|
if (error2) return reject(error2)
|
|
|
|
// write next round for KO System
|
|
if (!pointssystem) {
|
|
const nextEcounter = Math.trunc(encounter / 2)
|
|
const nextColor = (encounter / 2) % 1 !== 0 ? 'aka' : 'shiro'
|
|
const myquery2 = 'UPDATE encounters SET ' + nextColor + ' = ? WHERE (begegnung = ?) AND (gruppen_ID = ?);'
|
|
request.app.db.query(myquery2, [winner, nextEcounter, gid], function (error3, results3) {
|
|
if (error3) return reject(error3)
|
|
return resolve(results3)
|
|
})
|
|
} else {
|
|
return resolve(results2)
|
|
}
|
|
})
|
|
})
|
|
})
|
|
},
|
|
options: {
|
|
validate: {
|
|
payload: Joi.object({
|
|
encounter: Joi.number().integer(),
|
|
gid: Joi.number().integer(),
|
|
winner: Joi.number().integer(),
|
|
wertungen: [Joi.string(), Joi.number(), Joi.object(), Joi.array()],
|
|
pointssystem: Joi.boolean(),
|
|
}),
|
|
},
|
|
// TODO CORS ENTFERNE
|
|
cors: {
|
|
origin: ['*'],
|
|
additionalHeaders: ['cache-control', 'x-requested-with'],
|
|
},
|
|
},
|
|
},
|
|
|
|
{
|
|
method: 'POST',
|
|
path: '/lateRegistration',
|
|
|
|
handler: function (request, h) {
|
|
return new Promise((resolve, reject) => {
|
|
console.log(request.payload)
|
|
const encounter = request.payload.encounter
|
|
const gid = request.payload.gid //die eindeutige Gruppe
|
|
const tid = request.payload.tid
|
|
const color = request.payload.color
|
|
let team = request.payload.team
|
|
console.log(encounter)
|
|
console.log(gid)
|
|
console.log(tid)
|
|
console.log(color)
|
|
const teamField = team ? 'team_id' : 'teilnehmer_id'
|
|
team = team ? 'team_turniergruppe' : 'teilnehmer_turniergruppe'
|
|
console.log(team)
|
|
console.log(teamField)
|
|
|
|
let sql = 'INSERT INTO ' + team + ' (' + teamField + ', turniergruppe_id) VALUES (' + tid + ', ' + gid + ');'
|
|
sql += 'UPDATE encounters SET ' + color + ' = ' + tid + ' WHERE (begegnung = ' + encounter + ') AND (gruppen_ID = ' + gid + ');'
|
|
|
|
console.log('sql', sql)
|
|
|
|
request.app.db.query(sql, (err, results) => {
|
|
if (err) console.error(err)
|
|
|
|
console.log(results)
|
|
return resolve(results)
|
|
})
|
|
})
|
|
},
|
|
options: {
|
|
validate: {
|
|
payload: Joi.object({
|
|
color: Joi.string(),
|
|
encounter: Joi.string(),
|
|
gid: Joi.number().integer(),
|
|
team: Joi.boolean(),
|
|
tid: Joi.string(),
|
|
}),
|
|
},
|
|
// TODO CORS ENTFERNE
|
|
cors: {
|
|
origin: ['*'],
|
|
additionalHeaders: ['cache-control', 'x-requested-with'],
|
|
},
|
|
},
|
|
},
|
|
|
|
{
|
|
method: 'POST',
|
|
path: '/sendMessage',
|
|
handler: function (request, h) {
|
|
const uid = request.payload.uid
|
|
const message = request.payload.message
|
|
|
|
db().query('INSERT INTO messages (message,uid_fk) VALUES ("' + message + '","' + uid + '")', function (error, results, fields) {
|
|
if (error) throw error
|
|
console.log(results)
|
|
return resolve(results)
|
|
})
|
|
},
|
|
options: {
|
|
validate: {
|
|
payload: Joi.object({
|
|
uid: Joi.number().integer(),
|
|
message: [Joi.string(), Joi.number()],
|
|
}),
|
|
},
|
|
},
|
|
},
|
|
|
|
{
|
|
method: 'POST',
|
|
path: '/messages',
|
|
|
|
handler: function (request, h) {
|
|
const uid = request.payload.uid
|
|
console.log(uid)
|
|
|
|
db().query('SELECT * FROM messages WHERE uid_fk = "' + uid + '"', function (error, results, fields) {
|
|
if (error) throw error
|
|
console.log(results)
|
|
return resolve(results)
|
|
})
|
|
},
|
|
options: {
|
|
validate: {
|
|
payload: Joi.object({
|
|
uid: Joi.number().integer(),
|
|
}),
|
|
},
|
|
},
|
|
},
|
|
|
|
{
|
|
method: 'DELETE',
|
|
path: '/message/{uid}/{mid}',
|
|
handler: function (request, h) {
|
|
const uid = request.params.uid
|
|
const mid = request.params.mid
|
|
|
|
console.log(uid + '---' + mid)
|
|
|
|
// db().query('DELETE FROM messages WHERE uid_fk = "' + uid + '"AND mid = "' + mid + '"', function (error, result, fields) {
|
|
// if (error) throw error;
|
|
|
|
// if (result.affectedRows) {
|
|
// return true;
|
|
// } else {
|
|
// return false;
|
|
// }
|
|
|
|
// });
|
|
},
|
|
options: {
|
|
validate: {
|
|
params: Joi.object({
|
|
uid: Joi.number().integer(),
|
|
mid: Joi.number().integer(),
|
|
}),
|
|
},
|
|
},
|
|
},
|
|
])
|
|
}
|