public void Put(PutAuthorView author) { Author authorModel = _authorRepository.Get(author.Id); authorModel.Name = author.Name; authorModel.Birthday = author.Birthday; authorModel.Deathday = author.Deathday; _authorRepository.Update(authorModel); IEnumerable <int> selectedBooks = author.Books.Select(id => id.Id); List <BookAuthor> oldAuthorBooks = _bookInAuthorRepository.GetAllByAuthorId(author.Id); var oldAuthorBooksWithRelation = oldAuthorBooks.Where(x => x.BookId != 0).ToList(); var intersectBooks = oldAuthorBooksWithRelation.Select(x => x.BookId).Intersect(selectedBooks).ToList(); var exceptBooks = oldAuthorBooksWithRelation.Select(x => x.BookId).Except(selectedBooks).ToList(); _bookInAuthorRepository.Delete(oldAuthorBooks.Where(x => exceptBooks.Contains(x.BookId)).ToList()); var currentAuthorBooks = new List <BookAuthor>(); foreach (var newBookId in selectedBooks) { if (intersectBooks.FirstOrDefault(x => x == newBookId) == 0) { currentAuthorBooks.Add(new BookAuthor() { AuthorId = authorModel.Id, BookId = newBookId }); } } _bookInAuthorRepository.Insert(currentAuthorBooks); }
public void Put(PutBookView book) { Book bookModel = _bookRepository.Get(book.Id); bookModel.Name = book.Name; bookModel.YearOfPublishing = book.YearOfPublishing; _bookRepository.Update(bookModel); IEnumerable <int> selectedAuthors = book.Authors.Select(id => id.Id); List <BookAuthor> oldBookAuthors = _bookInAuthorRepository.GetAllByBookId(book.Id); var oldBookAuthorsWithRelation = oldBookAuthors.Where(x => x.AuthorId != 0).ToList(); var intersectAuthors = oldBookAuthorsWithRelation.Select(x => x.AuthorId).Intersect(selectedAuthors).ToList(); var exceptAuthors = oldBookAuthorsWithRelation.Select(x => x.AuthorId).Except(selectedAuthors).ToList(); _bookInAuthorRepository.Delete(oldBookAuthors.Where(x => exceptAuthors.Contains(x.AuthorId)).ToList()); var currentBookAuthors = new List <BookAuthor>(); foreach (var newAuthorId in selectedAuthors) { if (intersectAuthors.FirstOrDefault(x => x == newAuthorId) == 0) { currentBookAuthors.Add(new BookAuthor() { BookId = bookModel.Id, AuthorId = newAuthorId }); } } _bookInAuthorRepository.Insert(currentBookAuthors); IEnumerable <int> selectedPblicationHouses = book.PublicationHouses.Select(id => id.Id); List <BookPublicationHouse> oldPublicationHouses = _bookInPublicationHouseRepository.GetAllByBookId(book.Id); var oldBookPublicationHousesWithRelation = oldPublicationHouses.Where(x => x.PublicationHouseId != 0).ToList(); var intersectPublicationHouses = oldBookPublicationHousesWithRelation.Select(x => x.PublicationHouseId).Intersect(selectedPblicationHouses).ToList(); var exceptPublicationHouses = oldBookPublicationHousesWithRelation.Select(x => x.PublicationHouseId).Except(selectedPblicationHouses).ToList(); _bookInPublicationHouseRepository.Delete(oldPublicationHouses.Where(x => exceptPublicationHouses.Contains(x.PublicationHouseId)).ToList()); var currentBookPublicationHouses = new List <BookPublicationHouse>(); foreach (var newPublicationHouseId in selectedPblicationHouses) { if (intersectPublicationHouses.FirstOrDefault(x => x == newPublicationHouseId) == 0) { currentBookPublicationHouses.Add(new BookPublicationHouse() { BookId = bookModel.Id, PublicationHouseId = newPublicationHouseId }); } } _bookInPublicationHouseRepository.Insert(currentBookPublicationHouses); }