From 01bbb85485e22709250c4309cabf51fb94fceec5 Mon Sep 17 00:00:00 2001 From: "Torsten Schulz (local)" Date: Thu, 16 Oct 2025 22:20:51 +0200 Subject: [PATCH] Enhance diary member activity management by adding validation and logging in addMembersToActivity function. Implement checks for participantIds to ensure they are an array, and log relevant information for better debugging. Update DiaryDateActivityService to improve error handling and logging for group activity associations. Modify frontend DiaryView to support group activity member assignment, including new methods for toggling and assigning members to group activities, enhancing user experience and functionality. --- .../diaryMemberActivityController.js | 26 +++- backend/services/diaryDateActivityService.js | 14 +- backend/services/schedulerService.js | 2 +- frontend/public/site.webmanifest | 20 ++- frontend/src/views/DiaryView.vue | 134 +++++++++++++++++- 5 files changed, 190 insertions(+), 6 deletions(-) diff --git a/backend/controllers/diaryMemberActivityController.js b/backend/controllers/diaryMemberActivityController.js index b47a3bd..41269fd 100644 --- a/backend/controllers/diaryMemberActivityController.js +++ b/backend/controllers/diaryMemberActivityController.js @@ -19,20 +19,44 @@ export const addMembersToActivity = async (req, res) => { const { authcode: userToken } = req.headers; const { clubId, diaryDateActivityId } = req.params; const { participantIds } = req.body; // array of participant ids + + console.log('[addMembersToActivity] Request:', { + clubId, + diaryDateActivityId, + participantIds, + bodyKeys: Object.keys(req.body) + }); + await checkAccess(userToken, clubId); + + if (!participantIds || !Array.isArray(participantIds)) { + console.error('[addMembersToActivity] Invalid participantIds:', participantIds); + return res.status(400).json({ error: 'participantIds must be an array' }); + } + const validParticipants = await Participant.findAll({ where: { id: participantIds } }); + console.log('[addMembersToActivity] Valid participants found:', validParticipants.length); + const validIds = new Set(validParticipants.map(p => p.id)); const created = []; for (const pid of participantIds) { - if (!validIds.has(pid)) continue; + if (!validIds.has(pid)) { + console.log('[addMembersToActivity] Participant not found:', pid); + continue; + } const existing = await DiaryMemberActivity.findOne({ where: { diaryDateActivityId, participantId: pid } }); if (!existing) { const rec = await DiaryMemberActivity.create({ diaryDateActivityId, participantId: pid }); + console.log('[addMembersToActivity] Created:', rec.id); created.push(rec); + } else { + console.log('[addMembersToActivity] Already exists:', pid); } } + console.log('[addMembersToActivity] Success, created:', created.length); res.status(201).json(created); } catch (e) { + console.error('[addMembersToActivity] Error:', e); res.status(500).json({ error: 'Error adding members to activity' }); } }; diff --git a/backend/services/diaryDateActivityService.js b/backend/services/diaryDateActivityService.js index e0b0f64..d63aa9a 100644 --- a/backend/services/diaryDateActivityService.js +++ b/backend/services/diaryDateActivityService.js @@ -246,8 +246,20 @@ class DiaryDateActivityService { throw new Error('Activity not found'); } const group = await Group.findByPk(groupId); - if (!group || group.diaryDateId !== diaryDateActivity.diaryDateId) { + if (!group) { + console.error('[DiaryDateActivityService::addGroupActivity] Group not found:', groupId); + throw new Error('Group not found'); + } + + console.log('[DiaryDateActivityService::addGroupActivity] Group found:', { + groupId: group.id, + groupDiaryDateId: group.diaryDateId, + activityDiaryDateId: diaryDateActivity.diaryDateId + }); + + if (group.diaryDateId !== diaryDateActivity.diaryDateId) { console.error('[DiaryDateActivityService::addGroupActivity] Group and date don\'t fit'); + console.error('Group diaryDateId:', group.diaryDateId, 'Activity diaryDateId:', diaryDateActivity.diaryDateId); throw new Error('Group isn\'t related to date'); } const [predefinedActivity, created] = await PredefinedActivity.findOrCreate({ diff --git a/backend/services/schedulerService.js b/backend/services/schedulerService.js index 59d4c13..ddc7bd9 100644 --- a/backend/services/schedulerService.js +++ b/backend/services/schedulerService.js @@ -17,7 +17,7 @@ class SchedulerService { devLog('Scheduler is already running'); return; } - + devLog('Starting scheduler service...'); // Schedule automatic rating updates at 6:00 AM daily diff --git a/frontend/public/site.webmanifest b/frontend/public/site.webmanifest index 45dc8a2..b0a97a9 100644 --- a/frontend/public/site.webmanifest +++ b/frontend/public/site.webmanifest @@ -1 +1,19 @@ -{"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"} \ No newline at end of file +{ + "name": "Trainingstagebuch", + "short_name": "TT-Tagebuch", + "icons": [ + { + "src": "/android-chrome-192x192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "/android-chrome-512x512.png", + "sizes": "512x512", + "type": "image/png" + } + ], + "theme_color": "#2c3e50", + "background_color": "#ffffff", + "display": "standalone" +} diff --git a/frontend/src/views/DiaryView.vue b/frontend/src/views/DiaryView.vue index f37a517..7159064 100644 --- a/frontend/src/views/DiaryView.vue +++ b/frontend/src/views/DiaryView.vue @@ -144,7 +144,7 @@ item.durationText }}) -