< Summary

Information
Class: OzonOrdersWeb.Areas.Studio2.Controllers.NikeiPriceController
Assembly: OzonOrdersWeb
File(s): /home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/Areas/Studio2/Controllers/NikeiPriceController.cs
Line coverage
0%
Covered lines: 0
Uncovered lines: 15
Coverable lines: 15
Total lines: 51
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 6
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%4260%

File(s)

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

#LineLine coverage
 1using Microsoft.AspNetCore.Authorization;
 2using Microsoft.AspNetCore.Mvc;
 3using OzonOrdersWeb.Filters;
 4using Services.ApiServices.NikeiApi;
 5using Services.ApiServices.TradesoftApi.Models.Response;
 6using Services.ApiSupplierSettingsServices;
 7
 8namespace OzonOrdersWeb.Areas.Studio2.Controllers;
 9
 10/// <summary>Точная проценка Nikei: только запрошенные артикул и бренд, без аналогов.</summary>
 11[Area("Studio2")]
 12[Authorize(Roles = "User,Admin")]
 13[ServiceFilter(typeof(SupplierQuotationHistoryFilter), Order = 0)]
 14[ServiceFilter(typeof(SupplierDeliverySurchargeFilter), Order = 1)]
 15[ServiceFilter(typeof(SupplierWarehouseRestrictionFilter), Order = 2)]
 16public sealed class NikeiPriceController : Controller
 17{
 18    private readonly NikeiDataManager _nikei;
 19    private readonly ApiSupplierSettingsService _settings;
 20
 021    public NikeiPriceController(NikeiDataManager nikei, ApiSupplierSettingsService settings) => (_nikei, _settings) = (n
 22
 23    [HttpGet]
 24    public async Task<IActionResult> Search(string code, string? brand, int? orderId = null, string? zasylWarehouseName 
 25    {
 026        if (string.IsNullOrWhiteSpace(code) || string.IsNullOrWhiteSpace(brand))
 027            return Ok(Array.Empty<PreOrderItem>());
 28
 29        try
 30        {
 031            var settings = await _settings.GetNikeiAsync(HttpContext.RequestAborted);
 032            if (!settings.IsQuotationEnabled) return Ok(Array.Empty<PreOrderItem>());
 33
 034            var response = await _nikei.SearchPartsAsync(code.Trim(), brand.Trim(), HttpContext.RequestAborted);
 035            NikeiHttpClient.ThrowIfError(response, "/parts/search");
 036            return Ok(NikeiPriceMapper.MapOriginals(response, code.Trim(), brand.Trim(), settings));
 37        }
 038        catch (NikeiApiException ex)
 39        {
 040            return Ok(new { items = Array.Empty<PreOrderItem>(), error = ex.Message });
 41        }
 042        catch (OperationCanceledException) when (HttpContext.RequestAborted.IsCancellationRequested)
 43        {
 044            return StatusCode(499, new { error = "request_canceled" });
 45        }
 046        catch (Exception ex) when (ex is HttpRequestException or TimeoutException or TaskCanceledException)
 47        {
 048            return Ok(new { items = Array.Empty<PreOrderItem>(), error = "Сервис Nikei временно недоступен." });
 49        }
 050    }
 51}