public IActionResult Delete(string id, string data) { var idComponents = id.Split('.'); var entityType = idComponents[0]; var entityId = int.Parse(idComponents[1]); switch (entityType) { case "article": var article = articleRepository.GetById(entityId); articleRepository.Delete(article); break; case "carousel": var carousel = carouselRepository.GetById(entityId); carousel.Slides.Clear(); carouselRepository.Update(carousel); carouselRepository.Delete(carousel); break; case "slide": var slide = carouselSlideRepository.GetById(entityId); carouselSlideRepository.Delete(slide); break; default: return(Json(new { succss = false })); } return(Json(new { succss = true })); }
public void Update(IElementSettings settings, IUnitOfWork unitOfWork = null) { // If we don't have a unit of work in place, create one now so that we can rollback all changes in case of failure IUnitOfWork localUnitOfWork = unitOfWork == null?_unitOfWorkFactory.CreateUnitOfWork() : null; // Begin work try { // Validate slides CarouselSettings carouselSettings = (CarouselSettings)settings; foreach (CarouselSlide slide in carouselSettings.Slides) { _carouselValidator.ValidateSlide(slide); } // Get current carousel settings CarouselSettings currentCarouselSettings = (CarouselSettings)New(settings.TenantId); currentCarouselSettings.ElementId = settings.ElementId; _carouselRepository.Read(currentCarouselSettings, unitOfWork ?? localUnitOfWork); // Get slides to delete (i.e. slides that were in current settings, but not in the new settings) // Get slides with updated images List <CarouselSlide> slidesToDelete = new List <CarouselSlide>(); List <CarouselSlide> slidesWithUpdatedImages = new List <CarouselSlide>(); List <CarouselSlide> currentSlidesWithUpdatedImages = new List <CarouselSlide>(); Dictionary <long, CarouselSlide> slidesById = carouselSettings.Slides.Where(s => s.CarouselSlideId != 0).GroupBy(s => s.CarouselSlideId).ToDictionary(u => u.Key, u => u.First()); foreach (CarouselSlide currentSlide in currentCarouselSettings.Slides) { if (!slidesById.ContainsKey(currentSlide.CarouselSlideId)) { slidesToDelete.Add(currentSlide); } else { CarouselSlide slide = slidesById[currentSlide.CarouselSlideId]; if (slide.ImageUploadId != currentSlide.ImageUploadId) { slidesWithUpdatedImages.Add(slide); currentSlidesWithUpdatedImages.Add(currentSlide); } } } // Get new slides List <CarouselSlide> slidesToCreate = carouselSettings.Slides.Where(s => s.CarouselSlideId == 0).ToList(); // Commit new images slidesToCreate.AddRange(slidesWithUpdatedImages); foreach (CarouselSlide slide in slidesToCreate) { _uploadService.Commit(slide.ImageTenantId, slide.ThumbnailImageUploadId, GetCarouselSlideStorageHierarchy(slide.ElementId), unitOfWork ?? localUnitOfWork); _uploadService.Commit(slide.ImageTenantId, slide.PreviewImageUploadId, GetCarouselSlideStorageHierarchy(slide.ElementId), unitOfWork ?? localUnitOfWork); _uploadService.Commit(slide.ImageTenantId, slide.ImageUploadId, GetCarouselSlideStorageHierarchy(slide.ElementId), unitOfWork ?? localUnitOfWork); } // Update database _carouselRepository.Update((CarouselSettings)settings, unitOfWork ?? localUnitOfWork); // Delete uploads that are no longer required slidesToDelete.AddRange(currentSlidesWithUpdatedImages); foreach (CarouselSlide currentSlide in slidesToDelete) { _uploadService.Delete(currentSlide.ImageTenantId, currentSlide.ThumbnailImageUploadId, GetCarouselSlideStorageHierarchy(currentSlide.ElementId), unitOfWork ?? localUnitOfWork); _uploadService.Delete(currentSlide.ImageTenantId, currentSlide.PreviewImageUploadId, GetCarouselSlideStorageHierarchy(currentSlide.ElementId), unitOfWork ?? localUnitOfWork); _uploadService.Delete(currentSlide.ImageTenantId, currentSlide.ImageUploadId, GetCarouselSlideStorageHierarchy(currentSlide.ElementId), unitOfWork ?? localUnitOfWork); } // Commit work if local unit of work in place and return result if (localUnitOfWork != null) { localUnitOfWork.Commit(); } } catch (ValidationErrorException) { if (localUnitOfWork != null) { localUnitOfWork.Rollback(); } throw; } catch (Exception ex) { if (localUnitOfWork != null) { localUnitOfWork.Rollback(); } throw new ValidationErrorException(new ValidationError(null, ApplicationResource.UnexpectedErrorMessage), ex); } finally { if (localUnitOfWork != null) { localUnitOfWork.Dispose(); } } }