Skip to content

Commit

Permalink
add extension operation to result
Browse files Browse the repository at this point in the history
  • Loading branch information
izharikov committed Jun 6, 2024
1 parent 814f0a7 commit a6333a1
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 9 deletions.
35 changes: 26 additions & 9 deletions dotnet/SitecoreSend.SDK/Extensions/SubscriberServiceExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,41 +4,58 @@ public static class SubscriberServiceExtensions
{
public static async Task<SendResponse<Subscriber>?> CreateOrUpdate(this ISubscribersService subscribersService,
Guid listId,
SubscriberRequest subscriberRequest, CancellationToken? cancellationToken = null)
{
return (await subscribersService.CreateOrUpdateDetailed(listId, subscriberRequest, cancellationToken)).Item1;
}

public static async Task<(SendResponse<Subscriber>?, ServiceOperation)> CreateOrUpdateDetailed(
this ISubscribersService subscribersService,
Guid listId,
SubscriberRequest subscriberRequest, CancellationToken? cancellationToken = null)
{
var existing =
await subscribersService.GetSubscriberByEmail(listId, subscriberRequest.Email, cancellationToken);
if (existing is {Success: true, Data: not null})
{
return await subscribersService.UpdateSubscriber(listId, existing.Data.ID, subscriberRequest,
cancellationToken);
return (await subscribersService.UpdateSubscriber(listId, existing.Data.ID, subscriberRequest,
cancellationToken), ServiceOperation.Update);
}

return await subscribersService.AddSubscriber(listId, subscriberRequest, cancellationToken);
return (await subscribersService.AddSubscriber(listId, subscriberRequest, cancellationToken), ServiceOperation.Add);
}

public static async Task<SendResponse<Subscriber>?> EnsureSubscribed(
this ISubscribersService subscribersService, Guid listId, string email,
CancellationToken? cancellationToken = null)
{
return (await subscribersService.EnsureSubscribedDetailed(listId, email, cancellationToken)).Item1;
}


public static async Task<SendResponse<Subscriber>?> EnsureSubscribed(this ISubscribersService subscribersService, Guid listId, string email,
public static async Task<(SendResponse<Subscriber>?, ServiceOperation)> EnsureSubscribedDetailed(
this ISubscribersService subscribersService, Guid listId, string email,
CancellationToken? cancellationToken = null)
{
var existing = await subscribersService.GetSubscriberByEmail(listId, email, cancellationToken);
if (existing is {Success: true, Data: not null})
{
if (existing.Data.SubscribeType == SubscriberStatus.Subscribed)
{
return existing;
return (existing, ServiceOperation.None);
}

return await subscribersService.UpdateSubscriber(listId, existing.Data.ID, new SubscriberRequest()
return (await subscribersService.UpdateSubscriber(listId, existing.Data.ID, new SubscriberRequest()
{
Email = email,
SubscribeType = SubscriberStatus.Subscribed,
}, cancellationToken);
}, cancellationToken), ServiceOperation.Update);
}

return await subscribersService.AddSubscriber(listId, new SubscriberRequest()
return (await subscribersService.AddSubscriber(listId, new SubscriberRequest()
{
Email = email,
SubscribeType = SubscriberStatus.Subscribed,
}, cancellationToken);
}, cancellationToken), ServiceOperation.Add);
}
}
8 changes: 8 additions & 0 deletions dotnet/SitecoreSend.SDK/Models/ServiceOperation.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
namespace SitecoreSend.SDK;

public enum ServiceOperation
{
Add,
Update,
None,
}

0 comments on commit a6333a1

Please sign in to comment.