예제 #1
0
        public void ReturnBook(BookId bookId, BookAmount amount)
        {
            var book = Books.First(a => a.BookId == bookId);

            if (book.BookAmount == amount)
            {
                Books.RemoveAll(a => a.BookId == bookId);
            }
            else if (book.BookAmount > amount)
            {
                Books.RemoveAll(a => a.BookId == bookId);
                Books.Add(new BookRecord(book.BookId, book.BookAmount - amount, book.Title));
            }
            else
            {
                throw new ArgumentException($"Cannot return book with title {book.Title.Value}. Amount to return is higher than {book.BookAmount.Amount}");
            }

            AddEvent(new BookRemovedFromLibraryRecord(bookId, amount.Amount, (LibraryRecordId)Id));

            if (ReturnDate < DateTime.UtcNow)
            {
                var oldFineValue = ReturnFine.Value;
                var daysBetweenTodayAndReturnDate = ((DateTime.UtcNow - ReturnDate)).Days;
                var newFineValue = daysBetweenTodayAndReturnDate * 10;
                ReturnFine = new ReturnFine(oldFineValue + newFineValue);
            }

            if (ReturnFine.Value == 0)
            {
                IsClosed = true;
            }
        }
예제 #2
0
 private Book(BookId id, string title, string description, AuthorId authorId, AuthorFullName authorName)
 {
     Id          = id;
     Title       = new BookTitle(title);
     Description = description;
     AuthorId    = authorId;
     AuthorName  = authorName;
     State       = BookState.InDatabase;
     Amount      = new BookAmount(0);
 }
예제 #3
0
 public BookRecord(BookId bookId, BookAmount bookAmount, BookTitle title)
 {
     BookId     = bookId;
     BookAmount = bookAmount;
     Title      = title;
 }
예제 #4
0
 public AuthorBookRecord(BookId bookId, BookTitle title)
 {
     BookId = bookId;
     Title  = title;
 }