< Summary

Information
Class: OzonOrdersWeb.Areas.Studio2.Controllers.Directories.NikeiController
Assembly: OzonOrdersWeb
File(s): /home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/Areas/Studio2/Controllers/Directories/NikeiController.cs
Line coverage
0%
Covered lines: 0
Uncovered lines: 31
Coverable lines: 31
Total lines: 68
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 24
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%
Index()100%210%
Logs()100%210%
Ping()100%210%
Read()0%272160%
Error(...)0%7280%
JsonToken(...)100%210%

File(s)

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

#LineLine coverage
 1using Microsoft.AspNetCore.Authorization;
 2using Microsoft.AspNetCore.Mvc;
 3using Newtonsoft.Json;
 4using Newtonsoft.Json.Linq;
 5using Services.ApiServices.ApiSupplierRequestLog;
 6using Services.ApiServices.NikeiApi;
 7
 8namespace OzonOrdersWeb.Areas.Studio2.Controllers.Directories;
 9
 10/// <summary>Консоль ручных read-only вызовов Nikei.</summary>
 11[Authorize(Roles = "User,Admin")]
 12[Area("Studio2")]
 13[Route("Nikei/[action]")]
 14public sealed class NikeiController : Controller
 15{
 16    private const string TestArticle = "9054";
 17    private readonly NikeiDataManager _nikei;
 18    private readonly ApiSupplierRequestLogStore _logs;
 19
 020    public NikeiController(NikeiDataManager nikei, ApiSupplierRequestLogStore logs) => (_nikei, _logs) = (nikei, logs);
 21
 22    [HttpGet, Route("~/Nikei")]
 023    public IActionResult Index() => View();
 24
 25    [HttpGet]
 026    public IActionResult Logs() => Json(_logs.Get("Nikei"));
 27
 28    [HttpGet]
 29    public async Task<IActionResult> Ping(CancellationToken cancellationToken)
 30    {
 031        try { await _nikei.PingAsync(cancellationToken); return Ok(new { isAvailable = true }); }
 032        catch (Exception ex) { return Error(ex); }
 033    }
 34
 35    [HttpGet]
 36    public async Task<IActionResult> Read(string operation, CancellationToken cancellationToken)
 37    {
 38        try
 39        {
 040            var result = operation?.ToLowerInvariant() switch
 041            {
 042                "brands" => await _nikei.SearchBrandsAsync(TestArticle, cancellationToken),
 043                "offices" => await _nikei.GetOfficesAsync(cancellationToken),
 044                "addresses" => await _nikei.GetClientAddressesAsync(cancellationToken),
 045                "cart" => await _nikei.GetCartAsync(cancellationToken),
 046                "orders" => await _nikei.GetOrdersAsync(cancellationToken),
 047                "statuses" => await _nikei.GetOrderStatusesAsync(cancellationToken),
 048                _ => null
 049            };
 050            return result is null ? BadRequest(new { error = true, message = "Недопустимая read-операция." }) : JsonToke
 51        }
 052        catch (Exception ex) { return Error(ex); }
 053    }
 54
 055    private static IActionResult Error(Exception ex) => ex switch
 056    {
 057        NikeiApiException api => new ObjectResult(new { error = true, message = api.Message })
 058        {
 059            StatusCode = api.StatusCode is >= 400 and < 600 ? api.StatusCode : StatusCodes.Status502BadGateway
 060        },
 061        _ => new ObjectResult(new { error = true, message = "Не удалось выполнить запрос к Nikei." })
 062        {
 063            StatusCode = StatusCodes.Status502BadGateway
 064        }
 065    };
 66
 067    private static ContentResult JsonToken(JToken token) => new() { Content = token.ToString(Formatting.None), ContentTy
 68}