Files
Umbraco-CMS/src/Umbraco.Core/Services/WebhookRequestService.cs

64 lines
2.3 KiB
C#
Raw Normal View History

using Umbraco.Cms.Core.Models;
using Umbraco.Cms.Core.Persistence.Repositories;
using Umbraco.Cms.Core.Scoping;
using Umbraco.Cms.Core.Serialization;
namespace Umbraco.Cms.Core.Services;
public class WebhookRequestService : IWebhookRequestService
{
private readonly ICoreScopeProvider _coreScopeProvider;
private readonly IWebhookRequestRepository _webhookRequestRepository;
private readonly IJsonSerializer _jsonSerializer;
public WebhookRequestService(ICoreScopeProvider coreScopeProvider, IWebhookRequestRepository webhookRequestRepository, IJsonSerializer jsonSerializer)
{
_coreScopeProvider = coreScopeProvider;
_webhookRequestRepository = webhookRequestRepository;
_jsonSerializer = jsonSerializer;
}
public async Task<WebhookRequest> CreateAsync(Guid webhookKey, string eventAlias, object? payload)
{
using ICoreScope scope = _coreScopeProvider.CreateCoreScope();
scope.WriteLock(Constants.Locks.WebhookRequest);
var webhookRequest = new WebhookRequest
{
WebhookKey = webhookKey,
EventAlias = eventAlias,
RequestObject = _jsonSerializer.Serialize(payload),
RetryCount = 0,
};
webhookRequest = await _webhookRequestRepository.CreateAsync(webhookRequest);
scope.Complete();
return webhookRequest;
}
public Task<IEnumerable<WebhookRequest>> GetAllAsync()
{
using ICoreScope scope = _coreScopeProvider.CreateCoreScope();
Task<IEnumerable<WebhookRequest>> webhookRequests = _webhookRequestRepository.GetAllAsync();
scope.Complete();
return webhookRequests;
}
public async Task DeleteAsync(WebhookRequest webhookRequest)
{
using ICoreScope scope = _coreScopeProvider.CreateCoreScope();
scope.WriteLock(Constants.Locks.WebhookRequest);
await _webhookRequestRepository.DeleteAsync(webhookRequest);
scope.Complete();
}
public async Task<WebhookRequest> UpdateAsync(WebhookRequest webhookRequest)
{
using ICoreScope scope = _coreScopeProvider.CreateCoreScope();
scope.WriteLock(Constants.Locks.WebhookRequest);
WebhookRequest updated = await _webhookRequestRepository.UpdateAsync(webhookRequest);
scope.Complete();
return updated;
}
}