def vote(user_id, take_id): user = User.query.filter_by(id=user_id).first() if user is None: return failure_response("User not found") take = Take.query.filter_by(id=take_id).first() if take is None: return failure_response("Take not found") if user_id == take.user_id: return failure_response("User cannot vote on their own take") for vote in Vote.query.filter_by(user_id=user_id).all(): if vote.take_id == take_id: return failure_response("User already voted") body = json.loads(request.data) value = body.get("value") if value is None: return failure_response("User must provide a vote value") new_vote = Vote(value=body.get("value"), take=take) db.session.add(new_vote) take.votes.append(new_vote) user.voted.append(new_vote) db.session.commit() return success_response(new_vote.serialize())