From 8c12eb17216bdfc341999f43f8b6d908e91e5015 Mon Sep 17 00:00:00 2001 From: Samir Boulahtit Date: Sat, 20 Dec 2025 23:01:59 +0100 Subject: [PATCH] fix: export job records display shows files instead of mixed metrics MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- app/api/v1/admin/vendors.py | 8 ++++--- app/services/letzshop_export_service.py | 27 ++++++++++++++---------- docs/guides/letzshop-admin-management.md | 11 +++++++++- 3 files changed, 31 insertions(+), 15 deletions(-) diff --git a/app/api/v1/admin/vendors.py b/app/api/v1/admin/vendors.py index 6f7a8c38..af52410b 100644 --- a/app/api/v1/admin/vendors.py +++ b/app/api/v1/admin/vendors.py @@ -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, ) diff --git a/app/services/letzshop_export_service.py b/app/services/letzshop_export_service.py index 600b7c71..5e4dee29 100644 --- a/app/services/letzshop_export_service.py +++ b/app/services/letzshop_export_service.py @@ -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() diff --git a/docs/guides/letzshop-admin-management.md b/docs/guides/letzshop-admin-management.md index 6ad505c7..d6ec7b30 100644 --- a/docs/guides/letzshop-admin-management.md +++ b/docs/guides/letzshop-admin-management.md @@ -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