예제 #1
0
        public void TakeBook(BookTakeDTO bookDTO)
        {
            MobileBookOfficeLogsDTO officeBookWithLogs;

            lock (takeBookLock)
            {
                officeBookWithLogs = _bookOfficesDbSet
                                     .Include(b => b.Book)
                                     .Include(b => b.BookLogs)
                                     .Where(b => b.OrganizationId == bookDTO.OrganizationId &&
                                            b.Id == bookDTO.BookOfficeId)
                                     .Select(MapOfficebookWithLogsToDTO())
                                     .FirstOrDefault();

                ValidateTakeBook(bookDTO, officeBookWithLogs);

                BorrowBook(officeBookWithLogs, bookDTO);
            }

            var book = new TakenBookDTO
            {
                UserId         = bookDTO.ApplicationUserId,
                OrganizationId = bookDTO.OrganizationId,
                BookOfficeId   = bookDTO.BookOfficeId,
                OfficeId       = officeBookWithLogs.OfficeId,
                Author         = officeBookWithLogs.Author,
                Title          = officeBookWithLogs.Title
            };

            _asyncRunner.Run <IBooksNotificationService>(n => n.SendEmail(book), _uow.ConnectionName);
        }
예제 #2
0
        private void ValidateTakeBook(BookTakeDTO bookDTO, MobileBookOfficeLogsDTO officeBookWithLogs)
        {
            var applicationUser = _userDbSet
                                  .FirstOrDefault(u => u.Id == bookDTO.ApplicationUserId);

            _serviceValidator.ThrowIfUserDoesNotExist(applicationUser);
            _serviceValidator.ThrowIfBookDoesNotExist(officeBookWithLogs != null);
            _serviceValidator.ChecksIfUserHasAlreadyBorrowedSameBook(officeBookWithLogs.LogsUserIDs, bookDTO.ApplicationUserId);
            _serviceValidator.ThrowIfBookIsAlreadyBorrowed(officeBookWithLogs);
        }
예제 #3
0
        public void TakeBook(int bookOfficeId, UserAndOrganizationDTO userAndOrg)
        {
            var bookDTO = new BookTakeDTO
            {
                ApplicationUserId = userAndOrg.UserId,
                BookOfficeId      = bookOfficeId,
                OrganizationId    = userAndOrg.OrganizationId
            };

            TakeBook(bookDTO);
        }
예제 #4
0
        private void BorrowBook(MobileBookOfficeLogsDTO officeBookWithLogs, BookTakeDTO bookDTO)
        {
            var bookLog = new BookLog()
            {
                ApplicationUserId = bookDTO.ApplicationUserId,
                BookOfficeId      = officeBookWithLogs.BookOfficeId,
                ModifiedBy        = bookDTO.ApplicationUserId,
                Modified          = DateTime.UtcNow,
                TakenFrom         = DateTime.UtcNow,
                Created           = DateTime.UtcNow,
                CreatedBy         = bookDTO.ApplicationUserId,
                OrganizationId    = bookDTO.OrganizationId,
            };

            _bookLogsDbSet.Add(bookLog);
            _uow.SaveChanges(false);
        }
예제 #5
0
        public void Should_Throw_On_Take_Book_When_No_Users_Exist()
        {
            MockBooksByOffice();

            _userDbSet.SetDbSetData(new List <ApplicationUser>());
            var bookTake = new BookTakeDTO()
            {
                ApplicationUserId = "testUser1",
                BookOfficeId      = 1,
                OrganizationId    = 2
            };

            _validationService
            .When(x => x.ThrowIfUserDoesNotExist(null))
            .Do(x => { throw new BookException("ThrowIfUserDoesNotExist"); });

            Assert.Throws <BookException>(() => _bookService.TakeBook(bookTake));
        }
예제 #6
0
        public void Should_Add_Correct_Data_To_Logs_On_Take_Book()
        {
            MockCreateNewBook();
            MockBooksByOffice();
            MockApplicationUsers();
            MockDeleteBookEntities();

            var takeBook = new BookTakeDTO()
            {
                ApplicationUserId = "testUser1",
                BookOfficeId      = 1,
                OrganizationId    = 2
            };

            _bookService.TakeBook(takeBook);

            _bookLogsDbSet.Received().Add(Arg.Is <BookLog>(b => b.OrganizationId == 2 && b.ApplicationUserId == "testUser1" && b.OrganizationId == 2));
        }
예제 #7
0
        public void TakeBook(BookTakeDTO bookDTO)
        {
            MobileBookOfficeLogsDTO officeBookWithLogs;

            lock (takeBookLock)
            {
                officeBookWithLogs = _bookOfficesDbSet
                                     .Include(b => b.Book)
                                     .Include(b => b.BookLogs)
                                     .Where(b => b.OrganizationId == bookDTO.OrganizationId &&
                                            b.Id == bookDTO.BookOfficeId)
                                     .Select(MapOfficebookWithLogsToDTO())
                                     .FirstOrDefault();

                ValidateTakeBook(bookDTO, officeBookWithLogs);

                BorrowBook(officeBookWithLogs, bookDTO);
            }
        }