Пример #1
0
        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);
        }
Пример #2
0
        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();
            }
        }
Пример #3
0
        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));
        }
Пример #4
0
        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));
        }
Пример #5
0
        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);
        }
Пример #6
0
        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>());
        }
Пример #7
0
        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);
        }