Update spam circle cache after updating circle status.
This commit is contained in:
@@ -1,11 +1,20 @@
|
||||
using JSMR.Application.Circles.Ports;
|
||||
using JSMR.Application.Common.Caching;
|
||||
|
||||
namespace JSMR.Application.Circles.Commands.UpdateCircleStatus;
|
||||
|
||||
public class UpdateCircleStatusHandler(ICircleWriter writer)
|
||||
public class UpdateCircleStatusHandler(ICircleWriter writer, ISpamCircleCache spamCircleCache)
|
||||
{
|
||||
public Task<UpdateCircleStatusResponse> HandleAsync(UpdateCircleStatusRequest request, CancellationToken cancellationToken = default)
|
||||
public async Task<UpdateCircleStatusResponse> HandleAsync(UpdateCircleStatusRequest request, CancellationToken cancellationToken = default)
|
||||
{
|
||||
return writer.UpdateStatusAsync(request, cancellationToken);
|
||||
UpdateCircleStatusResponse response = await writer.UpdateStatusAsync(request, cancellationToken);
|
||||
|
||||
bool wasChangedToSpam = response.OldStatus is not Contracts.CircleStatus.Spam && response.NewStatus is Contracts.CircleStatus.Spam;
|
||||
bool wasChangedFromSpam = response.OldStatus is Contracts.CircleStatus.Spam && response.NewStatus is not Contracts.CircleStatus.Spam;
|
||||
|
||||
if (wasChangedToSpam || wasChangedFromSpam)
|
||||
await spamCircleCache.RefreshAsync(cancellationToken);
|
||||
|
||||
return response;
|
||||
}
|
||||
}
|
||||
@@ -2,4 +2,4 @@
|
||||
|
||||
namespace JSMR.Application.Circles.Commands.UpdateCircleStatus;
|
||||
|
||||
public sealed record UpdateCircleStatusResponse(int CircleId, CircleStatus CircleStatus);
|
||||
public sealed record UpdateCircleStatusResponse(int CircleId, CircleStatus OldStatus, CircleStatus NewStatus);
|
||||
7
JSMR.Application/Common/Caching/ICacheObject.cs
Normal file
7
JSMR.Application/Common/Caching/ICacheObject.cs
Normal file
@@ -0,0 +1,7 @@
|
||||
namespace JSMR.Application.Common.Caching;
|
||||
|
||||
public interface ICacheObject<T>
|
||||
{
|
||||
Task<T> GetAsync(CancellationToken cancellationToken = default);
|
||||
Task<T> RefreshAsync(CancellationToken cancellationToken = default);
|
||||
}
|
||||
6
JSMR.Application/Common/Caching/ISpamCircleCache.cs
Normal file
6
JSMR.Application/Common/Caching/ISpamCircleCache.cs
Normal file
@@ -0,0 +1,6 @@
|
||||
namespace JSMR.Application.Common.Caching;
|
||||
|
||||
public interface ISpamCircleCache : ICacheObject<string[]>
|
||||
{
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user