using Microsoft.AspNetCore.Identity; using Raven.Client.Documents; using Raven.Client.Documents.Session; using Raven.Client.Exceptions; using System; using System.Linq; using System.Threading; using System.Threading.Tasks; using zero.Core.Api; using zero.Core.Entities; using zero.Core.Extensions; namespace zero.Core.Identity { public partial class RoleStore : IRoleStore where TRole : class, IUserRole { protected IDocumentStore Raven { get; private set; } protected IdentityErrorDescriber ErrorDescriber { get; private set; } public RoleStore(IDocumentStore raven, IdentityErrorDescriber describer = null) { Raven = raven; ErrorDescriber = describer ?? new IdentityErrorDescriber(); } /// public async Task CreateAsync(TRole role, CancellationToken cancellationToken) { using (IAsyncDocumentSession session = Raven.OpenAsyncSession()) { await session.StoreAsync(role); await session.SaveChangesAsync(cancellationToken); } return IdentityResult.Success; } /// public async Task UpdateAsync(TRole role, CancellationToken cancellationToken) { try { using (IAsyncDocumentSession session = Raven.OpenAsyncSession()) { await session.StoreAsync(role, cancellationToken); await session.SaveChangesAsync(cancellationToken); } } catch (ConcurrencyException) { return IdentityResult.Failed(ErrorDescriber.ConcurrencyFailure()); } return IdentityResult.Success; } /// public async Task DeleteAsync(TRole role, CancellationToken cancellationToken) { using (IAsyncDocumentSession session = Raven.OpenAsyncSession()) { try { session.Delete(role); await session.SaveChangesAsync(cancellationToken); } catch (ConcurrencyException) { return IdentityResult.Failed(ErrorDescriber.ConcurrencyFailure()); } return IdentityResult.Success; } } /// public Task GetRoleIdAsync(TRole role, CancellationToken cancellationToken) { return Task.FromResult(role.Id); } /// public Task GetRoleNameAsync(TRole role, CancellationToken cancellationToken) { return Task.FromResult(role.Alias); } /// public Task SetRoleNameAsync(TRole role, string roleName, CancellationToken cancellationToken) { role.Alias = Safenames.Alias(roleName); return Task.CompletedTask; } /// public Task GetNormalizedRoleNameAsync(TRole role, CancellationToken cancellationToken) { return Task.FromResult(role.Alias); } /// public async Task SetNormalizedRoleNameAsync(TRole role, string normalizedName, CancellationToken cancellationToken) { await SetRoleNameAsync(role, normalizedName, cancellationToken); } /// public async Task FindByIdAsync(string roleId, CancellationToken cancellationToken) { using (IAsyncDocumentSession session = Raven.OpenAsyncSession()) { return await session.LoadAsync(roleId); } } /// public async Task FindByNameAsync(string normalizedRoleName, CancellationToken cancellationToken) { using (IAsyncDocumentSession session = Raven.OpenAsyncSession()) { return await session.Query().FirstOrDefaultAsync(x => x.Alias == normalizedRoleName, cancellationToken); } } /// public void Dispose() { } } }