Files
kt-backend/routes.js
2025-10-03 16:40:31 +02:00

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(),
}),
},
},
},
])
}