Beispiel #1
0
def update_item():
    """Saves changes to an existing item.

    :Returns: JSON with item ID or error message.
    """
    user_id = login_session['user_id']
    obj = request.get_json()
    item = obj.pop('item')
    item_id = item['id']
    rating = int(obj.pop('rating', 0))
    # Try to update the item using it's ID.
    try:
        app.q_MenuItem().filter_by(id=item_id).update(item)
        app.db_session.flush()
    except IntegrityError as e:
        app.db_session.rollback()
        return jsonify(error=e.orig.pgerror), 500
    # Create or update rating if rating > 0.
    if rating:
        try:
            # Try update.
            rating_rec = app.q_Rating().filter_by(item_id=item_id,
                                                  user_id=user_id).one()
            rating_rec.rating = rating
            app.db_session.flush()
        except NoResultFound:
            # Create new rating record.
            new_rating = MenuItemRating(rating=rating,
                                        item_id=item_id,
                                        user_id=user_id)
            app.db_session.add(new_rating)
            app.db_session.flush()
    # Commit changes and return item ID for reference.
    app.db_session.commit()
    return jsonify(id=item_id)
Beispiel #2
0
def save_rating():
    """Saves a menu item rating to the database.

    :Returns: The status of the database submission as JSON.
    """
    user_id = login_session['user_id']
    # Retrieve and check parameters.
    params = request.get_json()
    try:
        item_id = params['item_id']
        new_rating = params['rating']
    except KeyError:
        return jsonify(error='Missing data in request.'), 400
    try:
        # Find existing rating record. Throws NoResultFound if none.
        rec = app.q_Rating().filter_by(user_id=user_id, item_id=item_id).one()
        rec.rating = new_rating
    except NoResultFound:
        # Add new rating record to database.
        new_rec = MenuItemRating(user_id=user_id,
                                 item_id=item_id,
                                 rating=new_rating)
        app.db_session.add(new_rec)
    app.db_session.commit()
    return jsonify(status='ok')
Beispiel #3
0
def get_favorites(user_id=None, limit=3):
    """Returns random selection of favorited menu items (default is three).

    Pass a user_id as a parameter or default to the currently logged in user.
    Returns an error if neither exists.

    :arg optional user_id: ID of user.
    :arg optional limit: Maximum number of items to return.
    :returns: JSON with an 'items' key and a list of menu items.
    """
    if 'limit' in request.args:
        limit = int(request.args.get('limit'))
    if 'user_id' in request.args:
        try:
            user_id = int(request.args.get('user_id'))
        except ValueError as e:
            return abort(400)
    else:
        user_id = login_session.get('user_id', None)
    if user_id is not None:
        recs = app.q_Rating().filter_by(user_id=user_id, rating=1)
    else:
        return abort(400)
    count = recs.count()
    # Make a list of the serializable version of each rec.
    recs_json = [each.item.sdict for each in recs]
    # Return a random sampling of the items up to the limit.
    return jsonify(items=sample(recs_json, min(limit, count)))
Beispiel #4
0
def update_item():
    """Saves changes to an existing item.

    :Returns: JSON with item ID or error message.
    """
    user_id = login_session["user_id"]
    obj = request.get_json()
    item = obj.pop("item")
    item_id = item["id"]
    rating = int(obj.pop("rating", 0))
    # Try to update the item using it's ID.
    try:
        app.q_MenuItem().filter_by(id=item_id).update(item)
        app.db_session.flush()
    except IntegrityError as e:
        app.db_session.rollback()
        return jsonify(error=e.orig.pgerror), 500
    # Create or update rating if rating > 0.
    if rating:
        try:
            # Try update.
            rating_rec = app.q_Rating().filter_by(item_id=item_id, user_id=user_id).one()
            rating_rec.rating = rating
            app.db_session.flush()
        except NoResultFound:
            # Create new rating record.
            new_rating = MenuItemRating(rating=rating, item_id=item_id, user_id=user_id)
            app.db_session.add(new_rating)
            app.db_session.flush()
    # Commit changes and return item ID for reference.
    app.db_session.commit()
    return jsonify(id=item_id)
Beispiel #5
0
def get_favorites(user_id=None, limit=3):
    """Returns random selection of favorited menu items (default is three).

    Pass a user_id as a parameter or default to the currently logged in user.
    Returns an error if neither exists.

    :arg optional user_id: ID of user.
    :arg optional limit: Maximum number of items to return.
    :returns: JSON with an 'items' key and a list of menu items.
    """
    if "limit" in request.args:
        limit = int(request.args.get("limit"))
    if "user_id" in request.args:
        try:
            user_id = int(request.args.get("user_id"))
        except ValueError as e:
            return abort(400)
    else:
        user_id = login_session.get("user_id", None)
    if user_id is not None:
        recs = app.q_Rating().filter_by(user_id=user_id, rating=1)
    else:
        return abort(400)
    count = recs.count()
    # Make a list of the serializable version of each rec.
    recs_json = [each.item.sdict for each in recs]
    # Return a random sampling of the items up to the limit.
    return jsonify(items=sample(recs_json, min(limit, count)))
Beispiel #6
0
def save_rating():
    """Saves a menu item rating to the database.

    :Returns: The status of the database submission as JSON.
    """
    user_id = login_session["user_id"]
    # Retrieve and check parameters.
    params = request.get_json()
    try:
        item_id = params["item_id"]
        new_rating = params["rating"]
    except KeyError:
        return jsonify(error="Missing data in request."), 400
    try:
        # Find existing rating record. Throws NoResultFound if none.
        rec = app.q_Rating().filter_by(user_id=user_id, item_id=item_id).one()
        rec.rating = new_rating
    except NoResultFound:
        # Add new rating record to database.
        new_rec = MenuItemRating(user_id=user_id, item_id=item_id, rating=new_rating)
        app.db_session.add(new_rec)
    app.db_session.commit()
    return jsonify(status="ok")