/// <inheritdoc /> public override async Task <ICollection <WebHook> > GetAllWebHooksAsync(string user) { if (user == null) { throw new ArgumentNullException("user"); } user = NormalizeKey(user); try { using (var context = new WebHooksStoreContext()) { var registrations = await context.Registrations.Where(r => r.User == user).ToArrayAsync(); ICollection <WebHook> result = registrations.Select(r => ConvertToWebHook(r)) .Where(w => w != null) .ToArray(); return(result); } } catch (Exception ex) { string msg = string.Format(SqlStorageResource.SqlStore_OperationFailed, "Get", ex.Message); _logger.LogError(msg, ex); throw new InvalidOperationException(msg, ex); } }
/// <inheritdoc /> public override async Task <ICollection <WebHook> > QueryWebHooksAsync(string user, IEnumerable <string> actions, Func <WebHook, string, bool> predicate) { if (user == null) { throw new ArgumentNullException("user"); } user = NormalizeKey(user); predicate = predicate ?? DefaultPredicate; try { using (var context = new WebHooksStoreContext()) { var registrations = await context.Registrations.Where(r => r.User == user).ToArrayAsync(); ICollection <WebHook> matches = registrations.Select(r => ConvertToWebHook(r)) .Where(w => MatchesAnyAction(w, actions) && predicate(w, user)) .ToArray(); return(matches); } } catch (Exception ex) { string msg = string.Format(SqlStorageResource.SqlStore_OperationFailed, "Get", ex.Message); _logger.LogError(msg, ex); throw new InvalidOperationException(msg, ex); } }
/// <inheritdoc /> public override async Task <ICollection <WebHook> > QueryWebHooksAcrossAllUsersAsync(IEnumerable <string> actions, Func <WebHook, string, bool> predicate) { if (actions == null) { throw new ArgumentNullException("actions"); } predicate = predicate ?? DefaultPredicate; try { using (var context = new WebHooksStoreContext()) { var registrations = await context.Registrations.ToArrayAsync(); var matches = new List <WebHook>(); foreach (var registration in registrations) { WebHook webHook = ConvertToWebHook(registration); if (MatchesAnyAction(webHook, actions) && predicate(webHook, registration.User)) { matches.Add(webHook); } } return(matches); } } catch (Exception ex) { string msg = string.Format(SqlStorageResource.SqlStore_OperationFailed, "Get", ex.Message); _logger.LogError(msg, ex); throw new InvalidOperationException(msg, ex); } }
/// <inheritdoc /> public override async Task DeleteAllWebHooksAsync(string user) { if (user == null) { throw new ArgumentNullException("user"); } user = NormalizeKey(user); try { using (var context = new WebHooksStoreContext()) { var matches = await context.Registrations.Where(r => r.User == user).ToArrayAsync(); foreach (var m in matches) { context.Entry(m).State = EntityState.Deleted; } await context.SaveChangesAsync(); } } catch (Exception ex) { string msg = string.Format(SqlStorageResource.SqlStore_OperationFailed, "DeleteAll", ex.Message); _logger.LogError(msg, ex); throw new InvalidOperationException(msg, ex); } }
/// <inheritdoc /> public override async Task <WebHook> LookupWebHookAsync(string user, string id) { if (user == null) { throw new ArgumentNullException("user"); } if (id == null) { throw new ArgumentNullException("id"); } user = NormalizeKey(user); id = NormalizeKey(id); try { using (var context = new WebHooksStoreContext()) { var registration = await context.Registrations.Where(r => r.User == user && r.Id == id).FirstOrDefaultAsync(); if (registration != null) { return(ConvertToWebHook(registration)); } return(null); } } catch (Exception ex) { string msg = string.Format(SqlStorageResource.SqlStore_OperationFailed, "Lookup", ex.Message); _logger.LogError(msg, ex); throw new InvalidOperationException(msg, ex); } }
/// <inheritdoc /> public override async Task <StoreResult> UpdateWebHookAsync(string user, WebHook webHook) { if (user == null) { throw new ArgumentNullException("user"); } if (webHook == null) { throw new ArgumentNullException("webHook"); } user = NormalizeKey(user); try { using (var context = new WebHooksStoreContext()) { var registration = await context.Registrations.Where(r => r.User == user && r.Id == webHook.Id).FirstOrDefaultAsync(); if (registration == null) { return(StoreResult.NotFound); } UpdateRegistrationFromWebHook(user, webHook, registration); context.Entry(registration).State = EntityState.Modified; await context.SaveChangesAsync(); } } catch (DbUpdateConcurrencyException ocex) { string msg = string.Format(SqlStorageResource.SqlStore_ConcurrencyError, "Update", ocex.Message); _logger.LogError(msg, ocex); return(StoreResult.Conflict); } catch (DbUpdateException uex) { string error = uex.GetBaseException().Message; string msg = string.Format(SqlStorageResource.SqlStore_SqlOperationFailed, "Update", error); _logger.LogError(msg, uex); return(StoreResult.Conflict); } catch (Exception ex) { string msg = string.Format(SqlStorageResource.SqlStore_OperationFailed, "Update", ex.Message); _logger.LogError(msg, ex); return(StoreResult.InternalError); } return(StoreResult.Success); }
/// <inheritdoc /> public override async Task <StoreResult> InsertWebHookAsync(string user, WebHook webHook) { if (user == null) { throw new ArgumentNullException("user"); } if (webHook == null) { throw new ArgumentNullException("webHook"); } user = NormalizeKey(user); try { using (var context = new WebHooksStoreContext()) { var registration = ConvertFromWebHook(user, webHook); context.Registrations.Attach(registration); context.Entry(registration).State = EntityState.Added; await context.SaveChangesAsync(); } } catch (DbUpdateConcurrencyException ocex) { string msg = string.Format(SqlStorageResource.SqlStore_ConcurrencyError, "Insert", ocex.Message); _logger.LogError(msg); return(StoreResult.Conflict); } catch (DbUpdateException uex) { string error = uex.GetBaseException().Message; string msg = string.Format(SqlStorageResource.SqlStore_SqlOperationFailed, "Insert", error); _logger.LogError(msg, uex); return(StoreResult.Conflict); } catch (Exception ex) { string msg = string.Format(SqlStorageResource.SqlStore_OperationFailed, "Insert", ex.Message); _logger.LogError(msg); return(StoreResult.InternalError); } return(StoreResult.Success); }