removeReaction method

Future<void> removeReaction({
  1. required String feedId,
  2. required String reactionId,
  3. required String ownerId,
  4. required String parentId,
  5. required String parentOwnerId,
  6. bool updateParentReactionsCount = true,
  7. bool updateUserReactionsCount = true,
  8. dynamic onSuccess(
    1. String
    )?,
  9. dynamic onError(
    1. dynamic
    )?,
})

Implementation

Future<void> removeReaction({
  required final String feedId,
  required final String reactionId,
  required final String ownerId,
  required final String parentId,
  required final String parentOwnerId,
  final bool updateParentReactionsCount = true,
  final bool updateUserReactionsCount = true,
  final Function(String)? onSuccess,
  final Function(dynamic)? onError,
}) async {
  try {
    final _reactionsRef =
        PeamanReferenceHelper.reactionsCol(feedId: feedId).doc(reactionId);
    final _reactedFeedRef =
        PeamanReferenceHelper.reactedFeedsCol(uid: ownerId).doc(feedId);
    final _feedReactorRef =
        PeamanReferenceHelper.feedReactorsCol(feedId: feedId).doc(ownerId);

    final _futures = <Future>[];

    final _future = _reactionsRef.update({
      'unreacted': true,
    });
    _futures.add(_future);

    if (feedId == parentId) {
      if (updateParentReactionsCount) {
        final _feedPropertiesFuture = updateFeedPropertiesCount(
          feedId: feedId,
          reactionsCount: -1,
        );
        _futures.add(_feedPropertiesFuture);
      }

      if (updateUserReactionsCount) {
        final _userPropertyFuture = PUserProvider.updateUserPropertiesCount(
          uid: parentOwnerId,
          reactionsReceivedFromFeeds: -1,
        );
        _futures.add(_userPropertyFuture);
      }

      final _reactedFeedFuture = _reactedFeedRef.delete();
      final _feedReactorFuture = _feedReactorRef.delete();

      _futures.add(_reactedFeedFuture);
      _futures.add(_feedReactorFuture);
      print('Success: Removing reaction from feed $feedId');
    } else {
      if (updateParentReactionsCount) {
        final _commentPropertyFuture = updateCommentPropertiesCount(
          feedId: feedId,
          commentId: parentId,
          reactionsCount: -1,
        );
        _futures.add(_commentPropertyFuture);
      }

      if (updateUserReactionsCount) {
        final _userPropertyFuture = PUserProvider.updateUserPropertiesCount(
          uid: parentOwnerId,
          reactionsReceivedFromFeeds: -1,
        );
        _futures.add(_userPropertyFuture);
      }
      print('Success: Removing reaction from comment $parentId');
    }

    await Future.wait(_futures);
    onSuccess?.call(_reactionsRef.id);
  } catch (e) {
    print(e);
    print('Error!!!: Removing reaction');
    onError?.call(e);
  }
}