-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathTesting.cs
More file actions
175 lines (158 loc) · 7.55 KB
/
Copy pathTesting.cs
File metadata and controls
175 lines (158 loc) · 7.55 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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
namespace SMS_Bridge
{
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using SMS_Bridge.Models;
using SMS_Bridge.Services;
using SMS_Bridge.SmsProviders;
public static class Testing
{
public record CheckSendSmsResponse
(
SmsBridgeId MessageID,
string Status
);
public static void RegisterTestingEndpoints(RouteGroupBuilder testingGatewayAPI, IConfiguration configuration)
{
testingGatewayAPI.MapGet("/send-sms", (IServiceProvider services) =>
{
try
{
var smsQueueService = services.GetRequiredService<SmsQueueService>();
var configuration = services.GetRequiredService<IConfiguration>();
var defaultPhoneNumber = configuration["SmsSettings:TestingPhoneNumber"]!;
var testRequest = new SendSmsRequest(defaultPhoneNumber, "This is a test message during development");
var smsBridgeId = smsQueueService.QueueSms(testRequest);
return Results.Ok(new Result(
Success: true,
Message: "SMS queued for sending",
SMSBridgeID: smsBridgeId.ToString()
));
}
catch (Exception ex)
{
return Results.Problem(
title: "SMS Gateway Error",
detail: ex.Message,
statusCode: 503
);
}
});
testingGatewayAPI.MapGet("/send-bulk-sms", async (IServiceProvider services) =>
{
try
{
var provider = services.GetRequiredService<ISmsProvider>();
var configuration = services.GetRequiredService<IConfiguration>();
var defaultPhoneNumber = configuration["SmsSettings:TestingPhoneNumber"]!;
var responses = new List<(IResult Result, SmsBridgeId smsBridgeId)>();
var smsBridgeIDs = new List<SmsBridgeId>(); // Collect SMSBridgeIDs
var providerMessageIDs = new List<ProviderMessageId>(); // Collect ProviderMessageIDs
var totalMessages = 50;
for (int i = 0; i < totalMessages; i++)
{
var smsBridgeId = new SmsBridgeId(Guid.NewGuid());
var testRequest = new SendSmsRequest(defaultPhoneNumber, $"Bulk test message #{i + 1} of {totalMessages}");
var response = await provider.SendSms(testRequest, smsBridgeId);
responses.Add(response);
smsBridgeIDs.Add(smsBridgeId); // Add SMSBridgeID to list
// Retrieve provider message ID to track message status
var providerMessageId = provider.GetProviderMessageID(smsBridgeId);
if (providerMessageId != null)
{
providerMessageIDs.Add(providerMessageId.Value);
}
else
{
// No provider message ID to add
}
}
var successCount = responses.Count(r => r.Result is ObjectResult && ((ObjectResult)r.Result).StatusCode == 200);
var failureCount = responses.Count - successCount;
return Results.Ok(new BulkSmsResponse(
Success: failureCount == 0,
Message: $"Bulk send completed: {successCount} succeeded, {failureCount} failed",
Results: responses.Select(r => r.Result),
SMSBridgeIDs: smsBridgeIDs, // Use collected SMSBridgeIDs
ProviderMessageIDs: providerMessageIDs // BUG BUG BUG
));
}
catch (Exception ex)
{
return Results.Problem(
title: "Bulk SMS Gateway Error",
detail: ex.Message,
statusCode: 503
);
}
});
testingGatewayAPI.MapGet("/test-patient-lookup", async (IServiceProvider services, string phoneNumber) =>
{
try
{
var store = services.GetRequiredService<PrincipleOutboundSmsStore>();
var writer = services.GetRequiredService<PrincipleInboundSmsWriter>();
var cacheRecord = await store.FindByPhoneNumberAsync(phoneNumber);
var cacheResult = cacheRecord == null
? "not found"
: $"found, practiceId={cacheRecord.PracticeId}, patientId={cacheRecord.PatientId ?? "(null)"}";
var target = await writer.ResolveTargetAsync(phoneNumber);
var resolveResult = target == null
? "no match"
: $"matched patientId={target.PatientId}, practiceId={target.PracticeId}";
return Results.Ok(new
{
phoneNumber,
cache = cacheResult,
resolution = resolveResult
});
}
catch (Exception ex)
{
return Results.Problem(
title: "Test Patient Lookup Failed",
detail: ex.Message,
statusCode: 503
);
}
});
testingGatewayAPI.MapGet("/check-send-sms", async (IServiceProvider services) =>
{
try
{
var smsQueueService = services.GetRequiredService<SmsQueueService>();
var smsProvider = services.GetRequiredService<ISmsProvider>();
var configuration = services.GetRequiredService<IConfiguration>();
var defaultPhoneNumber = configuration["SmsSettings:TestingPhoneNumber"]!;
var testRequest = new SendSmsRequest(defaultPhoneNumber, "This is a test message during development");
var smsBridgeId = smsQueueService.QueueSms(testRequest);
var status = SmsStatus.Pending;
await Task.Delay(1000); // Wait for message to be processed before checking status
// Check up to 20 times with a 1-second delay between each check
for (int i = 0; i < 20; i++)
{
await Task.Delay(1000);
status = await smsProvider.GetMessageStatus(smsBridgeId);
if (status != SmsStatus.Pending)
{
break;
}
}
return Results.Ok(new CheckSendSmsResponse(
MessageID: smsBridgeId,
Status: status.ToString()
));
}
catch (Exception ex)
{
return Results.Problem(
title: "SMS Check Failed",
detail: ex.Message,
statusCode: 503
);
}
});
}
}
}