public static async Task ArchiveTimedEventAsync(ulong eventId)
        {
            try
            {
                using (UserContext db = new UserContext())
                {
                    var eventToArchive = await db.UserDisciplinaryEventStorageTable.FindAsync(eventId);

                    if (eventToArchive != null)
                    {
                        db.UserDisciplinaryEventStorageTable.Remove(eventToArchive);
                        var archivedEvent = new UserDisciplinaryEventArchive()
                        {
                            DateArchived      = DateTime.UtcNow,
                            DateInserted      = eventToArchive.DateInserted,
                            DateToRemove      = eventToArchive.DateToRemove,
                            DisciplineEventID = eventToArchive.DisciplineEventID,
                            DisciplineType    = eventToArchive.DiscipinaryEventType,
                            ModeratorID       = eventToArchive.ModeratorID,
                            Reason            = eventToArchive.Reason,
                            UserID            = eventToArchive.UserID
                        };
                        await db.UserDisciplinaryEventArchiveTable.AddAsync(archivedEvent);

                        await db.SaveChangesAsync();
                    }
                }
            }
            catch (Exception ex)
            {
                ExceptionManager.HandleException(ErrMessages.StorageException, ex);
            }
        }
        public static async Task <bool> RemoveActiveDisciplinaries(ulong userID)
        {
            try
            {
                using (var db = new UserContext())
                {
                    var activeDisciplinaries = await db.UserDisciplinaryEventStorageTable.AsQueryable().AnyAsync(x => x.UserID == userID);

                    if (activeDisciplinaries)
                    {
                        var itemsToRemove = await db.UserDisciplinaryEventStorageTable.AsQueryable().Where(x => x.UserID == userID).ToListAsync();

                        db.RemoveRange(itemsToRemove);
                        List <UserDisciplinaryEventArchive> eventsToArchive = new List <UserDisciplinaryEventArchive>();
                        foreach (UserDisciplinaryEventStorage eventToArchive in itemsToRemove)
                        {
                            var archivedEvent = new UserDisciplinaryEventArchive()
                            {
                                DateArchived      = DateTime.UtcNow,
                                DateInserted      = eventToArchive.DateInserted,
                                DateToRemove      = eventToArchive.DateToRemove,
                                DisciplineEventID = eventToArchive.DisciplineEventID,
                                DisciplineType    = eventToArchive.DiscipinaryEventType,
                                ModeratorID       = eventToArchive.ModeratorID,
                                Reason            = eventToArchive.Reason,
                                UserID            = eventToArchive.UserID
                            };
                            eventsToArchive.Add(archivedEvent);
                        }
                        await db.UserDisciplinaryEventArchiveTable.AddRangeAsync(eventsToArchive);

                        await db.SaveChangesAsync();

                        return(true);
                    }
                    else
                    {
                        return(false);
                    }
                }
            }
            catch (Exception ex)
            {
                ExceptionManager.HandleException($"{typeof(StorageManager).GetType().FullName}: {ExceptionManager.GetAsyncMethodName()}", ex);
                throw ex;
            }
        }
        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;
            }
        }