-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPredictionProcessor.cs
More file actions
58 lines (48 loc) · 1.85 KB
/
Copy pathPredictionProcessor.cs
File metadata and controls
58 lines (48 loc) · 1.85 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
using Azure.Messaging.ServiceBus;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.Logging;
using OddsCollector.Functions.Models;
using OddsCollector.Functions.Predictions;
namespace OddsCollector.Functions.Processors;
internal sealed class PredictionProcessor(ILogger<PredictionProcessor> logger, IPredictionStrategy strategy)
: IPredictionProcessor
{
public async Task<EventPrediction[]> ProcessMessagesAsync(ServiceBusReceivedMessage[] messages,
ServiceBusMessageActions messageActions, CancellationToken cancellationToken)
{
var result = new List<EventPrediction>();
foreach (var message in messages)
{
if (cancellationToken.IsCancellationRequested)
{
break;
}
try
{
var prediction = await GetPredictionAndCompleteMessageAsync(message, messageActions, cancellationToken);
result.Add(prediction);
}
catch (Exception exception)
{
logger.LogError(exception, "Failed to process message with id {Id}", message.MessageId);
}
}
if (result.Count == 0)
{
logger.LogWarning("Processed 0 messages");
}
else
{
logger.LogInformation("Processed {Count} message(s)", result.Count);
}
return [.. result];
}
private async Task<EventPrediction> GetPredictionAndCompleteMessageAsync(ServiceBusReceivedMessage message,
ServiceBusMessageActions messageActions, CancellationToken cancellationToken)
{
var upcomingEvent = message.Body.ToObjectFromJson<UpcomingEvent>();
var prediction = strategy.GetPrediction(upcomingEvent);
await messageActions.CompleteMessageAsync(message, cancellationToken);
return prediction;
}
}