private void AddNewBook(BookMobilePostDto bookDto) { var newBook = new Book { Title = bookDto.Title, Author = bookDto.Author, Code = bookDto.Code, Url = bookDto.Url, OrganizationId = bookDto.OrganizationId, CreatedBy = bookDto.ApplicationUserId, ModifiedBy = bookDto.ApplicationUserId, Created = DateTime.UtcNow, Modified = DateTime.UtcNow }; _bookDbSet.Add(newBook); var newBookOffice = new BookOffice { Book = newBook, OfficeId = bookDto.OfficeId, OrganizationId = bookDto.OrganizationId, Created = DateTime.UtcNow, Modified = DateTime.UtcNow, CreatedBy = bookDto.ApplicationUserId, ModifiedBy = bookDto.ApplicationUserId, Quantity = OneBook }; _bookOfficeDbSet.Add(newBookOffice); }
public async Task PostBookAsync(BookMobilePostDto bookDto) { await _newBookLock.WaitAsync(); try { var book = await _bookDbSet .Include(b => b.BookOffices) .FirstOrDefaultAsync(b => b.Code == bookDto.Code && b.OrganizationId == bookDto.OrganizationId); if (book == null) { AddNewBook(bookDto); } else { await ValidatePostBookAsync(bookDto, book); AddBookToOtherOffice(bookDto, book); } await _uow.SaveChangesAsync(false); } finally { _newBookLock.Release(); } }
public void Should_Return_If_Adds_Book_To_Not_Existing_Office() { var bookMobilePostDto = new BookMobilePostDto { Code = "1", OrganizationId = 1, OfficeId = 5 }; Assert.ThrowsAsync <BookException>(async() => await _bookService.PostBookAsync(bookMobilePostDto)); }
public void Should_Return_If_Post_New_Book_Create_Duplicate_In_Book_Office() { var bookMobilePostDto = new BookMobilePostDto { Code = "1", OrganizationId = 1, OfficeId = 1 }; Assert.ThrowsAsync <BookException>(async() => await _bookService.PostBookAsync(bookMobilePostDto)); }
private async Task ValidatePostBookAsync(BookMobilePostDto bookDto, Book book) { var bookExistsInChosenOffice = book .BookOffices .Any((l => l.OfficeId == bookDto.OfficeId)); _serviceValidator.ThrowIfBookExist(bookExistsInChosenOffice); var officeExists = await _officeDbSet.AnyAsync(o => o.Id == bookDto.OfficeId); _serviceValidator.ThrowIfOfficeDoesNotExist(officeExists); }
public async Task Should_Return_If_Post_New_Book_Does_Not_Add_Book_To_Another_Office() { var bookMobilePostDto = new BookMobilePostDto { Code = "1", OrganizationId = 1, OfficeId = 2 }; await _bookService.PostBookAsync(bookMobilePostDto); _bookOfficesDbSet.Received(1).Add(Arg.Any <BookOffice>()); }
private void AddBookToOtherOffice(BookMobilePostDto bookDto, Book book) { var newBookOffice = new BookOffice { BookId = book.Id, OfficeId = bookDto.OfficeId, OrganizationId = bookDto.OrganizationId, Created = DateTime.UtcNow, Modified = DateTime.UtcNow, CreatedBy = bookDto.ApplicationUserId, ModifiedBy = bookDto.ApplicationUserId, Quantity = OneBook }; _bookOfficeDbSet.Add(newBookOffice); }