| | | 1 | | using Hangfire; |
| | | 2 | | using Microsoft.Extensions.Logging; |
| | | 3 | | using OzonRepositories.Data; |
| | | 4 | | using Services.HangfireService; |
| | | 5 | | |
| | | 6 | | namespace Services.SearchServices.OrderSearch; |
| | | 7 | | |
| | | 8 | | /// <summary> |
| | | 9 | | /// Реализация <see cref="IOrderChangeNotifier"/> (интерфейс объявлен в OzonRepositories, чтобы не |
| | | 10 | | /// создавать обратную зависимость слоёв) — ставит изменённый заказ на переиндексацию в Elasticsearch |
| | | 11 | | /// через Hangfire. Даёт секундную задержку для большинства операций; всё, что мимо неё пройдёт, |
| | | 12 | | /// всё равно подхватит OrderSearchIncrementalSyncJob по Order.UpdatedAt в течение ~1 минуты. |
| | | 13 | | /// </summary> |
| | | 14 | | public class OrderChangeNotifier : IOrderChangeNotifier |
| | | 15 | | { |
| | | 16 | | private readonly IBackgroundJobClient _backgroundJobClient; |
| | | 17 | | private readonly ILogger<OrderChangeNotifier> _logger; |
| | | 18 | | |
| | 0 | 19 | | public OrderChangeNotifier(IBackgroundJobClient backgroundJobClient, ILogger<OrderChangeNotifier> logger) |
| | | 20 | | { |
| | 0 | 21 | | _backgroundJobClient = backgroundJobClient; |
| | 0 | 22 | | _logger = logger; |
| | 0 | 23 | | } |
| | | 24 | | |
| | | 25 | | public void NotifyOrderChanged(int orderId) |
| | | 26 | | { |
| | | 27 | | try |
| | | 28 | | { |
| | 0 | 29 | | _backgroundJobClient.EnqueueMain<IOrderSearchSyncService>(x => x.SyncOrderAsync(orderId)); |
| | 0 | 30 | | } |
| | 0 | 31 | | catch (Exception ex) |
| | | 32 | | { |
| | 0 | 33 | | _logger.LogWarning(ex, "Не удалось поставить заказ {OrderId} на переиндексацию — подхватит incremental sync" |
| | 0 | 34 | | } |
| | 0 | 35 | | } |
| | | 36 | | |
| | | 37 | | public void NotifyOrdersChanged(IEnumerable<int> orderIds) |
| | | 38 | | { |
| | 0 | 39 | | foreach (var orderId in orderIds.Distinct()) |
| | | 40 | | { |
| | 0 | 41 | | NotifyOrderChanged(orderId); |
| | | 42 | | } |
| | 0 | 43 | | } |
| | | 44 | | } |