From 8ef4e1dc9d6df4e9e411408fe8376eec58d4a0c9 Mon Sep 17 00:00:00 2001 From: "Torsten Schulz (local)" Date: Wed, 12 Nov 2025 10:05:08 +0100 Subject: [PATCH] Enhance member gallery generation with customizable image size selection This commit updates the member gallery generation feature by allowing users to specify the image size through the frontend. The DiaryView component now includes a dropdown for selecting image dimensions (100x100, 150x150, 200x200), which is passed to the backend for processing. The memberService has been modified to validate the size parameter, ensuring only allowed dimensions are used. These changes improve user experience by providing flexibility in gallery display options. --- backend/controllers/memberController.js | 3 +- backend/services/memberService.js | 8 ++-- frontend/src/views/DiaryView.vue | 53 ++++++++++++++++++++++++- 3 files changed, 58 insertions(+), 6 deletions(-) diff --git a/backend/controllers/memberController.js b/backend/controllers/memberController.js index cdf56c9..23b20cb 100644 --- a/backend/controllers/memberController.js +++ b/backend/controllers/memberController.js @@ -120,7 +120,8 @@ const generateMemberGallery = async (req, res) => { try { const { clubId } = req.params; const { authcode: userToken } = req.headers; - const result = await MemberService.generateMemberGallery(userToken, clubId); + const size = parseInt(req.query.size) || 200; // Default: 200x200 + const result = await MemberService.generateMemberGallery(userToken, clubId, size); if (result.status === 200) { res.setHeader('Content-Type', 'image/png'); res.setHeader('Cache-Control', 'no-store'); diff --git a/backend/services/memberService.js b/backend/services/memberService.js index e3f157f..bf817a7 100644 --- a/backend/services/memberService.js +++ b/backend/services/memberService.js @@ -1070,10 +1070,14 @@ class MemberService { } } - async generateMemberGallery(userToken, clubId) { + async generateMemberGallery(userToken, clubId, size = 200) { try { await checkAccess(userToken, clubId); + // Validiere und setze tileDimension (nur 100, 150, 200 erlaubt) + const validSizes = [100, 150, 200]; + const tileDimension = validSizes.includes(size) ? size : 200; + const members = await Member.findAll({ where: { clubId, @@ -1130,8 +1134,6 @@ class MemberService { error: 'Keine aktiven Mitglieder mit Bildern gefunden' }; } - - const tileDimension = 200; // Maximale Breite für die Galerie (Dialog-Breite 900px - 32px Padding = 868px) const maxGalleryWidth = 868; // Berechne maximale Anzahl Spalten, die in die Breite passen diff --git a/frontend/src/views/DiaryView.vue b/frontend/src/views/DiaryView.vue index d727b45..49ff314 100644 --- a/frontend/src/views/DiaryView.vue +++ b/frontend/src/views/DiaryView.vue @@ -510,6 +510,14 @@ @close="closeGalleryDialog" >