< Summary

Information
Class: OzonOrdersWeb.Areas.Studio2.Controllers.Directories.MlAutoController
Assembly: OzonOrdersWeb
File(s): /home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/Areas/Studio2/Controllers/Directories/MlAutoController.cs
Line coverage
0%
Covered lines: 0
Uncovered lines: 25
Coverable lines: 25
Total lines: 55
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
.cctor()100%210%
.ctor(...)100%210%
Index()100%210%
Logs()100%210%
Ping()100%210%
Read()0%620%
Error(...)0%7280%
JsonToken(...)100%210%

File(s)

/home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/Areas/Studio2/Controllers/Directories/MlAutoController.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.MlAutoApi;
 7
 8namespace OzonOrdersWeb.Areas.Studio2.Controllers.Directories;
 9
 10[Authorize(Roles = "User,Admin")]
 11[Area("Studio2")]
 12[Route("MlAuto/[action]")]
 13public sealed class MlAutoController : Controller
 14{
 015    private static readonly IReadOnlyDictionary<string, string> ReadOperations = new Dictionary<string, string>(StringCo
 016    {
 017        ["show-info"] = "/ShowInfo/", ["storages"] = "/ImportersSearch/", ["brands"] = "/GetBrands/",
 018        ["article-search"] = "/ArticleSearch/", ["search"] = "/Search/", ["delivery-addresses"] = "/MyDeliveryAddress/",
 019        ["price"] = "/Price/", ["order"] = "/GetOrderByNumber/", ["orders-by-ids"] = "/GetOrdersByIds/",
 020        ["orders-by-date"] = "/GetOrdersByDateRange/", ["my-orders"] = "/GetMyOrders/", ["my-returns"] = "/GetMyReturns/
 021        ["return"] = "/GetReturnByNumber/"
 022    };
 23    private readonly MlAutoDataManager _mlAuto;
 24    private readonly ApiSupplierRequestLogStore _logs;
 25
 026    public MlAutoController(MlAutoDataManager mlAuto, ApiSupplierRequestLogStore logs) { _mlAuto = mlAuto; _logs = logs;
 27
 28    [HttpGet, Route("~/MlAuto")]
 029    public IActionResult Index() => View();
 030    [HttpGet] public IActionResult Logs() => Json(_logs.Get("MlAuto"));
 31
 32    [HttpGet]
 33    public async Task<IActionResult> Ping(CancellationToken cancellationToken)
 34    {
 035        try { return JsonToken(await _mlAuto.PingAsync(cancellationToken)); }
 036        catch (Exception ex) { return Error(ex); }
 037    }
 38
 39    [HttpGet]
 40    public async Task<IActionResult> Read(string operation, CancellationToken cancellationToken)
 41    {
 042        if (!ReadOperations.TryGetValue(operation, out var path)) return BadRequest(new { error = true, message = "Недоп
 043        var parameters = Request.Query.Where(x => x.Key is not "operation").ToDictionary(x => x.Key, x => (string?)x.Val
 044        try { return JsonToken(await _mlAuto.PostAsync(path, parameters, cancellationToken)); }
 045        catch (Exception ex) { return Error(ex); }
 046    }
 47
 048    private static IActionResult Error(Exception ex) => ex switch
 049    {
 050        MlAutoApiException api => new ObjectResult(new { error = true, message = api.Message }) { StatusCode = api.Statu
 051        _ => new ObjectResult(new { error = true, message = "Не удалось выполнить запрос к ML-Auto." }) { StatusCode = S
 052    };
 53
 054    private static ContentResult JsonToken(JToken token) => new() { Content = token.ToString(Formatting.None), ContentTy
 55}