< Summary

Information
Class: OzonOrdersWeb.Areas.Studio2.Controllers.Directories.MotexController
Assembly: OzonOrdersWeb
File(s): /home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/Areas/Studio2/Controllers/Directories/MotexController.cs
Line coverage
0%
Covered lines: 0
Uncovered lines: 40
Coverable lines: 40
Total lines: 77
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 12
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%
Search()0%620%
Error(...)0%7280%
JsonToken(...)100%210%

File(s)

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

#LineLine coverage
 1using Microsoft.AspNetCore.Authorization;
 2using Microsoft.AspNetCore.Mvc;
 3using Newtonsoft.Json.Linq;
 4using Newtonsoft.Json;
 5using Services.ApiServices.MotexApi;
 6using Services.ApiServices.ApiSupplierRequestLog;
 7
 8namespace OzonOrdersWeb.Areas.Studio2.Controllers.Directories;
 9
 10[Authorize(Roles = "User,Admin")]
 11[Area("Studio2")]
 12[Route("Motex/[action]")]
 13public sealed class MotexController : Controller
 14{
 015    private static readonly IReadOnlyDictionary<string, string> ReadOperations = new Dictionary<string, string>(StringCo
 016    {
 017        ["by-code"] = "/api/v1/Articles/ByCode",
 018        ["search"] = "/api/v1/Articles/Search",
 019        ["stores"] = "/api/v1/Stores/GetStoreList",
 020        ["user-info"] = "/api/v1/Users/GetUserInfo",
 021        ["user-settings"] = "/api/v1/Users/GetUserSettings",
 022        ["delivery-addresses"] = "/api/v1/Users/GetUserDeliveryAddresses",
 023        ["order-details"] = "/api/v1/Orders/GetOrderDetails",
 024        ["orders-by-date"] = "/api/v1/Orders/GetOrdersByDateRange"
 025    };
 026    private static readonly IReadOnlyDictionary<string, string> SearchOperations = new Dictionary<string, string>(String
 027    {
 028        ["orders-by-ids"] = "/api/v1/Orders/GetOrdersByIds"
 029    };
 30    private readonly MotexDataManager _motex;
 31    private readonly ApiSupplierRequestLogStore _logs;
 32
 033    public MotexController(MotexDataManager motex, ApiSupplierRequestLogStore logs)
 34    {
 035        _motex = motex;
 036        _logs = logs;
 037    }
 38
 39    [HttpGet, Route("~/Motex")]
 040    public IActionResult Index() => View();
 41
 42    [HttpGet]
 043    public IActionResult Logs() => Json(_logs.Get("Motex"));
 44
 45    [HttpGet]
 46    public async Task<IActionResult> Ping(CancellationToken cancellationToken)
 47    {
 048        try { return JsonToken(await _motex.PingAsync(cancellationToken)); }
 049        catch (Exception ex) { return Error(ex); }
 050    }
 51
 52    [HttpGet]
 53    public async Task<IActionResult> Read(string operation, CancellationToken cancellationToken)
 54    {
 055        if (!ReadOperations.TryGetValue(operation, out var path)) return BadRequest(new { error = true, message = "Недоп
 056        var query = Request.Query.Where(x => x.Key is not "operation").ToDictionary(x => x.Key, x => (string?)x.Value.To
 057        try { return JsonToken(await _motex.GetAsync(path, query, cancellationToken)); }
 058        catch (Exception ex) { return Error(ex); }
 059    }
 60
 61    [HttpGet]
 62    public async Task<IActionResult> Search(string operation, string payload, CancellationToken cancellationToken)
 63    {
 064        if (!SearchOperations.TryGetValue(operation, out var path)) return BadRequest(new { error = true, message = "Нед
 065        try { return JsonToken(await _motex.SearchAsync(path, JToken.Parse(payload), cancellationToken)); }
 066        catch (Newtonsoft.Json.JsonReaderException) { return BadRequest(new { error = true, message = "Тело запроса долж
 067        catch (Exception ex) { return Error(ex); }
 068    }
 69
 070    private IActionResult Error(Exception ex) => ex switch
 071    {
 072        MotexApiException api => StatusCode(api.StatusCode is >= 400 and < 600 ? api.StatusCode.Value : 502, new { error
 073        _ => StatusCode(500, new { error = true, message = "Не удалось выполнить запрос к МоТехС." })
 074    };
 75
 076    private ContentResult JsonToken(JToken token) => Content(token.ToString(Formatting.None), "application/json");
 77}