add handleBasket, remove old ones
This commit is contained in:
@@ -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(),
|
||||
// }),
|
||||
// },
|
||||
},
|
||||
},
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user