Загрузка данных


dmitriev-aal@VDI-Dmitriev-A:~/Desktop/rshbintech/it-invest/brokerage-service/sinv/quotes$ sed -n '1,120p' src/Quotes.Application/Api/IpsApiClient.cs
using Flurl.Http;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using RSHBIntech.BrokerageService.Sinv.Quotes.Application.Contracts;

namespace RSHBIntech.BrokerageService.Sinv.Quotes.Application.Api;

/// <inheritdoc/>
public sealed class IpsApiClient : IIpsApiClient
{
    private readonly IOptionsMonitor<IpsApiOptions> _ipsApiOptions;
    private readonly ILogger<IpsApiClient> _logger;

    public IpsApiClient(IOptionsMonitor<IpsApiOptions> ipsApiOptions, ILogger<IpsApiClient> logger)
    {
        _ipsApiOptions = ipsApiOptions;
        _logger = logger;
    }
    
    /// <inheritdoc/>
    public async Task<bool> UpdateBbInstrumentAsync(BbInstrumentIpsContract bbInstrument, CancellationToken cancellationToken)
    {
        try
        {
            string? baseUrl = _ipsApiOptions.CurrentValue.BaseApiUrl;

            if (baseUrl is null)
            {
                _logger.LogWarning("Настройка IpsApiOptions:BaseApiUrl не задана, обновление первичного размещения в IPS невозможно");
                return false;
            }

            _logger.LogInformation("Выполнение запроса для обновления размещения в IPS с данными {@ApiRequestBody}", bbInstrument);
            
            string apiUrl = $"{baseUrl}/api/v2/IPO_INSTRUMENTS/write";
            await apiUrl.PatchJsonAsync(bbInstrument, cancellationToken: cancellationToken);

            _logger.LogInformation("Запрос api для обновления размещения в IPS успешно завершен");
            
            return true;
        }
        catch (FlurlHttpException httpException)
        {
            _logger.LogError(httpException, "При обновлении через api в IPS первичного размещения с книгой произошла ошибка с кодом ответа {HttpCode}", httpException.StatusCode);
        }
        catch (Exception exception)
        {
            _logger.LogError(exception, "При обновлении через api в IPS первичного размещения с книгой произошла ошибка");
        }

        return false;
    }
}dmitriev-aal@VDI-Dmitriev-A:~/Desktop/rshbintech/it-invest/brokerage-service/sinv/quotes$ cat src/Quotes.Application/Api/IpsApiOptions.cs
namespace RSHBIntech.BrokerageService.Sinv.Quotes.Application.Api;

/// <summary>
/// Настройки для взаимодействия с IPS по api
/// </summary>
public sealed class IpsApiOptions
{
    /// <summary>
    /// Адрес IPS Api
    /// </summary>
    public required string? BaseApiUrl { get; init; }
    
    /// <summary>
    /// Использовать заглушку
    /// </summary>
    public required bool UseMock { get; init; }
}dmitriev-aal@VDI-Dmitriev-A:~/Desktop/rshbintech/it-invest/brokerage-service/sinv/quotes$