| | | 1 | | using Microsoft.AspNetCore.Mvc; |
| | | 2 | | using Microsoft.AspNetCore.Mvc.Filters; |
| | | 3 | | using OzonDomains; |
| | | 4 | | using Services.ApiSupplierSettingsServices; |
| | | 5 | | |
| | | 6 | | namespace OzonOrdersWeb.Filters; |
| | | 7 | | |
| | | 8 | | /// <summary>Прибавляет к срокам предложений надбавку из настроек API-поставщика. Висит на тех же |
| | | 9 | | /// *PriceController, что и <see cref="SupplierQuotationHistoryFilter"/>, но с большим Order — |
| | | 10 | | /// чтобы отработать раньше и история проценки записала уже итоговые сроки.</summary> |
| | | 11 | | public sealed class SupplierDeliverySurchargeFilter : IAsyncActionFilter |
| | | 12 | | { |
| | | 13 | | private readonly ApiSupplierSettingsService _settings; |
| | | 14 | | |
| | 10 | 15 | | public SupplierDeliverySurchargeFilter(ApiSupplierSettingsService settings) => _settings = settings; |
| | | 16 | | |
| | | 17 | | public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next) |
| | | 18 | | { |
| | 5 | 19 | | var executed = await next(); |
| | 5 | 20 | | if (executed.Exception is not null) return; |
| | | 21 | | |
| | 5 | 22 | | var providerKey = SupplierQuotationHistoryFilter.ResolveProviderKey(executed.Controller.GetType().Name); |
| | 6 | 23 | | if (providerKey is null || executed.Result is not ObjectResult { StatusCode: null or < 400 } result) return; |
| | | 24 | | |
| | 4 | 25 | | var offers = SupplierQuotationResultReader.ExtractOffers(result.Value); |
| | 4 | 26 | | if (offers.Count == 0) return; |
| | | 27 | | |
| | | 28 | | // Валюта здесь не важна: настройки уже существуют, а для несохранённого поставщика |
| | | 29 | | // GetAsync вернёт заготовку с нулевой надбавкой. |
| | 4 | 30 | | var settings = await _settings.GetAsync(providerKey, CurrencyCode.RUB, context.HttpContext.RequestAborted); |
| | 4 | 31 | | SupplierDeliverySurcharge.Apply(offers, settings.ExtraDeliveryHours); |
| | 4 | 32 | | SupplierQuotationPriceMultiplier.Apply(offers, settings.PriceMultiplier); |
| | 5 | 33 | | } |
| | | 34 | | } |