Refactor member activity retrieval to support optional predefined activities for group activities

This commit updates the `getMemberActivities` and `getMemberLastParticipations` functions to allow for optional inclusion of predefined activities in group activities. The logic is enhanced to check for predefined activities associated with group activities, providing a fallback mechanism to ensure accurate activity representation. This change improves the clarity and efficiency of the activity retrieval process, ensuring that the correct data is returned to the frontend.
This commit is contained in:
Torsten Schulz (local)
2025-11-14 23:24:51 +01:00
parent 28c92b66af
commit 5dda346fd7

View File

@@ -113,7 +113,7 @@ export const getMemberActivities = async (req, res) => {
{
model: PredefinedActivity,
as: 'predefinedActivity',
required: true
required: false // Kann null sein für Gruppen-Aktivitäten
},
{
model: GroupActivity,
@@ -123,7 +123,14 @@ export const getMemberActivities = async (req, res) => {
[Op.in]: Array.from(memberGroupIds)
}
},
required: true
required: true,
include: [
{
model: PredefinedActivity,
as: 'groupPredefinedActivity',
required: false // Kann null sein
}
]
}
]
});
@@ -138,12 +145,28 @@ export const getMemberActivities = async (req, res) => {
// Prüfe, ob die Aktivität für die Gruppe des Participants ist
const activityGroupIds = activity.groupActivities?.map(ga => ga.groupId) || [];
if (participant.groupId !== null && activityGroupIds.includes(participant.groupId)) {
// Erstelle ein virtuelles DiaryMemberActivity-Objekt
groupActivities.push({
activity: activity,
participant: participant,
id: null // Virtuell, nicht in DB
});
// Für Gruppen-Aktivitäten: Verwende die PredefinedActivity aus GroupActivity
// Falls vorhanden, sonst die aus DiaryDateActivity
const groupActivity = activity.groupActivities?.find(ga => ga.groupId === participant.groupId);
if (groupActivity && groupActivity.groupPredefinedActivity) {
// Erstelle ein modifiziertes Activity-Objekt mit der PredefinedActivity aus GroupActivity
const modifiedActivity = {
...activity.toJSON(),
predefinedActivity: groupActivity.groupPredefinedActivity
};
groupActivities.push({
activity: modifiedActivity,
participant: participant,
id: null // Virtuell, nicht in DB
});
} else if (activity.predefinedActivity) {
// Fallback: Verwende die PredefinedActivity aus DiaryDateActivity
groupActivities.push({
activity: activity,
participant: participant,
id: null // Virtuell, nicht in DB
});
}
}
}
}
@@ -285,7 +308,7 @@ export const getMemberLastParticipations = async (req, res) => {
{
model: PredefinedActivity,
as: 'predefinedActivity',
required: true
required: false // Kann null sein für Gruppen-Aktivitäten
},
{
model: GroupActivity,
@@ -295,7 +318,14 @@ export const getMemberLastParticipations = async (req, res) => {
[Op.in]: Array.from(memberGroupIds)
}
},
required: true
required: true,
include: [
{
model: PredefinedActivity,
as: 'groupPredefinedActivity',
required: false // Kann null sein
}
]
}
],
order: [[{ model: DiaryDates, as: 'diaryDate' }, 'date', 'DESC']],
@@ -312,12 +342,28 @@ export const getMemberLastParticipations = async (req, res) => {
// Prüfe, ob die Aktivität für die Gruppe des Participants ist
const activityGroupIds = activity.groupActivities?.map(ga => ga.groupId) || [];
if (participant.groupId !== null && activityGroupIds.includes(participant.groupId)) {
// Erstelle ein virtuelles DiaryMemberActivity-Objekt
groupActivities.push({
activity: activity,
participant: participant,
id: null // Virtuell, nicht in DB
});
// Für Gruppen-Aktivitäten: Verwende die PredefinedActivity aus GroupActivity
// Falls vorhanden, sonst die aus DiaryDateActivity
const groupActivity = activity.groupActivities?.find(ga => ga.groupId === participant.groupId);
if (groupActivity && groupActivity.groupPredefinedActivity) {
// Erstelle ein modifiziertes Activity-Objekt mit der PredefinedActivity aus GroupActivity
const modifiedActivity = {
...activity.toJSON(),
predefinedActivity: groupActivity.groupPredefinedActivity
};
groupActivities.push({
activity: modifiedActivity,
participant: participant,
id: null // Virtuell, nicht in DB
});
} else if (activity.predefinedActivity) {
// Fallback: Verwende die PredefinedActivity aus DiaryDateActivity
groupActivities.push({
activity: activity,
participant: participant,
id: null // Virtuell, nicht in DB
});
}
}
}
}