fix: export job records display shows files instead of mixed metrics

Previously export jobs showed "3/23" (languages/products) which was confusing.
Now shows "3/3" (files succeeded / files processed) for consistency.

- Updated log_export to track files_processed/succeeded/failed
- Products count stored in error_details for reference
- Updated documentation to explain records column meaning per job type

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2025-12-20 23:01:59 +01:00
parent 6e0eb679d9
commit 8c12eb1721
3 changed files with 31 additions and 15 deletions

View File

@@ -445,15 +445,17 @@ def export_vendor_products_letzshop_to_folder(
})
# Log the export operation via service
# For exports, track files (languages) as the unit of work
completed_at = datetime.now(UTC)
letzshop_export_service.log_export(
db=db,
vendor_id=vendor.id,
started_at=started_at,
completed_at=completed_at,
records_processed=total_records,
languages_succeeded=len(languages) - failed_count,
languages_failed=failed_count,
files_processed=len(languages),
files_succeeded=len(languages) - failed_count,
files_failed=failed_count,
products_exported=total_records,
triggered_by=f"admin:{current_admin.id}",
error_details={"files": exported_files} if failed_count > 0 else None,
)

View File

@@ -287,9 +287,10 @@ class LetzshopExportService:
vendor_id: int,
started_at: datetime,
completed_at: datetime,
records_processed: int,
languages_succeeded: int,
languages_failed: int,
files_processed: int,
files_succeeded: int,
files_failed: int,
products_exported: int,
triggered_by: str,
error_details: dict | None = None,
) -> LetzshopSyncLog:
@@ -301,9 +302,10 @@ class LetzshopExportService:
vendor_id: Vendor ID
started_at: When the export started
completed_at: When the export completed
records_processed: Number of products exported
languages_succeeded: Number of languages successfully exported
languages_failed: Number of languages that failed
files_processed: Number of language files to export (e.g., 3)
files_succeeded: Number of files successfully exported
files_failed: Number of files that failed
products_exported: Total products in the export
triggered_by: Who triggered the export (e.g., "admin:123")
error_details: Optional error details if any failures
@@ -314,15 +316,18 @@ class LetzshopExportService:
vendor_id=vendor_id,
operation_type="product_export",
direction="outbound",
status="completed" if languages_failed == 0 else "partial",
records_processed=records_processed,
records_succeeded=languages_succeeded,
records_failed=languages_failed,
status="completed" if files_failed == 0 else "partial",
records_processed=files_processed,
records_succeeded=files_succeeded,
records_failed=files_failed,
started_at=started_at,
completed_at=completed_at,
duration_seconds=int((completed_at - started_at).total_seconds()),
triggered_by=triggered_by,
error_details=error_details,
error_details={
"products_exported": products_exported,
**(error_details or {}),
} if products_exported or error_details else None,
)
db.add(sync_log)
db.flush()

View File

@@ -155,10 +155,19 @@ Each job displays:
- **ID**: Unique job identifier
- **Type**: Import, Export, Historical Import, or Order Sync
- **Status**: Pending, Processing, Completed, Failed, or Partial
- **Records**: Success count / Total processed (failed count)
- **Records**: Success count / Total processed (failed count if any)
- **Started**: When the job began
- **Duration**: How long the job took
#### Records Column Meaning
| Job Type | Records Shows |
|----------|---------------|
| Product Import | Products imported / Total products |
| Product Export | Files exported / Total files (3 languages) |
| Historical Import | Orders imported / Total orders |
| Order Sync | Orders synced / Total orders |
### Filtering
- **Type Filter**: Show specific job types