def favoriteQuestion(user):

    # Question ID as parameter & userID from header
    questionId = request.args.get('id')
    userId = user["_id"]

    # Converting str into Object ID
    questionId = ObjectId(questionId)

    # Getting the user adding the favorite questions to list
    user = User({"_id": userId})
    username = user.data()['username']

    status, message = False, ""

    curFavoriteQuestions = user.data().get('favoriteQuestions')
    curFavoriteQuestions = list(
        curFavoriteQuestions) if curFavoriteQuestions else []

    question = Question({"_id": questionId})
    if questionId not in curFavoriteQuestions:
        question.updateFavCount()
        curFavoriteQuestions.append(questionId)
        status = True
        message = f"{username} favorited a question"

        # Creating & inserting a post
        postObj = {
            "userId": userId,
            "message": message,
            "questionId": str(questionId),
            "questionTitle": str(question.data()['title'])
        }
        validation = validatePost(postObj)

        # Invalid
        if validation['success'] is False:
            return jsonify(validation)

        post = Post(postObj)
        post.insert_one()

    else:
        question.updateFavCount(False)
        curFavoriteQuestions.remove(questionId)
        status = False
        message = f"{username} unfavorited a question"

    setattr(user, 'favoriteQuestions', curFavoriteQuestions)

    # Updating
    user.update_one(user.data())

    # Return the response
    return jsonify({
        'success': True,
        'result': status,
        'message': message,
        'question': question.data()
    }), 200
def getQuestion(user):

    # ID as parameter
    questionId = request.args.get('id')

    userId = user["_id"]
    user = User({"_id": userId})

    result = None
    try:
        question = Question({"_id": questionId})
        question.incrementViewCount()
        result = question.data()
    except Exception as e:
        print("NO SUCH QUESTION ID")
        raise e

    # Favorite questions of the user
    favoriteQuestions = user.data().get('favoriteQuestions')
    isFavorite = ObjectId(questionId) in favoriteQuestions

    # YouTube search
    if result and result.get('labels'):
        youtubeResults = []
        try:
            searchKey = f"{result['title']} {result['source']['reference']} solution"
            youtubeResults = searchByKey(searchKey, 5)
            youtubeVideos = youtubeResults.get('videos')
            youtubeVideos.reverse()
            result['youtubeVideos'] = youtubeVideos

        except Exception as e:
            print("NO YOUTUBE VIDEO IS FOUND")

    status = result is not None

    # Return the response
    return jsonify({
        'success': status,
        "question": result,
        "favorite": isFavorite
    }), 200