Ejemplo n.º 1
0
        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;
                    }
                }
            }
        }
Ejemplo n.º 2
0
        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));
        }
Ejemplo n.º 3
0
        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());
        }
Ejemplo n.º 4
0
        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;
                    }
                }
            }
        }