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
+
+ <% comments.forEach(comment => { %>
+ - <%= comment.author %>: <%= comment.content %>
+ <% }) %>
+
+
+ <% 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 %>
-
+
+
+
Hochgeladen von <%= img.uploader %>
<% if (user && (user.displayName === img.uploader || user.emails[0].value === 'DEINE_ADMIN_MAIL@deine-domain.de')) { %>