public async Task <bool> UpdateAsync(BookPutDto bookDto) { var book = _mapper.Map <Book>(bookDto); var oldBook = await _bookRepository.GetAll().AsNoTracking().FirstOrDefaultAsync(a => a.Id == book.Id); if (oldBook == null) { return(false); } if (bookDto.FieldMasks.Contains("Image")) { string imagePath; bookDto.FieldMasks.Remove("Image"); bookDto.FieldMasks.Add("ImagePath"); if (oldBook.ImagePath != null) { _imageService.DeleteImage(oldBook.ImagePath); } if (bookDto.Image != null) { imagePath = await _imageService.UploadImage(bookDto.Image); } else { imagePath = null; } book.ImagePath = imagePath; } await _bookRepository.Update(book, bookDto.FieldMasks); if (bookDto.UserId != oldBook.UserId) { var user = await _userLocationRepository.FindByIdAsync(oldBook.UserId.Value); string emailMessageForUser = $" Administrator has successfully received your book '{oldBook.Name}'"; SendMailForOwnership(book, user, emailMessageForUser); SendNotificationToUser(oldBook.UserId.Value, book.Id, emailMessageForUser); var userId = _userResolverService.GetUserId(); var admin = await _userLocationRepository.FindByIdAsync(userId); string emailMessageForAdmin = $"You became the current owner of the book '{oldBook.Name}'"; SendMailForOwnership(book, admin, emailMessageForAdmin); SendNotificationToUser(userId, book.Id, emailMessageForAdmin); } var affectedRows = await _bookRepository.SaveChangesAsync(); var isDatabaseUpdated = affectedRows > 0; if (isDatabaseUpdated && bookDto.FieldMasks.Contains("State") && bookDto.State == BookState.Available) { await _wishListService.NotifyAboutAvailableBookAsync(book.Id); } return(true); }
/// <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); }