public async Task <UserApiKey[]> SaveApiKeysAsync(UserApiKey[] apiKeys) { if (apiKeys == null) { throw new ArgumentNullException(nameof(apiKeys)); } var pkMap = new PrimaryKeyResolvingMap(); using (var repository = _repositoryFactory()) { var ids = apiKeys.Where(x => !x.IsTransient()).Select(x => x.Id).Distinct().ToArray(); var apiKeysEntities = await repository.UserApiKeys.Where(x => ids.Contains(x.Id)) .ToArrayAsync(); foreach (var apiKey in apiKeys) { var originalEntity = apiKeysEntities.FirstOrDefault(x => x.Id == apiKey.Id); var modifiedEntity = AbstractTypeFactory <UserApiKeyEntity> .TryCreateInstance().FromModel(apiKey, pkMap); if (originalEntity != null) { modifiedEntity.Patch(originalEntity); } else { repository.Add(modifiedEntity); } } repository.UnitOfWork.Commit(); pkMap.ResolvePrimaryKeys(); ApiKeyCacheRegion.ExpireRegion(); } return(apiKeys); }
public async Task <UserApiKey> GetApiKeyByKeyAsync(string apiKey) { var cacheKey = CacheKey.With(GetType(), nameof(GetApiKeyByKeyAsync), apiKey); return(await _memoryCache.GetOrCreateExclusiveAsync(cacheKey, async (cacheEntry) => { //Add cache expiration token cacheEntry.AddExpirationToken(ApiKeyCacheRegion.CreateChangeToken()); using (var repository = _repositoryFactory()) { var result = await repository.UserApiKeys.Where(x => x.ApiKey == apiKey) .AsNoTracking() .FirstOrDefaultAsync(); return result?.ToModel(AbstractTypeFactory <UserApiKey> .TryCreateInstance()); } })); }
public async Task <UserApiKey[]> GetApiKeysByIdsAsync(string[] ids) { var cacheKey = CacheKey.With(GetType(), nameof(GetApiKeysByIdsAsync), string.Join("-", ids)); return(await _memoryCache.GetOrCreateExclusiveAsync(cacheKey, async (cacheEntry) => { //Add cache expiration token cacheEntry.AddExpirationToken(ApiKeyCacheRegion.CreateChangeToken()); using (var repository = _repositoryFactory()) { var result = await repository.UserApiKeys.Where(x => ids.Contains(x.Id)) .AsNoTracking() .ToArrayAsync(); return result.Select(x => x.ToModel(AbstractTypeFactory <UserApiKey> .TryCreateInstance())).ToArray(); } })); }
public async Task DeleteApiKeysAsync(string[] ids) { if (ids == null) { throw new ArgumentNullException(nameof(ids)); } using (var repository = _repositoryFactory()) { foreach (var id in ids) { var apiKey = new UserApiKeyEntity { Id = id }; repository.Attach(apiKey); repository.Remove(apiKey); } await repository.UnitOfWork.CommitAsync(); ApiKeyCacheRegion.ExpireRegion(); } }