< Summary

Information
Class: OzonOrdersWeb.Areas.Studio2.Controllers.Directories.ApiSupplierController
Assembly: OzonOrdersWeb
File(s): /home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/Areas/Studio2/Controllers/Directories/ApiSupplierController.cs
Line coverage
100%
Covered lines: 26
Uncovered lines: 0
Coverable lines: 26
Total lines: 59
Line coverage: 100%
Branch coverage
90%
Covered branches: 9
Total branches: 10
Branch coverage: 90%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%22100%
Ping()87.5%88100%

File(s)

/home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/Areas/Studio2/Controllers/Directories/ApiSupplierController.cs

#LineLine coverage
 1using Microsoft.AspNetCore.Authorization;
 2using Microsoft.AspNetCore.Mvc;
 3using Microsoft.Extensions.Logging;
 4using Microsoft.Extensions.Logging.Abstractions;
 5using OzonOrdersWeb.Authorization;
 6using Services.ApiServices.ApiSupplierIntegration;
 7
 8namespace OzonOrdersWeb.Areas.Studio2.Controllers.Directories;
 9
 10/// <summary>Общие read-only действия для всех API-поставщиков из реестра.</summary>
 11[Area("Studio2")]
 12[ServiceEndpoint]
 13[Authorize(Roles = "User,Admin")]
 14[Route("ApiSupplier/[action]")]
 15public sealed class ApiSupplierController : Controller
 16{
 17    private readonly ApiSupplierConnectorRegistry _registry;
 18    private readonly ILogger<ApiSupplierController> _logger;
 19
 520    public ApiSupplierController(
 521        ApiSupplierConnectorRegistry registry,
 522        ILogger<ApiSupplierController>? logger = null)
 23    {
 524        _registry = registry;
 525        _logger = logger ?? NullLogger<ApiSupplierController>.Instance;
 526    }
 27
 28    [HttpGet, ServiceEndpoint]
 29    public async Task<IActionResult> Ping(string providerKey, CancellationToken cancellationToken)
 30    {
 531        if (!_registry.TryGet(providerKey, out var connector) || connector == null)
 132            return BadRequest(new { error = true, message = "Неизвестный API-поставщик." });
 33
 34        try
 35        {
 436            var result = await connector.PingAsync(cancellationToken);
 237            return Ok(new
 238            {
 239                isAvailable = result.IsAvailable,
 240                providerKey = connector.ProviderKey,
 241                message = result.Message ?? (result.IsAvailable ? null : "API недоступно.")
 242            });
 43        }
 144        catch (OperationCanceledException) when (cancellationToken.IsCancellationRequested)
 45        {
 146            throw;
 47        }
 148        catch (Exception ex)
 49        {
 150            _logger.LogInformation(ex, "Сбой проверки доступности внешнего поставщика {ProviderKey}", providerKey);
 151            return Ok(new
 152            {
 153                isAvailable = false,
 154                providerKey = connector.ProviderKey,
 155                message = "API недоступно."
 156            });
 57        }
 458    }
 59}