Skip to main content
Version: 1.0.0

deleteCatalogOrder

Function Name: deleteCatalogOrder

Author: Domenico Cerone Creation Date: 09/10/2025
Last Reviewer: Domenico Cerone

Trigger: HTTPS (onRequest)

Purpose: Deletes all Products and Variants associated with a CatalogOrder. The CatalogOrder is marked as 'cancelled' but NOT deleted.

Detailed Functionalityโ€‹

This Firebase Function performs the following operations in sequence:

1. Input Validationโ€‹

  • Accepts catalogOrderId as required parameter
  • Validates that the ID is not empty or null
  • Returns 400 error for invalid input

2. CatalogOrder Loadingโ€‹

  • Loads the document from CatalogOrders collection using the provided ID
  • Verifies document existence (returns 404 if not found)
  • Extracts list_3d_assets_results array containing related products
  • Each element contains: skuCode, productRef, variantRef, eanCode, upcCode, etc.
  • Batch Processing: Processes elements in batches of 10 for optimal performance
  • Parallel Processing: Elements within each batch are processed in parallel
  • Sequential Batches: Batches are processed sequentially with 200ms delay between them
  • For each element in list_3d_assets_results:
    • Extracts productRef (e.g., "xAohrMTJYHFwmCXXEHu0")
    • Deletes document from Products collection using productRef as ID
    • Extracts variantRef (e.g., "IRQyGSgmjKK5qivFR2FH")
    • Deletes document from Variants collection using variantRef as ID
  • Handles errors for individual documents without interrupting the entire process
  • Tracks deletion statistics (successes/errors)

4. CatalogOrder Status Updateโ€‹

  • After deleting all related documents
  • Updates the CatalogOrder document setting status: 'cancelled'
  • Adds cancelledAt timestamp and cancelledBy field
  • Does NOT delete the CatalogOrder document (only marks it as cancelled)

5. Error Handling and Resilienceโ€‹

  • Individual Document Errors: Continues processing even if single documents fail
  • Missing References: Handles cases where productRef or variantRef are missing
  • Non-existent Documents: Considers already deleted documents as successful operations
  • Batch Error Recovery: If an entire batch fails, marks all elements as failed but continues
  • Comprehensive Logging: Detailed logging with unique request IDs for tracking

6. Performance Optimizationโ€‹

  • Memory: 1GiB allocated for handling large volumes
  • Timeout: 30 minutes (1800 seconds) for processing large catalogs
  • Batch Size: 10 elements per batch to balance performance and memory usage
  • Parallel Processing: Within-batch parallel execution for faster processing
  • Delay Management: 200ms delay between batches to avoid overwhelming Firestore

7. Response Logicโ€‹

The function returns detailed statistics including:

  • Deletion Counts: Separate counts for Products and Variants
  • Operation Statistics: Total processed, successful, and failed operations
  • CatalogOrder Status: Whether the order was successfully marked as cancelled
  • Detailed Results: Array with results for each processed element
  • Request Tracking: Unique request ID for operation tracking

8. Status Codesโ€‹

  • 200: Complete success (all operations successful)
  • 207: Partial success (some operations failed but CatalogOrder was cancelled)
  • 400: Invalid input (missing or empty catalogOrderId)
  • 404: CatalogOrder not found
  • 500: Server error during processing

Input (Payload):โ€‹

For the HTTP function:

{
"catalogOrderId": "5AdIae1rNiSfaRa1HyyL"
}

Output (Success):โ€‹

{
"success": true,
"catalogOrderId": "5AdIae1rNiSfaRa1HyyL",
"deletedProducts": 3,
"deletedVariants": 3,
"totalProcessed": 6,
"successfulOperations": 6,
"failedOperations": 0,
"catalogOrderCancelled": true,
"message": "Products e Variants eliminati con successo, CatalogOrder 5AdIae1rNiSfaRa1HyyL marcato come cancelled",
"requestId": "DEL_1234567890_abc123def",
"deletionDetails": [
{
"success": true,
"index": 0,
"skuCode": "3102687C55110",
"productRef": "xAohrMTJYHFwmCXXEHu0",
"variantRef": "IRQyGSgmjKK5qivFR2FH",
"successfulDeletions": 2,
"failedDeletions": 0,
"deletionResults": [
{
"type": "Product",
"success": true,
"collection": "Products",
"documentId": "xAohrMTJYHFwmCXXEHu0",
"message": "Documento eliminato con successo",
"wasDeleted": true
},
{
"type": "Variant",
"success": true,
"collection": "Variants",
"documentId": "IRQyGSgmjKK5qivFR2FH",
"message": "Documento eliminato con successo",
"wasDeleted": true
}
],
"message": "Elemento 1 (SKU: 3102687C55110): 2 successi, 0 errori"
}
]
}

Output (Error):โ€‹

{
"success": false,
"catalogOrderId": "5AdIae1rNiSfaRa1HyyL",
"message": "CatalogOrder con ID 5AdIae1rNiSfaRa1HyyL non trovato",
"requestId": "DEL_1234567890_abc123def"
}

Testingโ€‹

URL (if HTTPS): http://127.0.0.1:5001/arshadesstaging/europe-central2/deleteCatalogOrder

Test with Emulator:

  1. Start the Firebase emulator: firebase emulators:start --only functions
  2. Ensure you're using Node.js version 20: nvm use 20
  3. Test with curl:
curl -X POST "http://127.0.0.1:5001/arshadesstaging/europe-central2/deleteCatalogOrder" \
-H "Content-Type: application/json" \
-d '{"catalogOrderId": "5AdIae1rNiSfaRa1HyyL"}'

Postman Testing:

Deploy Command:โ€‹

firebase deploy --only functions:deleteCatalogOrder

Production URL:โ€‹

Live Function: https://europe-central2-arshades-7e18a.cloudfunctions.net/deleteCatalogOrder