diff --git a/backend/services/diaryDateActivityService.js b/backend/services/diaryDateActivityService.js
index 92136c1..9cff7f6 100644
--- a/backend/services/diaryDateActivityService.js
+++ b/backend/services/diaryDateActivityService.js
@@ -13,10 +13,34 @@ class DiaryDateActivityService {
await checkAccess(userToken, clubId);
console.log('[DiaryDateActivityService::createActivity] - add: ', data);
const { activity, ...restData } = data;
- let predefinedActivity = await PredefinedActivity.findOne({ where: { name: data.activity } });
+ // Versuche, die PredefinedActivity robust zu finden:
+ // 1) per übergebener ID
+ // 2) per Name ODER Code (das Feld "activity" kann Kürzel oder Name sein)
+ // 3) erst dann neu anlegen
+ let predefinedActivity = null;
+
+ if (data.predefinedActivityId) {
+ predefinedActivity = await PredefinedActivity.findByPk(data.predefinedActivityId);
+ }
+
+ if (!predefinedActivity) {
+ const normalized = (data.activity || '').trim();
+ if (normalized) {
+ predefinedActivity = await PredefinedActivity.findOne({
+ where: {
+ [Op.or]: [
+ { name: normalized },
+ { code: normalized }
+ ]
+ }
+ });
+ }
+ }
+
if (!predefinedActivity) {
predefinedActivity = await PredefinedActivity.create({
- name: data.activity,
+ name: data.name || data.activity || '',
+ code: data.code || (data.activity || ''),
description: data.description || '',
duration: data.duration && data.duration !== '' ? parseInt(data.duration) : null
});
@@ -140,9 +164,7 @@ class DiaryDateActivityService {
}
async getActivities(userToken, clubId, diaryDateId) {
- console.log('[DiaryDateActivityService::getActivities] - check user access - SERVER RESTARTED');
await checkAccess(userToken, clubId);
- console.log(`[DiaryDateActivityService::getActivities] - fetch activities for diaryDateId: ${diaryDateId}`);
const activities = await DiaryDateActivity.findAll({
where: { diaryDateId },
order: [['orderId', 'ASC']],
@@ -173,32 +195,25 @@ class DiaryDateActivityService {
}
]
});
- console.log(`[DiaryDateActivityService::getActivities] - found ${activities.length} activities`);
// Füge imageUrl zu jeder PredefinedActivity hinzu
- console.log('[DiaryDateActivityService::getActivities] - Adding imageUrl to activities');
const activitiesWithImages = await Promise.all(activities.map(async activity => {
// Konvertiere zu JSON und zurück, um alle Eigenschaften zu serialisieren
const activityData = activity.toJSON();
if (activityData.predefinedActivity) {
- console.log(JSON.parse(JSON.stringify(activityData)));
// Hole die erste verfügbare Image-ID direkt aus der Datenbank
const allImages = await PredefinedActivityImage.findAll({
where: { predefinedActivityId: activityData.predefinedActivity.id },
order: [['createdAt', 'ASC']]
});
- console.log(`Activity ${activityData.predefinedActivity.id}: allImages =`, allImages.map(img => ({ id: img.id, activityId: img.predefinedActivityId, hasDrawingData: !!img.drawingData })));
-
const firstImage = allImages.length > 0 ? allImages[0] : null;
- console.log(`Activity ${activityData.predefinedActivity.id}: firstImage =`, firstImage?.id);
// Füge Zeichnungsdaten hinzu, falls vorhanden
if (firstImage && firstImage.drawingData) {
try {
activityData.predefinedActivity.drawingData = JSON.parse(firstImage.drawingData);
- console.log(`Activity ${activityData.predefinedActivity.id}: drawingData loaded:`, activityData.predefinedActivity.drawingData);
} catch (error) {
console.error(`Activity ${activityData.predefinedActivity.id}: Error parsing drawingData:`, error);
}
diff --git a/frontend/src/components/CourtDrawingRender.vue b/frontend/src/components/CourtDrawingRender.vue
new file mode 100644
index 0000000..295c80e
--- /dev/null
+++ b/frontend/src/components/CourtDrawingRender.vue
@@ -0,0 +1,420 @@
+
+