< Summary

Information
Class: OzonOrdersWeb.Areas.Studio2.Controllers.ForumAutoInterpartsPriceController
Assembly: OzonOrdersWeb
File(s): /home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/Areas/Studio2/Controllers/ForumAutoInterpartsPriceController.cs
Line coverage
0%
Covered lines: 0
Uncovered lines: 20
Coverable lines: 20
Total lines: 57
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 10
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%210%
Search()0%110100%

File(s)

/home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/Areas/Studio2/Controllers/ForumAutoInterpartsPriceController.cs

#LineLine coverage
 1using Microsoft.AspNetCore.Authorization;
 2using Microsoft.AspNetCore.Mvc;
 3using Services.ApiServices.ForumAutoApi;
 4using Services.ApiServices.TradesoftApi.Models.Response;
 5using Services.ApiSupplierSettingsServices;
 6using OzonOrdersWeb.Filters;
 7
 8namespace OzonOrdersWeb.Areas.Studio2.Controllers;
 9
 10[Area("Studio2")]
 11[Authorize(Roles = "User,Admin")]
 12[ServiceFilter(typeof(SupplierQuotationHistoryFilter), Order = 0)]
 13[ServiceFilter(typeof(SupplierDeliverySurchargeFilter), Order = 1)]
 14[ServiceFilter(typeof(SupplierWarehouseRestrictionFilter), Order = 2)]
 15public sealed class ForumAutoInterpartsPriceController : Controller
 16{
 17    private readonly ForumAutoInterpartsDataManager _forumAuto;
 18    private readonly ApiSupplierSettingsService _settings;
 19
 020    public ForumAutoInterpartsPriceController(ForumAutoInterpartsDataManager forumAuto, ApiSupplierSettingsService setti
 21    {
 022        _forumAuto = forumAuto;
 023        _settings = settings;
 024    }
 25
 26    [HttpGet]
 27    public async Task<IActionResult> Search(string code, string? brand, int? orderId = null)
 28    {
 029        if (string.IsNullOrWhiteSpace(code))
 030            return Ok(Array.Empty<PreOrderItem>());
 31
 32        try
 33        {
 034            var settings = await _settings.GetForumAutoInterpartsAsync(HttpContext.RequestAborted);
 035            if (!settings.IsQuotationEnabled)
 036                return Ok(Array.Empty<PreOrderItem>());
 37
 038            var response = await _forumAuto.ListGoodsAsync(code.Trim(), brand?.Trim(), cross: false, ct: HttpContext.Req
 039            return Ok(SupplierQuotationDeliveryDestination.Apply(
 040                ForumAutoPriceMapper.Map(response, code.Trim(), settings.SupplierId, settings.Supplier?.CurrencyCode,
 041                    "ForumAutoInterparts", settings.DisplayName ?? ApiSupplierSettingsService.GetDefaultDisplayName(sett
 42        }
 043        catch (ForumAutoApiException ex) when (ex.FaultCode == 27)
 44        {
 45            // FaultCode 27 — "Товары не найдены": нормальный пустой результат, а не ошибка.
 046            return Ok(Array.Empty<PreOrderItem>());
 47        }
 048        catch (ForumAutoApiException ex)
 49        {
 050            return Ok(new { items = Array.Empty<PreOrderItem>(), error = ex.Message });
 51        }
 052        catch (Exception ex) when (ex is HttpRequestException or TimeoutException or TaskCanceledException)
 53        {
 054            return Ok(new { items = Array.Empty<PreOrderItem>(), error = "Сервис Forum-Auto (Интерпартс) временно недост
 55        }
 056    }
 57}