예제 #1
0
        /// <inheritdoc />
        public async Task <bool> RemoveAsync(int requestId)
        {
            var request = await _requestRepository.GetAll()
                          .Include(x => x.Book)
                          .Include(x => x.Owner)
                          .Include(x => x.User)
                          .FirstOrDefaultAsync(x => x.Id == requestId);

            if (request == null)
            {
                return(false);
            }

            await _hangfireJobScheduleService.DeleteRequestScheduleJob(requestId);

            if (request.Owner.IsEmailAllowed)
            {
                var emailMessage = new RequestMessage()
                {
                    UserName     = request.User.FirstName + " " + request.User.LastName,
                    OwnerName    = request.Owner.FirstName + " " + request.Owner.LastName,
                    BookName     = request.Book.Name,
                    RequestId    = request.Id,
                    OwnerAddress = new MailboxAddress($"{request.Owner.Email}")
                };
                await _emailSenderService.SendForCanceledRequestAsync(emailMessage);
            }

            await _notificationsService.NotifyAsync(
                request.Owner.Id,
                $"Your book '{request.Book.Name}' request was canceled.",
                request.BookId,
                NotificationAction.Open);

            await _notificationsService.NotifyAsync(
                request.User.Id,
                $"Your request for book '{request.Book.Name}' was canceled.",
                request.BookId,
                NotificationAction.Open);

            var book = await _bookRepository.FindByIdAsync(request.BookId);

            book.State = BookState.Available;
            var isBookUpdated = await _bookRepository.SaveChangesAsync() > 0;

            if (isBookUpdated)
            {
                await _wishListService.NotifyAboutAvailableBookAsync(book.Id);
            }

            _requestRepository.Remove(request);

            var affectedRows = await _requestRepository.SaveChangesAsync();

            return(affectedRows > 0);
        }