public ActionResult Add(BadgeCreateViewModel badge) { var newBadge = Mapper.Map <BadgeCreateViewModel, Badge>(badge); if (badge.Image == null) { _badgeRepository.Add(newBadge); } else { var fileName = Path.GetFileName(badge.Image.FileName); newBadge.ImageUrl = fileName; _badgeRepository.Add(newBadge); var path = GetImagePath(newBadge.Id); var imagePath = path + "/" + fileName; Directory.CreateDirectory(path); badge.Image.SaveAs(imagePath); } if (!Request.IsAjaxRequest()) { return(RedirectToAction("Index")); } var badgeViewModel = Mapper.Map <Badge, BadgeViewModel>(newBadge); return(PartialView("Partial/_BadgeSingle", badgeViewModel)); }
/// <summary> /// Bring the database into line with the badge classes found at runtime /// </summary> /// <returns>Set of valid badge classes to use when assigning badges</returns> public void SyncBadges() { try { GetBadgesByReflection(); // Turn the badge classes into a set of domain objects var badgesFromClasses = new Dictionary <Guid, Badge>(); foreach (var badgeType in _badges.Keys) { foreach (var badgeClassMapping in _badges[badgeType]) { if (!badgesFromClasses.ContainsKey(badgeClassMapping.DbBadge.Id)) { badgesFromClasses.Add(badgeClassMapping.DbBadge.Id, badgeClassMapping.DbBadge); } } } var badgesToDelete = new List <Badge>(); var badgesToInsert = new List <Badge>(); var dbBadges = _badgeRepository.GetAll().ToList(); // Find badges to delete - ie in database not in classes badgesToDelete.AddRange(dbBadges); foreach (var dbBadge in dbBadges) { if (badgesFromClasses.Values.Any(classBadge => classBadge.Id == dbBadge.Id)) { badgesToDelete.Remove(dbBadge); } } // Find badges to insert or update badgesToInsert.AddRange(badgesFromClasses.Values); foreach (var classBadge in badgesFromClasses.Values) { foreach (var dbBadge in dbBadges) { if (dbBadge.Id == classBadge.Id) { // This class is found in the database so it's not new, but might be an update if (dbBadge.Name != classBadge.Name) { dbBadge.Name = classBadge.Name; } if (dbBadge.Description != classBadge.Description) { dbBadge.Description = classBadge.Description; } if (dbBadge.DisplayName != classBadge.DisplayName) { dbBadge.DisplayName = classBadge.DisplayName; } if (dbBadge.Image != classBadge.Image) { dbBadge.Image = classBadge.Image; } if (dbBadge.AwardsPoints != classBadge.AwardsPoints) { dbBadge.AwardsPoints = classBadge.AwardsPoints; } // Remove it from insert collection, it's not new badgesToInsert.Remove(classBadge); } } } foreach (var badge in badgesToDelete) { _badgeRepository.Delete(badge); } foreach (var badge in badgesToInsert) { _badgeRepository.Add(badge); } } catch (Exception ex) { _loggingService.Error(ex); } }