< Summary

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

File(s)

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

#LineLine coverage
 1using Microsoft.AspNetCore.Authorization;
 2using Microsoft.AspNetCore.Mvc;
 3using Newtonsoft.Json;
 4using Newtonsoft.Json.Linq;
 5using OzonDomains.Models;
 6using Services.ApiServices.ApiSupplierRequestLog;
 7using Services.ApiServices.ZZapApi;
 8
 9namespace OzonOrdersWeb.Areas.Studio2.Controllers.Directories;
 10
 11/// <summary>Консоль ручных read-only вызовов ZZap.ru. Каждый вызов проходит через общий троттлинг
 12/// клиента, поэтому подряд нажатые кнопки отрабатывают по очереди с паузой.</summary>
 13[Authorize(Roles = "User,Admin")]
 14[Area("Studio2")]
 15[Route("ZZapMoscow/[action]")]
 16public sealed class ZZapMoscowController : Controller
 17{
 18    private const string TestArticle = "OC90";
 19    private const string TestBrand = "KNECHT";
 20
 21    private readonly ZZapDataManager _zzap;
 22    private readonly ApiSupplierRequestLogStore _logs;
 23
 024    public ZZapMoscowController(ZZapDataManager zzap, ApiSupplierRequestLogStore logs)
 25    {
 026        _zzap = zzap;
 027        _logs = logs;
 028    }
 29
 30    [HttpGet, Route("~/ZZapMoscow")]
 031    public IActionResult Index() => View();
 32
 33    [HttpGet]
 034    public IActionResult Logs() => Json(_logs.Get(ApiSupplierSettings.ZZapMoscowProviderKey));
 35
 36    [HttpGet]
 37    public async Task<IActionResult> Ping(CancellationToken cancellationToken)
 38    {
 039        try { return JsonToken(await _zzap.GetStatusAsync(cancellationToken)); }
 040        catch (Exception ex) { return Error(ex); }
 041    }
 42
 43    [HttpGet]
 44    public async Task<IActionResult> Read(string operation, CancellationToken cancellationToken)
 45    {
 46        try
 47        {
 048            var result = operation?.ToLowerInvariant() switch
 049            {
 050                "user" => await _zzap.GetUserAsync(cancellationToken),
 051                "region" => await _zzap.GetRegionAsync(_zzap.DefaultCodeRegion, cancellationToken),
 052                "regions" => await _zzap.GetRegionsAsync(1, 100, cancellationToken),
 053                "statuses" => await _zzap.GetOrderStatusesAsync(cancellationToken),
 054                "search-new" => await _zzap.SearchLightAsync(TestArticle, TestBrand, ZZapDataManager.SearchLightNewOnly,
 055                "search-any" => await _zzap.SearchLightAsync(TestArticle, TestBrand, ZZapDataManager.SearchLightAnyCondi
 056                "cart" => await _zzap.GetCartAsync(1, 100, cancellationToken),
 057                "orders" => await _zzap.GetOrdersAsync(1, 20, cancellationToken),
 058                _ => null
 059            };
 60
 061            return result is null
 062                ? BadRequest(new { error = true, message = "Недопустимая read-операция." })
 063                : JsonToken(result);
 64        }
 065        catch (Exception ex) { return Error(ex); }
 066    }
 67
 068    private static IActionResult Error(Exception ex) => ex switch
 069    {
 070        ZZapApiException api => new ObjectResult(new { error = true, message = api.Message })
 071        {
 072            StatusCode = api.StatusCode is >= 400 and < 600 ? api.StatusCode : StatusCodes.Status502BadGateway
 073        },
 074        _ => new ObjectResult(new { error = true, message = "Не удалось выполнить запрос к ZZap." })
 075        {
 076            StatusCode = StatusCodes.Status502BadGateway
 077        }
 078    };
 79
 80    private static ContentResult JsonToken(JToken token) =>
 081        new() { Content = token.ToString(Formatting.None), ContentType = "application/json" };
 82}