Exemplo n.º 1
0
        public async Task <OperationResult <LendingRecord> > Lend(int bookId, int lenderId, DateTime @from, DateTime to)
        {
            var bookResult = await _bookRepository.GetAsync(bookId);

            if (!bookResult.Success)
            {
                return(new OperationResult <LendingRecord>("Book not found!", bookResult.ErrorMessages));
            }

            var lenderResult = await _lenderRepository.GetAsync(lenderId);

            if (!lenderResult.Success)
            {
                return(new OperationResult <LendingRecord>("Lender not found!", lenderResult.ErrorMessages));
            }

            var book   = bookResult.Entity;
            var record = new LendingRecord
            {
                From     = @from,
                To       = to,
                BookId   = bookId,
                LenderId = lenderId
            };

            var createResult = await _lendingRepository.CreateAsync(record);

            if (!createResult.Success)
            {
                return(new OperationResult <LendingRecord>("Creation of lending record failed!", createResult.ErrorMessages));
            }

            book.IsAvailable = false;
            var updateResult = await _bookRepository.UpdateAsync(book);

            if (!updateResult.Success)
            {
                return(new OperationResult <LendingRecord>("Updating book availability failed!", updateResult.ErrorMessages));
            }

            return(createResult);
        }