| | | 1 | | using Microsoft.AspNetCore.Mvc; |
| | | 2 | | using OzonDomains; |
| | | 3 | | using OzonDomains.Models; |
| | | 4 | | using OzonOrdersWeb.Areas.Studio2.ViewModels.TransactionsGrid; |
| | | 5 | | using Services.ApiSupplierSettingsServices; |
| | | 6 | | |
| | | 7 | | namespace OzonOrdersWeb.WebServices.Transactions.Grid.Load; |
| | | 8 | | |
| | | 9 | | public interface ITransactionGridQuotationSourcesProvider |
| | | 10 | | { |
| | | 11 | | /// <summary>Реестр провайдеров предложений для клиента (порт <c>apiSupplierQuotationSources</c> из _TransactionScri |
| | | 12 | | Task<IReadOnlyList<TransactionGridQuotationSource>> GetAsync(IUrlHelper url, CancellationToken cancellationToken); |
| | | 13 | | } |
| | | 14 | | |
| | | 15 | | /// <summary> |
| | | 16 | | /// Один список вместо 21 константы в Razor: ключ, имя, endpoint <c>Search</c> у <c>*PriceController</c>, |
| | | 17 | | /// флаг из настроек API-поставщика. Контроллеры цен не меняются. |
| | | 18 | | /// </summary> |
| | | 19 | | public sealed class TransactionGridQuotationSourcesProvider : ITransactionGridQuotationSourcesProvider |
| | | 20 | | { |
| | 0 | 21 | | private static readonly (string Key, string Name, string Controller, bool Warmup, CurrencyCode Currency)[] Registry |
| | 0 | 22 | | { |
| | 0 | 23 | | (ApiSupplierSettings.ArmtekProviderKey, "Армтек", "ArmtekPrice", true, CurrencyCode.RUB), |
| | 0 | 24 | | (ApiSupplierSettings.ArmtekByProviderKey, "Армтек BY", "ArmtekByPrice", true, CurrencyCode.BYN), |
| | 0 | 25 | | (ApiSupplierSettings.ShateMProviderKey, "Шате‑М", "ShateMPrice", false, CurrencyCode.BYN), |
| | 0 | 26 | | (ApiSupplierSettings.AvdProviderKey, "АВД", "AvdPrice", false, CurrencyCode.RUB), |
| | 0 | 27 | | (ApiSupplierSettings.BergProviderKey, "Берг", "BergPrice", false, CurrencyCode.RUB), |
| | 0 | 28 | | (ApiSupplierSettings.JapartsProviderKey, "Japarts", "JapartsPrice", false, CurrencyCode.RUB), |
| | 0 | 29 | | (ApiSupplierSettings.MotexProviderKey, "МоТехС", "MotexPrice", false, CurrencyCode.RUB), |
| | 0 | 30 | | (ApiSupplierSettings.MlAutoProviderKey, "ML-Auto BY", "MlAutoPrice", false, CurrencyCode.BYN), |
| | 0 | 31 | | (ApiSupplierSettings.MlAutoRuProviderKey, "ML-Auto RU", "MlAutoRuPrice", false, CurrencyCode.RUB), |
| | 0 | 32 | | (ApiSupplierSettings.ForumAutoProviderKey, "Форум-Авто (Союз)", "ForumAutoPrice", false, CurrencyCode.RUB), |
| | 0 | 33 | | (ApiSupplierSettings.ForumAutoInterpartsProviderKey, "Форум-Авто (Интерпартс)", "ForumAutoInterpartsPrice", fals |
| | 0 | 34 | | (ApiSupplierSettings.ForumAutoPiterProviderKey, "Форум-Авто (Питер)", "ForumAutoPiterPrice", false, CurrencyCode |
| | 0 | 35 | | (ApiSupplierSettings.ForumAutoRostovProviderKey, "Форум-Авто (Ростов)", "ForumAutoRostovPrice", false, CurrencyC |
| | 0 | 36 | | (ApiSupplierSettings.ForumAutoIstraProviderKey, "Форум-Авто (Истра)", "ForumAutoIstraPrice", false, CurrencyCode |
| | 0 | 37 | | (ApiSupplierSettings.FavoritPartsProviderKey, "Фаворит Союз", "FavoritPartsPrice", false, CurrencyCode.RUB), |
| | 0 | 38 | | (ApiSupplierSettings.FavoritPartsIstraProviderKey, "Фаворит Истра", "FavoritPartsIstraPrice", false, CurrencyCod |
| | 0 | 39 | | (ApiSupplierSettings.FavoritPartsRostovProviderKey, "Фаворит Ростов", "FavoritPartsRostovPrice", false, Currency |
| | 0 | 40 | | (ApiSupplierSettings.MoskvorechieIstraProviderKey, "Москворечье (Истра)", "MoskvorechieIstraPrice", false, Curre |
| | 0 | 41 | | (ApiSupplierSettings.ProfitLigaProviderKey, "Профит-Лига", "ProfitLigaPrice", false, CurrencyCode.RUB), |
| | 0 | 42 | | (ApiSupplierSettings.NikeiProviderKey, "Nikei", "NikeiPrice", false, CurrencyCode.RUB), |
| | 0 | 43 | | (ApiSupplierSettings.MikadoMskHod20ProviderKey, "Микадо МскХод20", "MikadoMskHod20Price", false, CurrencyCode.RU |
| | 0 | 44 | | (ApiSupplierSettings.ZZapMoscowProviderKey, "ZZap Москва", "ZZapMoscowPrice", false, CurrencyCode.RUB) |
| | 0 | 45 | | }; |
| | | 46 | | |
| | | 47 | | private readonly ApiSupplierSettingsService? _settings; |
| | | 48 | | |
| | 0 | 49 | | public TransactionGridQuotationSourcesProvider(ApiSupplierSettingsService? settings = null) |
| | | 50 | | { |
| | 0 | 51 | | _settings = settings; |
| | 0 | 52 | | } |
| | | 53 | | |
| | | 54 | | public async Task<IReadOnlyList<TransactionGridQuotationSource>> GetAsync(IUrlHelper url, CancellationToken cancella |
| | | 55 | | { |
| | 0 | 56 | | var result = new List<TransactionGridQuotationSource>(Registry.Length); |
| | 0 | 57 | | foreach (var (key, name, controller, warmup, currency) in Registry) |
| | | 58 | | { |
| | 0 | 59 | | var enabled = true; |
| | 0 | 60 | | var displayName = name; |
| | 0 | 61 | | if (_settings != null) |
| | | 62 | | { |
| | 0 | 63 | | var settings = await _settings.GetAsync(key, currency, cancellationToken); |
| | 0 | 64 | | enabled = settings.IsQuotationEnabled; |
| | 0 | 65 | | if (!string.IsNullOrWhiteSpace(settings.DisplayName)) |
| | 0 | 66 | | displayName = settings.DisplayName; |
| | | 67 | | } |
| | | 68 | | |
| | 0 | 69 | | var endpoint = url.Action("Search", controller, new { area = "Studio2" }); |
| | 0 | 70 | | if (string.IsNullOrEmpty(endpoint)) |
| | | 71 | | { |
| | | 72 | | continue; |
| | | 73 | | } |
| | | 74 | | |
| | 0 | 75 | | result.Add(new TransactionGridQuotationSource( |
| | 0 | 76 | | key, displayName, endpoint, |
| | 0 | 77 | | warmup ? url.Action("Warmup", controller, new { area = "Studio2" }) : null, |
| | 0 | 78 | | enabled, |
| | 0 | 79 | | $"/Studio2/ApiSupplierSettings/{key}")); |
| | 0 | 80 | | } |
| | | 81 | | |
| | 0 | 82 | | return result; |
| | 0 | 83 | | } |
| | | 84 | | } |