using AsbCloudApp.Data; using AsbCloudApp.Services; using AsbCloudDb.Model; using AsbCloudInfrastructure.Services.Cache; using Mapster; using System; using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; namespace AsbCloudInfrastructure.Services { public class PermissionService : IPermissionService, IConverter { private readonly CacheTable cachePermission; public PermissionService(IAsbCloudDbContext db, CacheDb cacheDb) { cachePermission = cacheDb.GetCachedTable( (AsbCloudDbContext)db, new string[] { nameof(Permission.PermissionInfo) }); } public async Task> GetByIdRoleAsync(int idRole, CancellationToken token) { var entities = await cachePermission .WhereAsync(p => p.IdUserRole == idRole, token) .ConfigureAwait(false); var dto = entities.Select(Convert); return dto; } public async Task InsertRangeAsync(IEnumerable dtos, CancellationToken token) { var entities = dtos.Select(Convert); return (await cachePermission.InsertAsync(entities, token))?.Count()??0; } public async Task UpdateAsync(PermissionDto dto, CancellationToken token) { var entity = Convert(dto); await cachePermission.UpsertAsync(entity, token) .ConfigureAwait(false); return 1; } public Task DeleteAsync(int idUserRole, int idPermission, CancellationToken token) { bool predicate(Permission p) => p.IdUserRole == idUserRole && p.IdPermissionInfo == idPermission; return DeleteAsync(predicate, token); } public Task DeleteAllByRoleAsync(int idUserRole, CancellationToken token) { bool predicate(Permission p) => p.IdUserRole == idUserRole; return DeleteAsync(predicate, token); } private async Task DeleteAsync(Func predicate, CancellationToken token) { var count = (await cachePermission.WhereAsync(predicate, token).ConfigureAwait(false)).Count(); if (count > 0) await cachePermission.RemoveAsync(predicate, token) .ConfigureAwait(false); return count; } public Permission Convert(PermissionDto src) { var entity = src.Adapt(); return entity; } public PermissionDto Convert(Permission src) { var dto = src.Adapt(); dto.PermissionName = src.PermissionInfo?.Name; return dto; } } }