add handleBasket, remove old ones

This commit is contained in:
Mario Peters
2026-01-04 20:47:32 +01:00
parent 9ee87fe4e2
commit 10ed0ffc1d

View File

@@ -241,75 +241,120 @@ exports.configureParticipantRoutes = (server) => {
},
},
{
// Teilnehmer registrieren
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)
const sql = `INSERT INTO teilnehmer_turniergruppe (id, teilnehmer_id, turniergruppe_id) VALUES (NULL, ${teilnehmerId}, ${turniergruppeId[0].id});`
request.app.db.query(sql, (err, results) => {
if (err) console.error(err)
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 registrieren
method: 'PUT',
// Handle Basket (Batch Register/Deregister)
method: 'POST',
path: '/handleBasket',
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)
const sql = `INSERT INTO teilnehmer_turniergruppe (id, teilnehmer_id, turniergruppe_id) VALUES (NULL, ${teilnehmerId}, ${turniergruppeId[0].id});`
const { register, deregister, registerTeams, deregisterTeams } = request.payload
const db = request.app.db
const token = request.query.token
const decoded = jwt.verify(token, process.env.JWT_KEY)
const aid = decoded.id
const promises = []
request.app.db.query(sql, (err, results) => {
if (err) console.error(err)
return resolve(results)
const executeQuery = (sql, params) => {
return new Promise((resolve) => {
db.query(sql, params, (err, results) => {
if (err) {
console.error('DB Error:', err)
resolve({ error: err })
} else {
resolve(results)
}
})
})
})
},
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) => {
const { teilnehmerId, turniergruppeId } = request.payload
const sql = `DELETE FROM teilnehmer_turniergruppe WHERE teilnehmer_id = ? AND turniergruppe_id = ?`
try {
const results = await request.app.db.query(sql, [teilnehmerId, turniergruppeId[0].id])
return { success: true, results }
} catch (err) {
console.error(err)
throw Boom.internal('DB-Fehler')
}
// Single Participants Registration
if (register && Array.isArray(register)) {
for (const item of register) {
if (item.teilnehmerId && item.turniergruppeId) {
const sql = 'INSERT INTO teilnehmer_turniergruppe (teilnehmer_id, turniergruppe_id) VALUES (?, ?)'
promises.push(executeQuery(sql, [item.teilnehmerId, item.turniergruppeId]))
}
}
}
// Single Participants Deregistration
if (deregister && Array.isArray(deregister)) {
for (const item of deregister) {
if (item.teilnehmerId && item.turniergruppeId) {
const sql = 'DELETE FROM teilnehmer_turniergruppe WHERE teilnehmer_id = ? AND turniergruppe_id = ?'
promises.push(executeQuery(sql, [item.teilnehmerId, item.turniergruppeId]))
}
}
}
// Team Registration
if (registerTeams && Array.isArray(registerTeams)) {
for (const item of registerTeams) {
if (item.teamName && item.turniergruppeId) {
const promise = new Promise((resolve) => {
// 1. Create Team
const sqlCreateTeam = `INSERT INTO teams (id, teamName, account_id) VALUES (NULL, ?, ?)`
db.query(sqlCreateTeam, [item.teamName, aid], (err, result) => {
if (err) {
console.error('Error creating team:', err)
return resolve({ error: err })
}
const teamId = result.insertId
// 2. Link Team to Group
const sqlLink = `INSERT INTO team_turniergruppe (team_id, turniergruppe_id) VALUES (?, ?)`
db.query(sqlLink, [teamId, item.turniergruppeId], (err, linkResult) => {
if (err) {
console.error('Error linking team:', err)
return resolve({ error: err })
}
resolve(linkResult)
})
})
})
promises.push(promise)
}
}
}
// Team Deregistration
if (deregisterTeams && Array.isArray(deregisterTeams)) {
for (const item of deregisterTeams) {
if (item.teamName && item.turniergruppeId) {
const promise = new Promise((resolve) => {
// 1. Find Team ID (LIFO - Last In First Out strategy for deletion)
const sqlFind = `SELECT team_id FROM team_turniergruppe, teams
WHERE team_turniergruppe.team_id = teams.id
AND team_turniergruppe.turniergruppe_id = ?
AND teams.teamName = ?
ORDER BY team_id DESC LIMIT 1`
db.query(sqlFind, [item.turniergruppeId, item.teamName], (err, results) => {
if (err) {
console.error('Error finding team to delete:', err)
return resolve({ error: err })
}
if (results.length > 0) {
const teamId = results[0].team_id
// 2. Delete Link
const sqlDelete = `DELETE FROM team_turniergruppe WHERE turniergruppe_id = ? AND team_id = ?`
db.query(sqlDelete, [item.turniergruppeId, teamId], (err, delResult) => {
if (err) {
console.error('Error deleting team link:', err)
return resolve({ error: err })
}
// Optional: Delete Team from teams table if needed, but current logic seems to leave it?
// Based on team.js logic, it only deletes from team_turniergruppe.
resolve(delResult)
})
} else {
resolve({ message: 'Team not found for deregistration' })
}
})
})
promises.push(promise)
}
}
}
const results = await Promise.all(promises)
return { success: true, results }
},
options: {
cors: {
@@ -318,14 +363,6 @@ exports.configureParticipantRoutes = (server) => {
exposedHeaders: ['x-kt-account', 'x-kt-admin', 'x-kt-token'],
},
auth: 'admin',
// validate: {
// payload: Joi.object({
// teilnehmerId: Joi.number().integer().required(),
// turniergruppeId: Joi.array()
// .items(Joi.object({ id: Joi.number().integer().required() }))
// .required(),
// }),
// },
},
},
{