예제 #1
0
        public Book DeleteBook(int id, string path)
        {
            var book = _dbContext.Books
                       .Include(b => b.BookCopies)
                       .Where(b => b.Id == id)
                       .SingleOrDefault();

            if (book == null)
            {
                throw new KeyNotFoundException("Book not found.");
            }
            else
            {
                if (!IsBookAvailable(book.Id))
                {
                    throw new BookNotAvailableException("The specified book is currently involved in some loans.");
                }

                foreach (var bookCopy in book.BookCopies)
                {
                    SetNullOnBookCopyCascade(bookCopy.Id);
                }

                File.Delete(path);

                _dbContext.Books.Remove(book);
                _dbContext.SaveChanges();

                return(book);
            }
        }
예제 #2
0
 public void CreateBook(BookSubmitModel bookSubmitModel)
 {
     _libraryDbContext.Books.Add(new Book()
     {
         Title = bookSubmitModel.Title
     });
     _libraryDbContext.SaveChanges();
 }
예제 #3
0
        public Category CreateCategory(string name)
        {
            VerifyCategoryName(name);

            Category category = _dbContext.Categories.Add(new Category
            {
                Name = name.Trim()
            });

            _dbContext.SaveChanges();

            return(category);
        }
        public void ApproveLoanRequest(int bookCopyId, int loanId, int daysNumberForLateApprovedLoans)
        {
            // Find loan by ID.
            var loanToApprove = _dbContext.Loans.Find(loanId);

            // Check if ID of BookCopy corresponds to the ID of book.
            bool bookCopyIdCorresponds = _dbContext.Books
                                         .Include(b => b.BookCopies)
                                         .Single(b => b.Id == loanToApprove.BookId)
                                         .BookCopies
                                         .Any(bc => bc.Id == bookCopyId);

            // Check if the book copy is available for loan.
            bool isNotAvaialble =
                _dbContext.Loans
                .Where(l => l.BookCopyId == bookCopyId &&
                       (l.Status == LoanStatus.Approved || l.Status == LoanStatus.InProgress))
                .Any();

            if (isNotAvaialble)
            {
                throw new BookCopyNotAvailableException();
            }

            if (bookCopyIdCorresponds)
            {
                // Set status to Approved.
                loanToApprove.BookCopyId          = bookCopyId;
                loanToApprove.Status              = LoanStatus.Approved;
                loanToApprove.BookPickUpLimitDate = DateTime.Now.AddDays(daysNumberForLateApprovedLoans);
                loanToApprove.ApprovingDate       = DateTime.Now;

                _dbContext.SaveChanges();
            }
            else
            {
                throw new InvalidBookCopyIdException();
            }
        }
예제 #5
0
 public void Save()
 {
     context.SaveChanges();
 }