feat(document-sync): enhance metadata update to reset file status after preview generation

This commit is contained in:
bsiggel
2026-03-08 18:59:56 +00:00
parent ba657ecd3b
commit 4ed752b19e
2 changed files with 19 additions and 7 deletions

View File

@@ -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:

View File

@@ -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