using MediatR; using Microsoft.AspNetCore.Http; using SequenceAuth.Lib; namespace SequenceAuth.Example.Features.Auth; public record LogoutCommand() : IRequest; public class LogoutCommandHandler(ISequenceStore sequenceStore, IHttpContextAccessor httpContextAccessor, Microsoft.Extensions.Options.IOptions options) : IRequestHandler { public async Task Handle(LogoutCommand request, CancellationToken cancellationToken) { var userIdStr = httpContextAccessor.HttpContext?.Items[options.Value.UserIdItemKey]?.ToString(); var isUserIdPresent = string.IsNullOrEmpty(userIdStr); _ = isUserIdPresent switch { false => await ProcessLogout(userIdStr!), true => 0 }; } private async Task ProcessLogout(string userId) { await sequenceStore.InvalidateUserSessionsAsync(userId); return 1; } }