/// <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); }