Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

ScreeningTestService.cs 7.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. using Microsoft.AspNetCore.Mvc;
  2. using Microsoft.AspNetCore.Mvc.Diagnostics;
  3. using Microsoft.Extensions.Caching.Memory;
  4. using System.Net;
  5. namespace Diligent.WebAPI.Business.Services
  6. {
  7. public class ScreeningTestService : IScreeningTestService
  8. {
  9. private readonly ScreeningTestSettings _settings;
  10. private readonly ILogger<ScreeningTestService> _logger;
  11. private readonly IMemoryCache _memoryCache;
  12. public ScreeningTestService(IOptions<ScreeningTestSettings> settings, ILogger<ScreeningTestService> logger, IMemoryCache memoryCache)
  13. {
  14. _settings = settings.Value;
  15. _logger = logger;
  16. _memoryCache = memoryCache;
  17. }
  18. public async Task<BaseResult<IEnumerable<TestMicroserviceRequest>>> GetScreening()
  19. {
  20. string token = await GetToken();
  21. _logger.LogInformation($"Start calling microservice to get tests request");
  22. var httpClient = new HttpClient();
  23. var request = new HttpRequestMessage(HttpMethod.Get, _settings.Url + "tests");
  24. request.Headers.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", token);
  25. _logger.LogInformation("Initilazing http call to microservice");
  26. HttpResponseMessage httpResponseMessage;
  27. try
  28. {
  29. _logger.LogInformation("Calling microservis to get test");
  30. httpResponseMessage = httpClient.SendAsync(request).Result;
  31. }
  32. catch (Exception ex)
  33. {
  34. _logger.LogError($"Error in call: {ex.Message}");
  35. return new BaseResult<IEnumerable<TestMicroserviceRequest>>
  36. {
  37. IsSuccess = false,
  38. DataObject = new List<TestMicroserviceRequest>()
  39. };
  40. }
  41. if (httpResponseMessage.StatusCode == HttpStatusCode.Unauthorized)
  42. {
  43. _logger.LogError("Error: Unauthorized");
  44. return new BaseResult<IEnumerable<TestMicroserviceRequest>>
  45. {
  46. IsSuccess = false,
  47. DataObject = new List<TestMicroserviceRequest>()
  48. };
  49. }
  50. if (httpResponseMessage.StatusCode != HttpStatusCode.OK)
  51. {
  52. _logger.LogError("Error");
  53. return new BaseResult<IEnumerable<TestMicroserviceRequest>>
  54. {
  55. IsSuccess = false,
  56. DataObject = new List<TestMicroserviceRequest>()
  57. };
  58. }
  59. var response = httpResponseMessage.Content.ReadAsStringAsync().Result;
  60. var resultData = JsonConvert.DeserializeObject<IEnumerable<TestMicroserviceRequest>>(response);
  61. _logger.LogInformation($"Call pass and it received: {resultData.Count()} records");
  62. return new BaseResult<IEnumerable<TestMicroserviceRequest>>
  63. {
  64. DataObject = resultData
  65. };
  66. }
  67. private async Task<string> GetToken()
  68. {
  69. string token = "";
  70. if (_memoryCache.TryGetValue("JWT", out string t))
  71. {
  72. token = t;
  73. }
  74. else
  75. {
  76. var result = await LoginToScreening();
  77. var cacheEntryOptions = new MemoryCacheEntryOptions()
  78. .SetSlidingExpiration(TimeSpan.FromSeconds(60))
  79. .SetAbsoluteExpiration(TimeSpan.FromSeconds(3600))
  80. .SetPriority(CacheItemPriority.Normal)
  81. .SetSize(1024);
  82. _memoryCache.Set("JWT", result.Token, cacheEntryOptions);
  83. token = result.Token;
  84. }
  85. return token;
  86. }
  87. public async Task<AuthSuccessResponse> LoginToScreening()
  88. {
  89. _logger.LogInformation($"Start calling microservice to login");
  90. var httpClient = new HttpClient();
  91. var requestUri = new Uri(string.Format(_settings.Url + "auth"));
  92. var httpContent = new StringContent(System.Text.Json.JsonSerializer.Serialize(new AuthMicroserviceRequest
  93. {
  94. Email = _settings.Email,
  95. Password = _settings.Password
  96. }),
  97. Encoding.UTF8,
  98. "application/json");
  99. var response = await httpClient.PostAsync(requestUri, httpContent);
  100. var content = await response.Content.ReadAsStringAsync();
  101. try
  102. {
  103. var result = JsonConvert.DeserializeObject<AuthSuccessResponse>(content);
  104. var expires = result.Expires.Value - DateTime.Now;
  105. var cacheEntryOptions = new MemoryCacheEntryOptions()
  106. .SetSlidingExpiration(TimeSpan.FromSeconds(60))
  107. .SetAbsoluteExpiration(expires)
  108. .SetPriority(CacheItemPriority.Normal)
  109. .SetSize(1024);
  110. _memoryCache.Set("JWT", result.Token, cacheEntryOptions);
  111. _logger.LogInformation($"Call pass and it received: {result}");
  112. return result;
  113. }
  114. catch (Exception ex)
  115. {
  116. _logger.LogInformation($"Error in call: ");
  117. return new AuthSuccessResponse { Token = "" };
  118. }
  119. }
  120. public async Task<bool> SendTest(TestMicroserviceInviteRequest test)
  121. {
  122. string token = await GetToken();
  123. _logger.LogInformation($"Start calling microservice to send test request");
  124. var httpClient = new HttpClient();
  125. var request = new HttpRequestMessage(HttpMethod.Post, _settings.Url + "tests");
  126. request.Headers.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", token);
  127. var httpContent = new StringContent(System.Text.Json.JsonSerializer.Serialize(test),
  128. Encoding.UTF8,
  129. "application/json");
  130. request.Content = httpContent;
  131. _logger.LogInformation("Initilazing http call to microservice");
  132. HttpResponseMessage httpResponseMessage;
  133. try
  134. {
  135. _logger.LogInformation("Calling microservis to send test");
  136. httpResponseMessage = httpClient.SendAsync(request).Result;
  137. }
  138. catch (Exception ex)
  139. {
  140. _logger.LogError($"Error in call: {ex.Message}");
  141. return false;
  142. }
  143. if (httpResponseMessage.StatusCode == HttpStatusCode.Unauthorized)
  144. {
  145. _logger.LogError("Error: Unauthorized");
  146. return false;
  147. }
  148. if (httpResponseMessage.StatusCode != HttpStatusCode.OK)
  149. {
  150. _logger.LogError("Error");
  151. return false;
  152. }
  153. _logger.LogInformation($"Call pass");
  154. return true;
  155. }
  156. }
  157. }