feat: enhance inventory release logic in ExpirePendingOrdersService and InventoryService
Build and Deploy to Kubernetes / build-and-deploy (push) Successful in 8m27s

This commit is contained in:
masoodafar-web
2026-05-01 00:56:00 +03:30
parent 624ab7ea9f
commit eeb837f32e
2 changed files with 49 additions and 3 deletions
@@ -79,10 +79,47 @@ public class ExpirePendingOrdersService : BackgroundService
// آزادسازی رزرو موجودی
foreach (var detail in order.OrderDetails)
{
var inventoryItem = await inventoryService.GetInventoryAsync(
detail.ProductId,
ProductType.DiscountProduct,
null,
cancellationToken);
if (inventoryItem == null)
{
_logger.LogWarning(
"Skipping inventory release for expired order #{OrderId}, ProductId={ProductId} because InventoryItem was not found",
order.Id,
detail.ProductId);
continue;
}
if (inventoryItem.ReservedQuantity <= 0)
{
_logger.LogInformation(
"Skipping inventory release for expired order #{OrderId}, ProductId={ProductId} because no reserved quantity remains",
order.Id,
detail.ProductId);
continue;
}
var releaseQuantity = Math.Min(detail.Count, inventoryItem.ReservedQuantity);
if (releaseQuantity < detail.Count)
{
_logger.LogWarning(
"Partial reservation release for expired order #{OrderId}, ProductId={ProductId}: requested={Requested}, reserved={Reserved}, releasing={Released}",
order.Id,
detail.ProductId,
detail.Count,
inventoryItem.ReservedQuantity,
releaseQuantity);
}
await inventoryService.ReleaseReservationAsync(
detail.ProductId,
ProductType.DiscountProduct,
detail.Count,
releaseQuantity,
order.Id,
cancellationToken);
}