added mass deactivate subscription for user.
This commit is contained in:
parent
a35e616753
commit
85bc493d73
@ -24,4 +24,7 @@ public interface ITextSubscriptionsController
|
||||
|
||||
[Patch(WebRoutes.TextSubscriptions.Disable)]
|
||||
Task Disable([Path] long id, CancellationToken cancellationToken = default);
|
||||
|
||||
[Patch(WebRoutes.TextSubscriptions.DeactivateAllSubscriptionsById)]
|
||||
Task DeactivateAllSubscriptionsById([Path] long userId, CancellationToken cancellationToken = default);
|
||||
}
|
||||
@ -13,6 +13,8 @@ public static class WebRoutes
|
||||
public const string Activate = ById + "/" + "activate";
|
||||
|
||||
public const string Disable = ById + "/" + "disable";
|
||||
|
||||
public const string DeactivateAllSubscriptionsById = "deactivate-all-subscriptions/{userId}";
|
||||
|
||||
public const string ById = "{id}";
|
||||
}
|
||||
|
||||
@ -7,6 +7,7 @@
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" />
|
||||
<PackageReference Include="Nocr.TelegramListener.Async.Api.Contracts" />
|
||||
<PackageReference Include="RestEase" />
|
||||
<PackageReference Include="Rebus" />
|
||||
<PackageReference Include="Rebus.ServiceProvider" />
|
||||
</ItemGroup>
|
||||
|
||||
@ -13,4 +13,6 @@ public interface ITextSubscriptionRepository
|
||||
Task<TextSubscription?> GetById(long id, CancellationToken cancellationToken = default);
|
||||
|
||||
Task Update(TextSubscription subscription, CancellationToken cancellationToken = default);
|
||||
|
||||
Task DeactivateAllSubscriptionsById(long userId, CancellationToken cancellationToken = default);
|
||||
}
|
||||
@ -19,4 +19,6 @@ public interface ITextSubscriptionsService
|
||||
Task<IReadOnlyCollection<TextSubscriptionData>> Get(CancellationToken cancellationToken = default);
|
||||
|
||||
Task<IReadOnlyCollection<TextSubscriptionData>> GetByUserId(long userId, CancellationToken cancellationToken = default);
|
||||
|
||||
Task DeactivateAllSubscriptionsById(long userId, CancellationToken cancellationToken = default);
|
||||
}
|
||||
@ -1,3 +1,4 @@
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Nocr.TextMatcher.Api.Contracts.TextMatches.Dto;
|
||||
using Nocr.TextMatcher.AppServices.TextSubscriptions.Repositories;
|
||||
using Nocr.TextMatcher.Async.Api.Contracts;
|
||||
@ -12,13 +13,15 @@ public sealed class TextSubscriptionsService : ITextSubscriptionsService
|
||||
private readonly IBus _bus;
|
||||
private readonly ITextSubscriptionRepository _repository;
|
||||
private readonly ICurrentDateProvider _dateProvider;
|
||||
private readonly ILogger<TextSubscriptionsService> _logger;
|
||||
|
||||
public TextSubscriptionsService(IBus bus, ITextSubscriptionRepository repository,
|
||||
ICurrentDateProvider dateProvider)
|
||||
ICurrentDateProvider dateProvider, ILogger<TextSubscriptionsService> logger)
|
||||
{
|
||||
_bus = bus ?? throw new ArgumentNullException(nameof(bus));
|
||||
_repository = repository ?? throw new ArgumentNullException(nameof(repository));
|
||||
_dateProvider = dateProvider ?? throw new ArgumentNullException(nameof(dateProvider));
|
||||
_logger = logger ?? throw new ArgumentNullException(nameof(logger));
|
||||
}
|
||||
|
||||
public async Task<long> Create(long userId, string chatUsername, string template, TextSubscriptionRule rule,
|
||||
@ -91,6 +94,13 @@ public sealed class TextSubscriptionsService : ITextSubscriptionsService
|
||||
return matches.Select(MapToTextMatchData).ToArray();
|
||||
}
|
||||
|
||||
public async Task DeactivateAllSubscriptionsById(long userId, CancellationToken cancellationToken = default)
|
||||
{
|
||||
_logger.LogInformation("Deactivating all subscriptions for user {UserId}", userId);
|
||||
await _repository.DeactivateAllSubscriptionsById(userId, cancellationToken);
|
||||
_logger.LogInformation("Successfully deactivated all subscriptions for user {UserId}", userId);
|
||||
}
|
||||
|
||||
private TextSubscriptionData MapToTextMatchData(TextSubscription textSubscription)
|
||||
{
|
||||
return new TextSubscriptionData
|
||||
|
||||
@ -54,4 +54,10 @@ public class TextSubscriptionsController : ControllerBase
|
||||
{
|
||||
return _textSubscriptionsService.Disable(id, cancellationToken);
|
||||
}
|
||||
|
||||
[HttpPatch(WebRoutes.TextSubscriptions.DeactivateAllSubscriptionsById)]
|
||||
public Task DeactivateAllSubscriptionsById([FromRoute] long userId, CancellationToken cancellationToken = default)
|
||||
{
|
||||
return _textSubscriptionsService.DeactivateAllSubscriptionsById(userId, cancellationToken);
|
||||
}
|
||||
}
|
||||
@ -46,4 +46,11 @@ public sealed class TextSubscriptionRepository : ITextSubscriptionRepository
|
||||
_db.TextSubscriptions.Update(subscription);
|
||||
await _db.SaveChangesAsync(cancellationToken);
|
||||
}
|
||||
|
||||
public async Task DeactivateAllSubscriptionsById(long userId, CancellationToken cancellationToken = default)
|
||||
{
|
||||
await _db.TextSubscriptions
|
||||
.Where(x => x.UserId == userId && x.Active)
|
||||
.ExecuteUpdateAsync(x => x.SetProperty(s => s.Active, false), cancellationToken);
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user