< Summary

Information
Class: Services.ApiServices.TecDocApi.TecDocApiClient
Assembly: Services
File(s): /home/runner/work/Studio2Prod/Studio2Prod/AppRepository/ApiServices/TecDocApi/TecDocApiClient.cs
Line coverage
13%
Covered lines: 5
Uncovered lines: 33
Coverable lines: 38
Total lines: 103
Line coverage: 13.1%
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%11100%
.ctor(...)100%11100%
MakeRequestPost(...)0%620%
GetTestRequest()0%2040%

File(s)

/home/runner/work/Studio2Prod/Studio2Prod/AppRepository/ApiServices/TecDocApi/TecDocApiClient.cs

#LineLine coverage
 1using System.Net;
 2using Microsoft.Extensions.Http;
 3using Newtonsoft.Json;
 4using Newtonsoft.Json.Linq;
 5using Services.ApiServices;
 6using SlqStudio.Application.Services.EmailService;
 7
 8#pragma warning disable SYSLIB0014 // HttpWebRequest overrides — legacy GET paths, migrate with BaseApiClient
 9
 10namespace Services.ApiServices.TecDocApi
 11{
 12    public class TecDocApiClient : BaseApiClient
 13    {
 14        private readonly string _baseUri;
 15
 16        public TecDocApiClient(
 17            IHttpClientFactory? httpClientFactory,
 18            IEmailService? emailService,
 19            string baseUri = "http://localhost:8000/")
 420            : base(httpClientFactory, emailService, "TecDocApi", TimeSpan.FromSeconds(15))
 21        {
 422            _baseUri = baseUri;
 423        }
 24
 25        // Конструктор для обратной совместимости
 26        public TecDocApiClient(string baseUri = "http://localhost:8000/")
 427            : this(null, null, baseUri)
 28        {
 429        }
 30
 31        public override JObject MakeRequestPost<T>(T requestModel, string requestUri)
 32        {
 33            // TecDoc использует GET вместо POST в оригинальной реализации
 34            try
 35            {
 036                var request = (HttpWebRequest)WebRequest.Create(requestUri);
 037                request.Method = "GET";
 038                request.ContentType = "application/json";
 039                request.Timeout = (int)_timeout.TotalMilliseconds;
 40
 041                using (var response = (HttpWebResponse)request.GetResponse())
 42                {
 043                    using (var streamReader = new StreamReader(response.GetResponseStream()))
 44                    {
 045                        var jsonResponse = streamReader.ReadToEnd();
 046                        if (string.IsNullOrWhiteSpace(jsonResponse))
 47                        {
 048                            return new JObject();
 49                        }
 050                        return JObject.Parse(jsonResponse);
 51                    }
 52                }
 53            }
 054            catch (WebException ex) when (ex.Response is HttpWebResponse httpResponse)
 55            {
 056                return HandleError($"HTTP ошибка при запросе к {_clientName}", ex, requestUri);
 57            }
 058            catch (System.Net.Sockets.SocketException ex)
 59            {
 060                return HandleError($"Ошибка соединения с {_clientName}", ex, requestUri);
 61            }
 062            catch (JsonException ex)
 63            {
 064                return HandleError($"Ошибка парсинга JSON от {_clientName}", ex, requestUri);
 65            }
 066            catch (Exception ex)
 67            {
 068                return HandleError($"Неожиданная ошибка при запросе к {_clientName}", ex, requestUri);
 69            }
 070        }
 71
 72        public override async Task<bool> GetTestRequest(string businessId, string apiKey)
 73        {
 74            try
 75            {
 76                // Простая проверка доступности через GET запрос к базовому URL
 077                var testUrl = _baseUri.TrimEnd('/');
 78
 079                var request = (HttpWebRequest)WebRequest.Create(testUrl);
 080                request.Method = "GET";
 081                request.ContentType = "application/json";
 082                request.Timeout = (int)_timeout.TotalMilliseconds;
 83
 084                using (var response = (HttpWebResponse)await request.GetResponseAsync())
 85                {
 86                    // Если получили ответ (даже если не 200), значит сервер доступен
 087                    return response.StatusCode == HttpStatusCode.OK ||
 088                           response.StatusCode == HttpStatusCode.NotFound ||
 089                           response.StatusCode == HttpStatusCode.MethodNotAllowed;
 90                }
 91            }
 092            catch (WebException ex) when (ex.Response is HttpWebResponse httpResponse)
 93            {
 94                // Если получили HTTP ответ (даже ошибку), значит сервер доступен
 095                return httpResponse.StatusCode != HttpStatusCode.ServiceUnavailable;
 96            }
 097            catch
 98            {
 099                return false;
 100            }
 0101        }
 102    }
 103}