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..b26d711 100644 --- a/backend/server.js +++ b/backend/server.js @@ -9,16 +9,28 @@ import { fileURLToPath } from 'url'; import pool from './db.js'; -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 - ); -`); +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 + ); + `); + 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..36fcfa5 100644 --- a/backend/views/index.ejs +++ b/backend/views/index.ejs @@ -33,7 +33,9 @@

<%= 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')) { %>