public ActionResult Edit(int pId, string inputTitle, int inputMetal, int inputRock, int inputPop, int inputJazz) { //genrePercentage e Dictionary => ako го сменим с List<string>, трябва да edit-нем EditPlaylist() в PlaylistService var genres = new Dictionary <string, int>(); genres.Add("metal", inputMetal); genres.Add("rock", inputRock); genres.Add("pop", inputPop); genres.Add("jazz", inputJazz); var editedPlaylist = new EditPlaylistDTO() { Id = pId, Title = inputTitle, GenrePercentage = genres }; var result = this.service.EditPlaylistAsync(editedPlaylist).Result; if (result == false) { return(RedirectToAction("Details", new { id = pId, err = TempData["Error"] = "Playlist not edited" })); } return(RedirectToAction("Details", new { id = pId, msg = TempData["Msg"] = "Playlist edited" })); }
public async Task <PlaylistDTO> EditPlaylist(EditPlaylistDTO editPlaylistDTO) { if (editPlaylistDTO.Id == null) { throw new ArgumentNullException(); } var playlist = await _appDbContext.Playlists .Include(t => t.TrackPlaylists) .ThenInclude(t => t.Track) .Where(p => p.IsDeleted == false || editPlaylistDTO.Revive == true) .FirstOrDefaultAsync(p => p.Id == editPlaylistDTO.Id); if (playlist == null) { throw new ArgumentNullException(); } if (editPlaylistDTO.Revive == true) { playlist.IsDeleted = false; } playlist.Title = editPlaylistDTO.Title; _appDbContext.Update(playlist); await _appDbContext.SaveChangesAsync(); return(_mapper.Map <PlaylistDTO>(playlist)); }
public IActionResult UpdatePlaylist(int id, [FromBody] EditPlaylistDTO model) { if (id < 1 || model == null) { return(BadRequest()); } var userId = int.Parse(userManager.GetUserId(HttpContext.User)); var playlist = new EditPlaylistDTO { Id = id, Title = model.Title, GenrePercentage = model.GenrePercentage, UserId = userId }; var result = this.playlistService.EditPlaylistAsync(playlist).Result; if (result == false) { return(BadRequest()); } return(Ok()); }
public async Task Throw_If_NoPlaylistsExist() { //Arrange var options = Utils.GetOptions(nameof(Throw_If_NoPlaylistsExist)); var editPlaylistDTO = new EditPlaylistDTO { Id = 7, Title = "Home and back", GenrePercentage = new Dictionary <string, int>() { { "rock", 0 }, { "metal", 0 }, { "pop", 100 }, { "jazz", 0 } }, UserId = 2 }; var dateTimeProviderMock = new Mock <IDateTimeProvider>(); var mockImageService = new Mock <IPixaBayImageService>(); //Act & Assert using (var assertContext = new RidePalDbContext(options)) { var sut = new PlaylistService(assertContext, dateTimeProviderMock.Object, mockImageService.Object); await Assert.ThrowsExceptionAsync <ArgumentNullException>(() => sut.EditPlaylistAsync(editPlaylistDTO)); } }
/// <summary> /// Edits a playlist's title and/or genres by provided user's input /// </summary> /// <param name="editPlaylistDTO">DTO of the playlist with the new data</param> /// <returns>DTO of the edited playlist</returns> public async Task <bool> EditPlaylistAsync(EditPlaylistDTO editPlaylistDTO) { if (editPlaylistDTO == null) { throw new ArgumentNullException("No playlist data provided."); } var playlist = await this.context.Playlists .FirstOrDefaultAsync(playlist => playlist.Id == editPlaylistDTO.Id) ?? throw new ArgumentNullException("Playlist not found."); var genresToAdd = editPlaylistDTO.GenrePercentage.Where(g => g.Value > 0).Select(g => g.Key).ToList(); var allGenres = await this.context.Genres.ToListAsync(); var playlistGenreEntries = await this.context.PlaylistGenres .Include(plg => plg.Genre) .Where(plg => plg.PlaylistId == editPlaylistDTO.Id) .ToListAsync(); foreach (var genre in playlistGenreEntries) { if (genresToAdd.FirstOrDefault(g => g == genre.Genre.Name) != null) { if (genre.IsDeleted == true) { genre.IsDeleted = false; } } else { genre.IsDeleted = true; } } List <PlaylistGenre> newEntries = new List <PlaylistGenre>(); foreach (var item in genresToAdd) { if (!playlistGenreEntries.Select(pge => pge.Genre.Name).Contains(item)) { var genreId = allGenres.FirstOrDefault(g => g.Name == item).Id; newEntries.Add(new PlaylistGenre(genreId, editPlaylistDTO.Id)); } } if (editPlaylistDTO.Title != null) { playlist.Title = editPlaylistDTO.Title; } if (genresToAdd != null) { playlist.GenresCount = genresToAdd.Count(); } playlist.ModifiedOn = this.dateTimeProvider.GetDateTime(); await this.context.AddRangeAsync(newEntries); await this.context.SaveChangesAsync(); var playlistFromDB = this.context.Playlists .Include(p => p.Genres) .FirstOrDefaultAsync(playlist => playlist.Id == editPlaylistDTO.Id).Result ?? throw new ArgumentNullException("Playlist from database not found."); if (editPlaylistDTO.Title != null && playlistFromDB.Title != editPlaylistDTO.Title) { return(false); } var playlistFromDbGenreNames = await GetPlaylistGenresAsStringAsync(playlist.Id); foreach (var gen in genresToAdd) { if (!playlistFromDbGenreNames.Contains(gen)) { return(false); } } return(true); }
public async Task ReturnTrue_WhenParamsAreValid() { // Arrange var options = Utils.GetOptions(nameof(ReturnTrue_WhenParamsAreValid)); Playlist firstPlaylist = new Playlist { Id = 5, Title = "Home", PlaylistPlaytime = 5524, UserId = 2, Rank = 552348, IsDeleted = false, }; Playlist secondPlaylist = new Playlist { Id = 6, Title = "Metal", PlaylistPlaytime = 5024, UserId = 2, Rank = 490258, IsDeleted = false }; var editPlaylistDTO = new EditPlaylistDTO { Id = 5, Title = "Home and back", GenrePercentage = new Dictionary <string, int>() { { "rock", 0 }, { "metal", 0 }, { "pop", 100 }, { "jazz", 0 } }, UserId = 2 }; Genre rock = new Genre { Id = 1, Name = "rock" }; Genre metal = new Genre { Id = 2, Name = "metal" }; Genre pop = new Genre { Id = 3, Name = "pop" }; Genre jazz = new Genre { Id = 4, Name = "jazz" }; var firstPlaylistGenre = new PlaylistGenre(1, 5); var secondPlaylistGenre = new PlaylistGenre(2, 5); var updatedPlaylistDTO = new PlaylistDTO { Id = 5, Title = "Home and back", PlaylistPlaytime = 5524, UserId = 2, Rank = 552348, GenresCount = 1 }; var dateTimeProviderMock = new Mock <IDateTimeProvider>(); var mockImageService = new Mock <IPixaBayImageService>(); using (var arrangeContext = new RidePalDbContext(options)) { arrangeContext.Genres.Add(metal); arrangeContext.Genres.Add(rock); arrangeContext.Genres.Add(pop); arrangeContext.Genres.Add(jazz); arrangeContext.Playlists.Add(firstPlaylist); arrangeContext.Playlists.Add(secondPlaylist); arrangeContext.PlaylistGenres.Add(firstPlaylistGenre); arrangeContext.PlaylistGenres.Add(secondPlaylistGenre); arrangeContext.SaveChanges(); } using (var assertContext = new RidePalDbContext(options)) { var sut = new PlaylistService(assertContext, dateTimeProviderMock.Object, mockImageService.Object); // Act var result = await sut.EditPlaylistAsync(editPlaylistDTO); var updatedPlaylistFromDb = await sut.GetPlaylistByIdAsync(5); //Assert Assert.IsTrue(result); Assert.AreEqual(updatedPlaylistDTO.Id, updatedPlaylistFromDb.Id); Assert.AreEqual(updatedPlaylistDTO.Title, updatedPlaylistFromDb.Title); Assert.AreEqual(updatedPlaylistDTO.GenresCount, updatedPlaylistFromDb.GenresCount); } }