| | | 1 | | using Services.OrderControlServices; |
| | | 2 | | |
| | | 3 | | namespace OzonOrdersWeb.WebServices.Orders; |
| | | 4 | | |
| | | 5 | | /// <summary> |
| | | 6 | | /// Адаптер SLA к штатному обновлению статусов Ozon через API. |
| | | 7 | | /// </summary> |
| | 0 | 8 | | public sealed class OrderControlCandidateStatusSynchronizer(IOrdersClientStatusSyncService clientStatusSyncService) |
| | | 9 | | : IOrderControlCandidateStatusSynchronizer |
| | | 10 | | { |
| | | 11 | | public async Task<IReadOnlySet<int>> SynchronizeAsync(IReadOnlyCollection<int> orderIds, CancellationToken cancellat |
| | | 12 | | { |
| | 0 | 13 | | var distinctIds = orderIds.Distinct().ToArray(); |
| | 0 | 14 | | if (distinctIds.Length == 0) |
| | 0 | 15 | | return new HashSet<int>(); |
| | | 16 | | |
| | 0 | 17 | | var result = await clientStatusSyncService.SyncOrderStatusesAsync(distinctIds, cancellationToken); |
| | | 18 | | // Ошибка на весь батч (например, недоступен справочник клиентов Ozon) — ни один заказ |
| | | 19 | | // в этом проходе не считается актуализированным, а не только те, что реально не ответили. |
| | 0 | 20 | | if (!string.IsNullOrWhiteSpace(result.Error)) |
| | 0 | 21 | | return new HashSet<int>(); |
| | | 22 | | |
| | 0 | 23 | | return distinctIds.Where(id => !result.FailedOrderIds.Contains(id)).ToHashSet(); |
| | 0 | 24 | | } |
| | | 25 | | } |