public async Task <IActionResult> DeleteTrack(int trackId) { Track track = await _Db.Tracks.Include(t => t.Activities).ThenInclude(a => a.ActivityImages).Where(t => t.Id == trackId).FirstOrDefaultAsync(); if (track == null) { return(NotFound(new ResponseHelper("Something went wrong. Please refresh the page and try again.", "Could not find track in database"))); } //using(var transaction = await _Db.Database.BeginTransactionAsync()) //{ foreach (Activity activity in track.Activities) { _Db.RemoveRange(activity.ActivityImages); _Db.Remove(activity); } _Db.Remove(track); await _Db.SaveChangesAsync(); // transaction.Commit(); //} return(Ok()); }
public async Task <IActionResult> DeleteQuestion(int quizId, int questionId) { Quiz quiz = await _Db.Quizzes.FindAsync(quizId); QuizQuestion question = await _Db.QuizQuestions.FindAsync(questionId); if (question == null) { return(NotFound(new ResponseHelper("Something went wrong. Please refresh your browser and try again.", "Unable to find question in database"))); } using (var transaction = await _Db.Database.BeginTransactionAsync()) { quiz.UpdatedAt = DateTime.UtcNow; question.CorrectAnswerId = null; await _Db.SaveChangesAsync(); _Db.Remove(question); await _Db.SaveChangesAsync(); transaction.Commit(); } return(Ok()); }
public async Task <IActionResult> DeleteCategory(int id) { try { FactFileCategory category = await _Db.FactFileCategories .Include(cat => cat.FactFileEntries) .ThenInclude(entry => entry.Activities) .Include(cat => cat.FactFileEntries) .ThenInclude(entry => entry.FactFileEntryImages) .Include(cat => cat.FactFileEntries) .ThenInclude(entry => entry.FactFileNuggets) .Where(cat => cat.Id == id) .FirstOrDefaultAsync(); if (category == null) { return(NotFound(new ResponseHelper("Something went wrong. If the problem persists, please contact the developers"))); } if (category.FactFileEntries.Any(entry => entry.Activities.Count > 0)) { StringBuilder message = new StringBuilder("Unable to delete the category as the following entries are linked to guided walk actvities:\n"); foreach (FactFileEntry entry in category.FactFileEntries) { if (entry.Activities.Count > 0) { message.AppendLine(entry.PrimaryName + ", "); } } return(BadRequest(new ResponseHelper(message.ToString()))); } // Delete all fact file entry images and nuggets first (can't use cascade delete due to EF Core) foreach (FactFileEntry entry in category.FactFileEntries) { _Db.RemoveRange(entry.FactFileEntryImages); _Db.RemoveRange(entry.FactFileNuggets); } _Db.Remove(category); await _Db.SaveChangesAsync(); return(Ok()); } catch (Exception ex) { _Logger.LogError("Error deleting category", ex.Message); _Logger.LogError(ex.StackTrace); return(BadRequest(new ResponseHelper("Something went wrong, please try again in a few minutes.", ex.Message))); } }
public async Task <IActionResult> DeleteItem(int id) { try { NavItem itemToDelete = await _Db.NavItems.FindAsync(id); if (itemToDelete == null) { return(NotFound(new ResponseHelper("Something went wrong, please try again later"))); } await _Db.Entry(itemToDelete).Collection(c => c.NavItemPages).LoadAsync(); _Db.Remove(itemToDelete); if (itemToDelete.NavItemPages != null) { _Db.RemoveRange(itemToDelete.NavItemPages); } await _Db.SaveChangesAsync(); return(Ok()); } catch (Exception ex) { _Logger.LogError("Error deleting navlink", ex.Message); _Logger.LogError(ex.StackTrace); return(BadRequest(new ResponseHelper("Something went wrong, please try again later.", ex.Message))); } }
//DELETE: /admin/pages/{pageId} public async Task <IActionResult> Delete(int pageId) { try { var page = await _Db.Pages.Where(c => c.Id == pageId) .Include(p => p.PageRevisions) .ThenInclude(pr => pr.RevisionTextComponents) .ThenInclude(rtf => rtf.TextComponent) .FirstOrDefaultAsync(); if (page == null) { return(NotFound()); } // First, mark all text fields for removal foreach (PageRevision rev in page.PageRevisions) { foreach (RevisionTextComponent rtf in rev.RevisionTextComponents) { _Db.Remove(rtf.TextComponent); } _Db.Remove(rev); } _Db.Remove(page); await _Db.SaveChangesAsync(); _Logger.LogDebug("Page {0} has been deleted", page.Name); return(Ok(Url.Action( "Index", "Page", new { area = "admin-portal,web", filter = page.Section.ToString() }) )); } catch (Exception ex) { _Logger.LogError("Error deleting page {0}: {1}", pageId, ex.Message); _Logger.LogError(ex.StackTrace); return(BadRequest(new ResponseHelper("Something went wrong, please try again later", ex.Message))); } }
public async Task <IActionResult> Delete(int id) { try { BaseMedia media = await _Db.Media.FindAsync(id); if (media == null) { return(NotFound("The requested media file does not exist.")); } // Todo: Check whether the media file is being used in the website or app // and prevent deletion if so. Dictionary <string, HashSet <string> > usages = media.GetUsages(_Db); // If the usages dictionary has keys, file is used if (usages.Count > 0) { return(BadRequest(new ResponseHelper("This file cannot be deleted as it is in use. Remove usages and try again."))); } // Otherwise, we can go ahead and delete if (media is ImageMedia) { // Delete the directory containing image versions string dirPath = Path.Combine("Storage", "Media", "Images", Path.GetFileNameWithoutExtension(media.Filename)); try { Directory.Delete(dirPath, recursive: true); } catch (DirectoryNotFoundException) { _Logger.LogWarning("While deleting image {0}: Version directory not found. Continuing.", id); } } // Finally, delete the media file itself System.IO.File.Delete(media.FilePath); // And remove its record in the database _Db.Remove(media); await _Db.SaveChangesAsync(); _Logger.LogDebug("Media file {0} deleted", id); return(Ok()); } catch (Exception ex) { _Logger.LogError("Error deleting media file {0}: {1}", id, ex.Message); _Logger.LogError(ex.StackTrace); return(BadRequest("Something went wrong, please try again later.")); } }
public async Task <IActionResult> Delete(int id) { Notice n = await _Database.Notices.FindAsync(id);; try { _Database.Remove(n); await _Database.SaveChangesAsync(); return(Ok($"{n.Title} has been deleted.")); } catch (Exception ex) { _Logger.LogError("Error deleting notice: {0}", ex.Message); _Logger.LogTrace(ex.Message); return(BadRequest(new ResponseHelper($"\"{n.Title}\" could not be deleted, please try again later.", ex.Message))); } }
public async Task <IActionResult> UnsubscribeFromChannel(int channelId) { try { _Db.Remove(new ChannelMembership { AccountId = User.AccountId(), NotificationChannelId = channelId }); _Logger.LogDebug("User {0} unsubscribed from notification channel {1}", User.AccountName(), channelId); await _Db.SaveChangesAsync(); return(Ok($"Unsubscribed from {_Db.NotificationChannels.Find(channelId).Name}")); } catch (Exception ex) { _Logger.LogError("Error unsubscribing {0} from notification channel ID {1}", User.AccountName(), channelId); _Logger.LogError(ex.StackTrace); return(BadRequest(new ResponseHelper("Something went wrong, please try again later", ex.Message))); } }