Skip to content

Commit ca19c97

Browse files
committed
Refactored to use a single action that accepts an array (the model binder will bind a single object as a one-element array).
Fixed default event to error more gracefully.
1 parent 01dd4f2 commit ca19c97

File tree

1 file changed

+16
-46
lines changed

1 file changed

+16
-46
lines changed

src/SocketLabs.EventWebhooks.Extensions/Controllers/WebhookEventsController.cs

Lines changed: 16 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -27,42 +27,7 @@ IOptionsMonitor<WebhookOptions> options
2727
}
2828

2929
[HttpPost]
30-
public async Task<IActionResult> Post(WebhookEventBase webhookEvent, string id)
31-
{
32-
if (!_options.TryGetWebhook(id, out var endpoint) || endpoint?.SecretKey != webhookEvent.SecretKey)
33-
{
34-
return Unauthorized();
35-
}
36-
37-
try
38-
{
39-
webhookEvent.WebhookEndpointName = id;
40-
41-
Task result = webhookEvent switch
42-
{
43-
ComplaintEvent eventItem => ProcessEvent(eventItem),
44-
DeferredEvent eventItem => ProcessEvent(eventItem),
45-
EngagementEvent eventItem => ProcessEvent(eventItem),
46-
FailedEvent eventItem => ProcessEvent(eventItem),
47-
QueuedEvent eventItem => ProcessEvent(eventItem),
48-
SentEvent eventItem => ProcessEvent(eventItem),
49-
ValidationEvent eventItem => ProcessEvent(eventItem),
50-
_ => throw new InvalidOperationException("Unable to convert event type.")
51-
};
52-
53-
await result;
54-
}
55-
catch (Exception ex)
56-
{
57-
_logger.LogError(ex, "Unable to process webhook event.");
58-
59-
return BadRequest();
60-
}
61-
62-
return Ok();
63-
}
64-
[HttpPost]
65-
public async Task<IActionResult> Post(WebhookEventBase[] webhookEvents, string id)
30+
public async Task<IActionResult> Post([FromBody] WebhookEventBase[] webhookEvents, string id)
6631
{
6732
foreach (var webhookEvent in webhookEvents)
6833
{
@@ -75,7 +40,7 @@ public async Task<IActionResult> Post(WebhookEventBase[] webhookEvents, string i
7540
{
7641
webhookEvent.WebhookEndpointName = id;
7742

78-
Task result = webhookEvent switch
43+
Task? result = webhookEvent switch
7944
{
8045
ComplaintEvent eventItem => ProcessEvent(eventItem),
8146
DeferredEvent eventItem => ProcessEvent(eventItem),
@@ -84,65 +49,70 @@ public async Task<IActionResult> Post(WebhookEventBase[] webhookEvents, string i
8449
QueuedEvent eventItem => ProcessEvent(eventItem),
8550
SentEvent eventItem => ProcessEvent(eventItem),
8651
ValidationEvent eventItem => ProcessEvent(eventItem),
87-
_ => throw new InvalidOperationException("Unable to convert event type.")
52+
_ => null
8853
};
8954

55+
if (result == null)
56+
{
57+
_logger.LogError("Unable to convert event type: {EventType} for MessageId: {MessageId}", webhookEvent.GetType().Name, webhookEvent.MessageId);
58+
return BadRequest($"Unknown event type: {webhookEvent.GetType().Name}");
59+
}
9060
await result;
9161
}
9262
catch (Exception ex)
9363
{
9464
_logger.LogError(ex, "Unable to process webhook event.");
9565
return BadRequest();
9666
}
97-
9867
}
9968

10069
return Ok();
10170
}
10271

103-
private async Task ProcessEvent(ComplaintEvent webhookEvent)
72+
73+
private async Task? ProcessEvent(ComplaintEvent webhookEvent)
10474
{
10575
webhookEvent.Type = "Complaint";
10676
_logger.LogTrace("Begin processing webhook event for {SystemMessageId}", webhookEvent.MessageId);
10777
await _webhookEventHandler.ProcessAsync(webhookEvent);
10878
}
10979

110-
private async Task ProcessEvent(DeferredEvent webhookEvent)
80+
private async Task? ProcessEvent(DeferredEvent webhookEvent)
11181
{
11282
webhookEvent.Type = "Deferred";
11383
_logger.LogTrace("Begin processing webhook event for {SystemMessageId}", webhookEvent.MessageId);
11484
await _webhookEventHandler.ProcessAsync(webhookEvent);
11585
}
11686

117-
private async Task ProcessEvent(EngagementEvent webhookEvent)
87+
private async Task? ProcessEvent(EngagementEvent webhookEvent)
11888
{
11989
webhookEvent.Type = "Tracking";
12090
_logger.LogTrace("Begin processing webhook event for {SystemMessageId}", webhookEvent.MessageId);
12191
await _webhookEventHandler.ProcessAsync(webhookEvent);
12292
}
12393

124-
private async Task ProcessEvent(FailedEvent webhookEvent)
94+
private async Task? ProcessEvent(FailedEvent webhookEvent)
12595
{
12696
webhookEvent.Type = "Failed";
12797
_logger.LogTrace("Begin processing webhook event for {SystemMessageId}", webhookEvent.MessageId);
12898
await _webhookEventHandler.ProcessAsync(webhookEvent);
12999
}
130100

131-
private async Task ProcessEvent(QueuedEvent webhookEvent)
101+
private async Task? ProcessEvent(QueuedEvent webhookEvent)
132102
{
133103
webhookEvent.Type = "Queued";
134104
_logger.LogTrace("Begin processing webhook event for {SystemMessageId}", webhookEvent.MessageId);
135105
await _webhookEventHandler.ProcessAsync(webhookEvent);
136106
}
137107

138-
private async Task ProcessEvent(SentEvent webhookEvent)
108+
private async Task? ProcessEvent(SentEvent webhookEvent)
139109
{
140110
webhookEvent.Type = "Delivered";
141111
_logger.LogTrace("Begin processing webhook event for {SystemMessageId}", webhookEvent.MessageId);
142112
await _webhookEventHandler.ProcessAsync(webhookEvent);
143113
}
144114

145-
private async Task ProcessEvent(ValidationEvent webhookEvent)
115+
private async Task? ProcessEvent(ValidationEvent webhookEvent)
146116
{
147117
webhookEvent.Type = "Validation";
148118
_logger.LogTrace("Begin processing webhook event for {SystemMessageId}", webhookEvent.MessageId);

0 commit comments

Comments
 (0)