-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathCohortDistributionHelper.cs
More file actions
114 lines (94 loc) · 4.1 KB
/
CohortDistributionHelper.cs
File metadata and controls
114 lines (94 loc) · 4.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
namespace Common;
using System.Net;
using System.Text.Json;
using Microsoft.Extensions.Logging;
using Model;
using NHS.CohortManager.CohortDistribution;
public class CohortDistributionHelper : ICohortDistributionHelper
{
private readonly ICallFunction _callFunction;
private readonly ILogger<CohortDistributionHelper> _logger;
public CohortDistributionHelper(ICallFunction callFunction, ILogger<CohortDistributionHelper> logger)
{
_callFunction = callFunction;
_logger = logger;
}
public async Task<CohortDistributionParticipant?> RetrieveParticipantDataAsync(CreateCohortDistributionRequestBody cohortDistributionRequestBody)
{
var retrieveParticipantRequestBody = new RetrieveParticipantRequestBody()
{
NhsNumber = cohortDistributionRequestBody.NhsNumber,
ScreeningService = cohortDistributionRequestBody.ScreeningService
};
var requestBody = JsonSerializer.Serialize(retrieveParticipantRequestBody);
var response = await GetResponseAsync(requestBody, Environment.GetEnvironmentVariable("RetrieveParticipantDataURL"));
if (!string.IsNullOrEmpty(response))
{
return JsonSerializer.Deserialize<CohortDistributionParticipant>(response);
}
return null;
}
public async Task<string?> AllocateServiceProviderAsync(string nhsNumber, string screeningAcronym, string postCode, string errorRecord)
{
var allocationConfigRequestBody = new AllocationConfigRequestBody
{
NhsNumber = nhsNumber,
Postcode = postCode,
ScreeningAcronym = screeningAcronym,
ErrorRecord = errorRecord
};
var json = JsonSerializer.Serialize(allocationConfigRequestBody);
var response = await GetResponseAsync(json, Environment.GetEnvironmentVariable("AllocateScreeningProviderURL"));
if (!string.IsNullOrEmpty(response))
{
return response;
}
return null;
}
public async Task<CohortDistributionParticipant> TransformParticipantAsync(string serviceProvider, CohortDistributionParticipant participantData)
{
var transformDataRequestBody = new TransformDataRequestBody()
{
Participant = participantData,
ServiceProvider = serviceProvider,
};
var json = JsonSerializer.Serialize(transformDataRequestBody);
_logger.LogInformation("Called transform data service");
var response = await GetResponseAsync(json, Environment.GetEnvironmentVariable("TransformDataServiceURL"));
if (!string.IsNullOrEmpty(response))
{
return JsonSerializer.Deserialize<CohortDistributionParticipant>(response);
}
return null;
}
public async Task<ValidationExceptionLog> ValidateCohortDistributionRecordAsync(string nhsNumber, string FileName, CohortDistributionParticipant cohortDistributionParticipant)
{
var lookupValidationRequestBody = new ValidateCohortDistributionRecordBody()
{
NhsNumber = nhsNumber,
FileName = FileName,
CohortDistributionParticipant = cohortDistributionParticipant,
};
var json = JsonSerializer.Serialize(lookupValidationRequestBody);
_logger.LogInformation("Called cohort validation service");
var response = await GetResponseAsync(json, Environment.GetEnvironmentVariable("ValidateCohortDistributionRecordURL"));
return JsonSerializer.Deserialize<ValidationExceptionLog>(response);
}
private async Task<string> GetResponseAsync(string requestBodyJson, string functionURL)
{
var response = await _callFunction.SendPost(functionURL, requestBodyJson);
if (response == null)
{
return "";
}
if (response.StatusCode == HttpStatusCode.OK || response.StatusCode == HttpStatusCode.Created)
{
var responseText = await _callFunction.GetResponseText(response);
if (!string.IsNullOrEmpty(responseText))
{
return responseText;
}
}
return "";
}
}