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); }
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); }
public void TakeBook(int bookOfficeId, UserAndOrganizationDTO userAndOrg) { var bookDTO = new BookTakeDTO { ApplicationUserId = userAndOrg.UserId, BookOfficeId = bookOfficeId, OrganizationId = userAndOrg.OrganizationId }; TakeBook(bookDTO); }
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); }
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)); }
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)); }
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); } }