public async Task <IActionResult> UpdateCategory(int id, IFormCollection form) { try { FactFileCategory category = await _Db.FactFileCategories.FindAsync(id); if (category == null) { return(NotFound(new ResponseHelper("Something went wrong. If the problem persists, please contact the developers."))); } string newName = form.Str("name"); if (string.IsNullOrEmpty(newName)) { return(BadRequest(new ResponseHelper("The category name must not be null"))); } category.Name = newName; await _Db.SaveChangesAsync(); return(Ok()); } catch (Exception ex) { _Logger.LogError("Error updating entry name", 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> 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> GetCategoryDetails(int id) { try { FactFileCategory category = await _Db.FactFileCategories .Include(cat => cat.FactFileEntries) .ThenInclude(entry => entry.MainImage) .Where(cat => cat.Id == id) .FirstOrDefaultAsync(); if (category == null) { return(NotFound(new ResponseHelper("Something went wrong, please contact the developers"))); } return(Ok(new { category.Active, category.Id, category.Name, Entries = category.FactFileEntries.OrderBy(entry => entry.PrimaryName).Select(entry => new { entry.Id, entry.PrimaryName, entry.MainImage.Filename, entry.Active }) })); } catch (Exception ex) { _Logger.LogError("Error retrieving category details", ex.Message); _Logger.LogError(ex.StackTrace); return(BadRequest(new ResponseHelper("Something went wrong, please try again in a few minutes.", ex.Message))); } }