private void HandleFilms(WatchlistForUpdateDto src, Watchlist dest) { // remove films var filmsToRemove = dest.Films .Where(x => !src.Films.Select(x => x.FilmId).Contains(x.FilmId)).ToList(); foreach (var filmToRemove in filmsToRemove) { dest.Films.Remove(filmToRemove); } // update films foreach (var film in dest.Films.Where(x => src.Films.Select(x => x.FilmId).Contains(x.FilmId))) { var filmFromRequest = src.Films.FirstOrDefault(x => x.FilmId == film.FilmId); if (filmFromRequest != null) { film.Sequence = filmFromRequest.Sequence; film.IsWatched = filmFromRequest.IsWatched; } } // add films var filmsToAdd = src.Films.Where(f => !dest.Films.Any(x => x.FilmId == f.FilmId)).ToList() .Select(x => new FilmWatchlist { Sequence = x.Sequence, FilmId = x.FilmId, IsWatched = x.IsWatched }); foreach (var filmToAdd in filmsToAdd) { dest.Films.Add(filmToAdd); } }
public async Task <IActionResult> Update(int id, WatchlistForUpdateDto watchlistForUpdate) { await _watchlistValidatorService.ValidateForUpdate(id, watchlistForUpdate); var watchlist = await _watchlistService.Update(id, watchlistForUpdate); return(Ok(watchlist)); }
public async Task <WatchlistForDetailedDto> Update(int id, WatchlistForUpdateDto watchlistForUpdate) { var watchlist = await _uow.Repository <Domain.Entities.Watchlist>().FindOneAsync(new WatchlistWithFilmsSpecification(id)); _mapper.Map(watchlistForUpdate, watchlist); await _uow.SaveAsync(); return(await GetOne(watchlist.Id)); }
public async Task ValidateForUpdate(int id, WatchlistForUpdateDto watchlistForUpdate) { Validate(watchlistForUpdate); var watchlist = await _uow.Repository <Domain.Entities.Watchlist>().FindByIdAsync(id); if (watchlist == null) { throw new NotFoundException(nameof(Domain.Entities.Watchlist)); } if (_currentUserService.UserId != watchlist.UserId) { throw new ForbiddenException(); } ValidateSequence(watchlistForUpdate.Films.Select(x => x.Sequence).ToList()); await ValidateFilmIds(watchlistForUpdate.Films.Select(x => x.FilmId).ToList()); ThrowValidationErrorsIfNotEmpty(); }