From a866361fda181c9e040c0c36c6fec636daab02d9 Mon Sep 17 00:00:00 2001 From: Klaas Date: Sun, 26 May 2024 18:25:15 +0200 Subject: [PATCH] Datumsauswahl korrigiert --- app.js | 54 +++++++++++++++------- views/trainings.ejs | 107 +++++++++++++++++++++++++------------------- 2 files changed, 100 insertions(+), 61 deletions(-) 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') %> -

Training <%= training.datum %>

-

<%= training.datum + 7 %>

-
- - -
+

+
+ <% if (previousTraining) { %> + < + <% } %> + Training <%= training.datum %> + <% if (nextTraining) { %> + > + <% } %> +

+ + <% if (training) { %>

Geräte

- Aufwärmen: + +
+

Aufwärmen:

+ <% if (training.aufwaermleiter_name) { %> - <%= training.aufwaermleiter_name %> +

Leitung: + <%= training.aufwaermleiter_name %>

<% } else { %>
+

Leitung: -

+

<% } %> -
+ <% if (training.aufwaermen_name) { %> - <%= training.aufwaermen_name %> +

Spiel: + <%= training.aufwaermen_name %>

<% } else { %>
+

Spiel: - + + -

+

<% } %> -
- - - - -
- - Spiel: +
+
+

Spiel:

+ <% if (training.spielleiter_name) { %> - <%= training.spielleiter_name %> +

Leitung: + <%= training.spielleiter_name %>

<% } else { %>
+

Leitung: -

+

<% } %> -
- + <% if (training.spiel_name) { %> +

Spiel: <%= training.spiel_name %> <% } else { %> +

+

Spiel: - + + <% aufwaermenCandidates.forEach(candidate => { %> + + <% }) %> + +

+ <% } %> -
- - - - -
+
+ +
+ + +
+ <% } else { %>

Kein Training gefunden für das ausgewählte Datum.

<% } %>