diff --git a/app.js b/app.js index f9fc345..78a78e1 100644 --- a/app.js +++ b/app.js @@ -5,7 +5,7 @@ const crypto = require('crypto'); const nodemailer = require('nodemailer'); const { Pool } = require('pg'); const path = require('path'); -const moment=require('moment') +const moment = require('moment'); require('dotenv').config(); const app = express(); @@ -134,12 +134,7 @@ const getTraining = async (selectedDate) => { // Funktion zum Laden aller Spiele const getAllSpiele = async () => { const result = await pool.query(` - SELECT s.id, s.name, - COALESCE(EXTRACT(EPOCH FROM (NOW() - MAX(tr.datum))) / 604800, EXTRACT(EPOCH FROM (NOW() - '1970-01-01'::date)) / 604800) AS weeks_since_last - FROM spiele s - LEFT JOIN trainings tr ON s.id = tr.spiel - GROUP BY s.id - ORDER BY weeks_since_last ASC; + SELECT * FROM spiele ORDER BY name ASC; `); return result.rows; }; @@ -335,8 +330,6 @@ app.get('/profile', requireAuth, (req, res) => { res.render('profile', { session: req.session}); // Stelle sicher, dass es eine profile.ejs gibt }); - - app.post('/profile', requireAuth, async (req, res) => { const { email, password } = req.body; try { @@ -355,13 +348,25 @@ app.post('/profile', requireAuth, async (req, res) => { }); app.post('/update-training', async (req, res) => { - const { trainingId, type, spielId } = req.body; + const { trainingId, type, spielName } = req.body; + let spielId; + const spiel = await pool.query(`SELECT * FROM spiele WHERE name = $1`, [spielName]); + + if (spiel.rows.length > 0) { + spielId = spiel.rows[0].id; + console.log('Spiel existiert, die ID ist $1', [ spielId ]); + } else { + const newSpiel = await pool.query('INSERT INTO spiele (name) VALUES ($1) RETURNING id', [spielName]); + spielId = newSpiel.rows[0].id; + console.log('Spiel existiert nicht, wurde mitID $1 angelegt', [ spielId ]); + } + try { if (type === 'spiel') { - await pool.query('UPDATE trainings SET spiel = $1 WHERE id = $2', [spielId, trainingId]); + await pool.query('UPDATE trainings SET spiel = $1 WHERE id = $2', [ spielId, trainingId ]); } else if (type === 'aufwaermen') { - await pool.query('UPDATE trainings SET aufwaermen = $1 WHERE id = $2', [spielId, trainingId]); + await pool.query('UPDATE trainings SET aufwaermen = $1 WHERE id = $2', [ spielId, trainingId ]); } res.redirect('/'); } catch (err) { @@ -395,9 +400,17 @@ app.get('/admin', requireAuth, requireAdmin, async (req, res) => { // Teilnehmer_innen app.get('/', requireAuth, async (req, res) => { try { - const selectedDate = req.query.date; - - const training = await getTraining(selectedDate); + let dateParam = req.query.date; + let selectedDate; + + + if (dateParam) { + selectedDate = moment(dateParam, 'DD.MM.YYYY').toDate(); + } else { + selectedDate = moment().toDate(); + } + + const training =await getTraining(selectedDate); const trainingsResult = await pool.query('SELECT datum FROM trainings ORDER BY datum ASC'); const trainingsDates = trainingsResult.rows.map(tr => ({ @@ -405,6 +418,12 @@ app.get('/', requireAuth, async (req, res) => { rawDatum: tr.datum })); + // Vorheriges Training ermitteln + const previousTrainingResult = await pool.query('SELECT * FROM trainings WHERE datum < $1 ORDER BY datum DESC LIMIT 1',[ selectedDate ]); + const nextTrainingResult = await pool.query('SELECT * FROM trainings WHERE datum > $1 ORDER BY datum ASC LIMIT 1',[ selectedDate ]); + const previousTraining = previousTrainingResult.rows.length > 0 ? previousTrainingResult.rows[0] : null; + const nextTraining = nextTrainingResult.rows.length > 0 ? nextTrainingResult.rows[0] : null; + if (training) { training.datum = formatDate(training.datum); } @@ -422,7 +441,10 @@ app.get('/', requireAuth, async (req, res) => { spielleiterCandidates, aufwaermenCandidates, // Übergeben der Kandidaten für Aufwärmleiter spielCandidates, // Übergeben der Spiele - session: req.session + session: req.session, + previousTraining, + nextTraining, + moment }); } catch (err) { console.error(err); diff --git a/views/trainings.ejs b/views/trainings.ejs index 3474677..50c3142 100644 --- a/views/trainings.ejs +++ b/views/trainings.ejs @@ -1,16 +1,16 @@ <%- include('partials/header') %> -
Leitung: + <%= training.aufwaermleiter_name %>
<% } else { %> + <% } %> - + <% if (training.aufwaermen_name) { %> - <%= training.aufwaermen_name %> +Spiel: + <%= training.aufwaermen_name %>
<% } else { %> + <% } %> - - - Spiel: +Leitung: + <%= training.spielleiter_name %>
<% } else { %> + <% } %> - - + <% if (training.spiel_name) { %> +Spiel: <%= training.spiel_name %> <% } else { %> +
+ <% } %> - +Kein Training gefunden für das ausgewählte Datum.
<% } %>