public async Task <BookCreateEditModel> CreateAsync(BookCreateEditModel model) { using (var context = _db) { using (var transaction = context.Database.BeginTransaction()) { try { model.Id = Guid.NewGuid(); var book = _mapper.Map <Book>(model); if (book == null) { throw new Exception("Bad Request - Error at mapping DTO"); } _db.Books.Add(book); await _db.SaveChangesAsync(); transaction.Commit(); return(model); } catch (Exception e) { transaction.Rollback(); Console.WriteLine(e); throw; } } } }
public async Task <IActionResult> PostBook([FromBody] BookCreateEditModel book) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } var result = await _service.CreateAsync(book); return(CreatedAtAction("GetBook", new { id = book.Id }, result)); }
public async Task <IActionResult> PutBook([FromRoute] Guid id, [FromBody] BookCreateEditModel book) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } if (id != book.Id) { return(BadRequest()); } try { var model = await _service.UpdateAsync(id, book); } catch (Exception ex) { return(BadRequest(ex.Message)); } return(NoContent()); }
public async Task <BookCreateEditModel> UpdateAsync(Guid id, BookCreateEditModel model) { using (var context = _db) { using (var transaction = context.Database.BeginTransaction()) { try { var book = new Book { Id = id }; var bookModel = _mapper.Map <Book>(model); if (bookModel == null) { throw new Exception("Bad Request - Error at mapping DTO"); } //book.BookAuthors = model.AuthorsId.Select(ba => new BookAuthor { BookId = book.Id, AuthorId = ba }).ToList(); _db.Books.Attach(book); _db.Entry(book).CurrentValues.SetValues(bookModel); await _db.SaveChangesAsync(); var bookAuthors = _db.BookAuthors.Where(ba => ba.BookId == book.Id).Select(p => p.AuthorId).ToList(); foreach (var bookAuthor in bookModel.BookAuthors) { if (!bookAuthors.Contains(bookAuthor.AuthorId)) { _db.BookAuthors.Add(bookAuthor); await _db.SaveChangesAsync(); } } var toRemove = bookModel.BookAuthors.Select(p => p.AuthorId); foreach (var bookAuthorId in bookAuthors) { if (!toRemove.Contains(bookAuthorId)) { _db.BookAuthors.Remove(new BookAuthor { BookId = book.Id, AuthorId = bookAuthorId }); await _db.SaveChangesAsync(); } } transaction.Commit(); return(model); } catch (DbUpdateConcurrencyException e) { if (!BooksExists(model.Id)) { transaction.Rollback(); Console.WriteLine(e); return(null); } throw; } catch (Exception e) { transaction.Rollback(); Console.WriteLine(e); throw; } } } }