public static async Task RemoveDisciplinaryEventAsync(ulong userID, DisciplinaryEventEnum type) { try { using (var db = new UserContext()) { //check event table first UserDisciplinaryEventStorage[] existingEvents; if (type == DisciplinaryEventEnum.BanEvent) { existingEvents = await db.UserDisciplinaryEventStorageTable.AsQueryable().Where(x => x.UserID == userID).ToArrayAsync(); } else { existingEvents = await db.UserDisciplinaryEventStorageTable.AsQueryable().Where(x => x.UserID == userID && x.DiscipinaryEventType == type).ToArrayAsync(); } if (existingEvents.Count() > 0) { foreach (var item in existingEvents) { await TimedEventManager.RemoveEvent(item.DisciplineEventID); db.UserDisciplinaryEventStorageTable.Remove(item); var archivedEvent = new UserDisciplinaryEventArchive() { DateArchived = DateTime.UtcNow, DateInserted = item.DateInserted, DateToRemove = item.DateToRemove, DisciplineEventID = item.DisciplineEventID, DisciplineType = item.DiscipinaryEventType, ModeratorID = item.ModeratorID, Reason = item.Reason, UserID = item.UserID }; await db.UserDisciplinaryEventArchiveTable.AddAsync(archivedEvent); } } else //check permanent event table if can't find { UserDisciplinaryPermanentStorage[] existingPermaEvents; if (type == DisciplinaryEventEnum.BanEvent) { existingPermaEvents = await db.UserDisciplinaryPermanentStorageTable.AsQueryable().Where(x => x.UserID == userID).ToArrayAsync(); } else { existingPermaEvents = await db.UserDisciplinaryPermanentStorageTable.AsQueryable().Where(x => x.UserID == userID && x.DiscipinaryEventType == type).ToArrayAsync(); } if (existingPermaEvents.Count() > 0) { foreach (var item in existingPermaEvents) { await TimedEventManager.RemoveEvent(item.DisciplineEventID); db.UserDisciplinaryPermanentStorageTable.Remove(item); var archivedEvent = new UserDisciplinaryEventArchive() { DateArchived = DateTime.UtcNow, DateInserted = item.DateInserted, DisciplineEventID = item.DisciplineEventID, DisciplineType = item.DiscipinaryEventType, ModeratorID = item.ModeratorID, Reason = item.Reason, UserID = item.UserID }; await db.UserDisciplinaryEventArchiveTable.AddAsync(archivedEvent); } } } } } catch (Exception ex) { ExceptionManager.HandleException($"{typeof(StorageManager).GetType().FullName}: {ExceptionManager.GetAsyncMethodName()}", ex); throw ex; } }