Enhance diary date activity service and diary view with improved drawing data handling
This commit updates the `DiaryDateActivityService` to retrieve all images associated with predefined activities and parse their drawing data, ensuring robust error handling. The `DiaryView` component is also enhanced to support both string and object representations of drawing data, improving the logic for determining activity visuals. These changes streamline the handling of drawing data across the application, enhancing user experience and data integrity.
This commit is contained in:
@@ -178,20 +178,46 @@ class DiaryDateActivityService {
|
||||
const activityData = activity.toJSON();
|
||||
|
||||
if (activityData.predefinedActivity) {
|
||||
// Hole die erste verfügbare Image-ID direkt aus der Datenbank
|
||||
// Hole alle Images aus der Datenbank
|
||||
const allImages = await PredefinedActivityImage.findAll({
|
||||
where: { predefinedActivityId: activityData.predefinedActivity.id },
|
||||
order: [['createdAt', 'ASC']]
|
||||
});
|
||||
|
||||
// Konvertiere Images zu JSON und parse drawingData falls vorhanden
|
||||
const imagesWithParsedData = allImages.map(img => {
|
||||
const imgData = img.toJSON();
|
||||
if (imgData.drawingData) {
|
||||
try {
|
||||
imgData.drawingData = JSON.parse(imgData.drawingData);
|
||||
} catch (error) {
|
||||
console.error(`Image ${imgData.id}: Error parsing drawingData:`, error);
|
||||
}
|
||||
}
|
||||
return imgData;
|
||||
});
|
||||
|
||||
// Setze images Array
|
||||
activityData.predefinedActivity.images = imagesWithParsedData;
|
||||
|
||||
const firstImage = allImages.length > 0 ? allImages[0] : null;
|
||||
|
||||
// Füge Zeichnungsdaten hinzu, falls vorhanden
|
||||
if (firstImage && firstImage.drawingData) {
|
||||
// Priorität: 1. drawingData direkt auf PredefinedActivity, 2. drawingData aus firstImage
|
||||
if (activityData.predefinedActivity.drawingData) {
|
||||
// drawingData ist bereits vorhanden (aus dem Model)
|
||||
try {
|
||||
if (typeof activityData.predefinedActivity.drawingData === 'string') {
|
||||
activityData.predefinedActivity.drawingData = JSON.parse(activityData.predefinedActivity.drawingData);
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(`Activity ${activityData.predefinedActivity.id}: Error parsing drawingData:`, error);
|
||||
}
|
||||
} else if (firstImage && firstImage.drawingData) {
|
||||
try {
|
||||
activityData.predefinedActivity.drawingData = JSON.parse(firstImage.drawingData);
|
||||
} catch (error) {
|
||||
console.error(`Activity ${activityData.predefinedActivity.id}: Error parsing drawingData:`, error);
|
||||
console.error(`Activity ${activityData.predefinedActivity.id}: Error parsing drawingData from image:`, error);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -221,12 +247,48 @@ class DiaryDateActivityService {
|
||||
});
|
||||
for (const groupActivity of activityData.groupActivities) {
|
||||
if (groupActivity.groupPredefinedActivity) {
|
||||
// Hole die erste verfügbare Image-ID direkt aus der Datenbank
|
||||
const firstImage = await PredefinedActivityImage.findOne({
|
||||
// Hole alle Images aus der Datenbank
|
||||
const allImages = await PredefinedActivityImage.findAll({
|
||||
where: { predefinedActivityId: groupActivity.groupPredefinedActivity.id },
|
||||
order: [['createdAt', 'ASC']]
|
||||
});
|
||||
|
||||
// Konvertiere Images zu JSON und parse drawingData falls vorhanden
|
||||
const imagesWithParsedData = allImages.map(img => {
|
||||
const imgData = img.toJSON();
|
||||
if (imgData.drawingData) {
|
||||
try {
|
||||
imgData.drawingData = JSON.parse(imgData.drawingData);
|
||||
} catch (error) {
|
||||
console.error(`Image ${imgData.id}: Error parsing drawingData:`, error);
|
||||
}
|
||||
}
|
||||
return imgData;
|
||||
});
|
||||
|
||||
// Setze images Array
|
||||
groupActivity.groupPredefinedActivity.images = imagesWithParsedData;
|
||||
|
||||
const firstImage = allImages.length > 0 ? allImages[0] : null;
|
||||
|
||||
// Füge Zeichnungsdaten hinzu, falls vorhanden
|
||||
// Priorität: 1. drawingData direkt auf PredefinedActivity, 2. drawingData aus firstImage
|
||||
if (groupActivity.groupPredefinedActivity.drawingData) {
|
||||
try {
|
||||
if (typeof groupActivity.groupPredefinedActivity.drawingData === 'string') {
|
||||
groupActivity.groupPredefinedActivity.drawingData = JSON.parse(groupActivity.groupPredefinedActivity.drawingData);
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(`GroupActivity ${groupActivity.groupPredefinedActivity.id}: Error parsing drawingData:`, error);
|
||||
}
|
||||
} else if (firstImage && firstImage.drawingData) {
|
||||
try {
|
||||
groupActivity.groupPredefinedActivity.drawingData = JSON.parse(firstImage.drawingData);
|
||||
} catch (error) {
|
||||
console.error(`GroupActivity ${groupActivity.groupPredefinedActivity.id}: Error parsing drawingData from image:`, error);
|
||||
}
|
||||
}
|
||||
|
||||
if (firstImage) {
|
||||
groupActivity.groupPredefinedActivity.imageUrl = `/api/predefined-activities/${groupActivity.groupPredefinedActivity.id}/image/${firstImage.id}`;
|
||||
groupActivity.groupPredefinedActivity.imageLink = `/api/predefined-activities/${groupActivity.groupPredefinedActivity.id}/image/${firstImage.id}`;
|
||||
|
||||
Reference in New Issue
Block a user