From 98a00368f12d08713d7c236f6958de2f8251c113 Mon Sep 17 00:00:00 2001 From: Armin Date: Fri, 13 Jun 2025 21:29:08 +0200 Subject: [PATCH 1/3] adding comment finctionality --- backend/routes/upload.js | 31 +++++++++++++++++++++++++++++++ backend/server.js | 29 ++++++++++++++++++++--------- backend/views/image.ejs | 37 +++++++++++++++++++++++++++++++++++++ backend/views/index.ejs | 4 +++- 4 files changed, 91 insertions(+), 10 deletions(-) create mode 100644 backend/views/image.ejs diff --git a/backend/routes/upload.js b/backend/routes/upload.js index bd1aea1..32d3678 100644 --- a/backend/routes/upload.js +++ b/backend/routes/upload.js @@ -67,4 +67,35 @@ router.post('/delete/:id', async (req, res) => { res.redirect('/'); }); +router.get('/image/:id', async (req, res) => { + const imageId = req.params.id; + const result = await pool.query('SELECT * FROM images WHERE id = $1', [imageId]); + const image = result.rows[0]; + + const commentsResult = await pool.query( + 'SELECT * FROM comments WHERE image_id = $1 ORDER BY created_at ASC', + [imageId] + ); + const comments = commentsResult.rows; + + res.render('image', { + user: req.user, + image, + comments + }); +}); + +router.post('/image/:id/comment', async (req, res) => { + const imageId = req.params.id; + const author = req.user ? req.user.displayName : 'Anonym'; + const content = req.body.content; + + await pool.query( + 'INSERT INTO comments (image_id, author, content) VALUES ($1, $2, $3)', + [imageId, author, content] + ); + + res.redirect(`/image/${imageId}`); +}); + export default router; diff --git a/backend/server.js b/backend/server.js index 6e45693..bfbe53f 100644 --- a/backend/server.js +++ b/backend/server.js @@ -9,16 +9,27 @@ import { fileURLToPath } from 'url'; import pool from './db.js'; +const initDB = async () => { await pool.query(` - CREATE TABLE IF NOT EXISTS images ( - id SERIAL PRIMARY KEY, - filename TEXT NOT NULL, - title TEXT NOT NULL, - description TEXT NOT NULL, - uploader TEXT, - created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP - ); -`); + CREATE TABLE IF NOT EXISTS images ( + id SERIAL PRIMARY KEY, + filename TEXT NOT NULL, + title TEXT NOT NULL, + description TEXT NOT NULL, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP + ); + `); + await pool.query(` + CREATE TABLE IF NOT EXISTS comments ( + id SERIAL PRIMARY KEY, + image_id INTEGER REFERENCES images(id) ON DELETE CASCADE, + author TEXT, + content TEXT NOT NULL, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP + ); + `); +}; +initDB(); dotenv.config(); diff --git a/backend/views/image.ejs b/backend/views/image.ejs new file mode 100644 index 0000000..87dc1df --- /dev/null +++ b/backend/views/image.ejs @@ -0,0 +1,37 @@ + + + + + <%= image.title %> + + + + +
+

<%= image.title %>

+

<%= image.description %>

+ +

Hochgeladen von <%= image.uploader %>

+ +
+ +

Kommentare

+ + + <% if (user) { %> +
+ + +
+ <% } else { %> +

Bitte einloggen, um zu kommentieren.

+ <% } %> + + Zurück zur Galerie +
+ + diff --git a/backend/views/index.ejs b/backend/views/index.ejs index 1fbe216..9968a4c 100644 --- a/backend/views/index.ejs +++ b/backend/views/index.ejs @@ -30,7 +30,9 @@ <% } else { %> <% images.forEach(img => { %>
-

<%= img.title %>

+ + <%= img.title %> +

<%= img.description %>

<%= img.title %> -- 2.47.2 From 0a7b90a699e34b2c1dd23bf8bb153cf554cb87aa Mon Sep 17 00:00:00 2001 From: Armin Date: Fri, 13 Jun 2025 21:38:30 +0200 Subject: [PATCH 2/3] =?UTF-8?q?copy=20past=20sehler=20(so=20langsam=20wird?= =?UTF-8?q?=20der=20code=20un=C3=BCbersichtlich)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/server.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/backend/server.js b/backend/server.js index bfbe53f..b26d711 100644 --- a/backend/server.js +++ b/backend/server.js @@ -10,12 +10,13 @@ import { fileURLToPath } from 'url'; import pool from './db.js'; const initDB = async () => { -await pool.query(` + await pool.query(` CREATE TABLE IF NOT EXISTS images ( id SERIAL PRIMARY KEY, filename TEXT NOT NULL, title TEXT NOT NULL, description TEXT NOT NULL, + uploader TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); `); -- 2.47.2 From 3153bee41f05cd62eea066ff47463b9bdf3ae165 Mon Sep 17 00:00:00 2001 From: Armin Date: Fri, 13 Jun 2025 21:44:49 +0200 Subject: [PATCH 3/3] fix copy-paste layout error --- backend/views/index.ejs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/backend/views/index.ejs b/backend/views/index.ejs index 9968a4c..36fcfa5 100644 --- a/backend/views/index.ejs +++ b/backend/views/index.ejs @@ -30,12 +30,12 @@ <% } else { %> <% images.forEach(img => { %>
- - <%= img.title %> - +

<%= img.title %>

<%= img.description %>

- <%= img.title %> + + <%= img.title %> +
Hochgeladen von <%= img.uploader %>
<% if (user && (user.displayName === img.uploader || user.emails[0].value === 'DEINE_ADMIN_MAIL@deine-domain.de')) { %> -- 2.47.2