feat(document-sync): enhance metadata update to reset file status after preview generation
This commit is contained in:
@@ -484,10 +484,11 @@ class DocumentSync(BaseSyncUtils):
|
|||||||
collection_ids: Optional[List[str]] = None,
|
collection_ids: Optional[List[str]] = None,
|
||||||
file_hash: Optional[str] = None,
|
file_hash: Optional[str] = None,
|
||||||
preview_data: Optional[bytes] = None,
|
preview_data: Optional[bytes] = None,
|
||||||
|
reset_file_status: bool = False,
|
||||||
entity_type: str = 'CDokumente'
|
entity_type: str = 'CDokumente'
|
||||||
) -> None:
|
) -> None:
|
||||||
"""
|
"""
|
||||||
Updated Document-Metadaten nach erfolgreichem xAI-Sync
|
Updated Document-Metadaten nach erfolgreichem xAI-Sync oder Preview-Generierung
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
document_id: EspoCRM Document ID
|
document_id: EspoCRM Document ID
|
||||||
@@ -495,6 +496,7 @@ class DocumentSync(BaseSyncUtils):
|
|||||||
collection_ids: Liste der xAI Collection IDs (optional)
|
collection_ids: Liste der xAI Collection IDs (optional)
|
||||||
file_hash: MD5/SHA Hash des gesyncten Files
|
file_hash: MD5/SHA Hash des gesyncten Files
|
||||||
preview_data: Vorschaubild (WebP) als bytes
|
preview_data: Vorschaubild (WebP) als bytes
|
||||||
|
reset_file_status: Ob fileStatus/dateiStatus zurückgesetzt werden soll
|
||||||
entity_type: Entity-Type (CDokumente oder Document)
|
entity_type: Entity-Type (CDokumente oder Document)
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
@@ -511,13 +513,15 @@ class DocumentSync(BaseSyncUtils):
|
|||||||
if collection_ids is not None:
|
if collection_ids is not None:
|
||||||
update_data['xaiCollections'] = collection_ids
|
update_data['xaiCollections'] = collection_ids
|
||||||
|
|
||||||
# Nur Status auf "Gesynct" setzen wenn xAI-File-ID vorhanden
|
# Status zurücksetzen wenn xAI-Sync erfolgt ist ODER explizit angefordert
|
||||||
if xai_file_id:
|
if xai_file_id or reset_file_status:
|
||||||
# CDokumente verwendet fileStatus, Document verwendet dateiStatus
|
# CDokumente verwendet fileStatus, Document verwendet dateiStatus
|
||||||
if entity_type == 'CDokumente':
|
if entity_type == 'CDokumente':
|
||||||
update_data['fileStatus'] = 'synced'
|
# Bei xAI-Sync: "synced", bei nur Preview: "processed"
|
||||||
|
update_data['fileStatus'] = 'synced' if xai_file_id else 'processed'
|
||||||
else:
|
else:
|
||||||
update_data['dateiStatus'] = 'Gesynct'
|
# Bei xAI-Sync: "Gesynct", bei nur Preview: "Verarbeitet"
|
||||||
|
update_data['dateiStatus'] = 'Gesynct' if xai_file_id else 'Verarbeitet'
|
||||||
|
|
||||||
# Hash speichern für zukünftige Change Detection
|
# Hash speichern für zukünftige Change Detection
|
||||||
if file_hash:
|
if file_hash:
|
||||||
|
|||||||
@@ -214,17 +214,23 @@ async def handle_create_or_update(entity_id: str, document: Dict[str, Any], sync
|
|||||||
if preview_data:
|
if preview_data:
|
||||||
ctx.logger.info(f"✅ Preview generated: {len(preview_data)} bytes WebP")
|
ctx.logger.info(f"✅ Preview generated: {len(preview_data)} bytes WebP")
|
||||||
|
|
||||||
# 5. Upload Preview zu EspoCRM
|
# 5. Upload Preview zu EspoCRM und reset file status
|
||||||
ctx.logger.info(f"📤 Uploading preview to EspoCRM...")
|
ctx.logger.info(f"📤 Uploading preview to EspoCRM...")
|
||||||
await sync_utils.update_sync_metadata(
|
await sync_utils.update_sync_metadata(
|
||||||
entity_id,
|
entity_id,
|
||||||
preview_data=preview_data,
|
preview_data=preview_data,
|
||||||
|
reset_file_status=True, # Reset status nach Preview-Generierung
|
||||||
entity_type=entity_type
|
entity_type=entity_type
|
||||||
# Keine xaiFileId/collections - nur Preview update
|
|
||||||
)
|
)
|
||||||
ctx.logger.info(f"✅ Preview uploaded successfully")
|
ctx.logger.info(f"✅ Preview uploaded successfully")
|
||||||
else:
|
else:
|
||||||
ctx.logger.warn("⚠️ Preview-Generierung lieferte keine Daten")
|
ctx.logger.warn("⚠️ Preview-Generierung lieferte keine Daten")
|
||||||
|
# Auch bei fehlgeschlagener Preview-Generierung Status zurücksetzen
|
||||||
|
await sync_utils.update_sync_metadata(
|
||||||
|
entity_id,
|
||||||
|
reset_file_status=True,
|
||||||
|
entity_type=entity_type
|
||||||
|
)
|
||||||
|
|
||||||
finally:
|
finally:
|
||||||
# Cleanup temp file
|
# Cleanup temp file
|
||||||
@@ -250,6 +256,8 @@ async def handle_create_or_update(entity_id: str, document: Dict[str, Any], sync
|
|||||||
|
|
||||||
if not needs_sync:
|
if not needs_sync:
|
||||||
ctx.logger.info("✅ Kein xAI-Sync erforderlich, Lock wird released")
|
ctx.logger.info("✅ Kein xAI-Sync erforderlich, Lock wird released")
|
||||||
|
# Wenn Preview generiert wurde aber kein xAI sync nötig,
|
||||||
|
# wurde Status bereits in Preview-Schritt zurückgesetzt
|
||||||
await sync_utils.release_sync_lock(entity_id, success=True, entity_type=entity_type)
|
await sync_utils.release_sync_lock(entity_id, success=True, entity_type=entity_type)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user