def list(id): """Returns a list of all favorites for the given user""" try: user = User.objects.get(id=id) except mongoengine.DoesNotExist: return flask.Response('No user with id {} found'.format(id), 404) except: return flask.Resposne('Invalid id {}'.format(id), 400) return JSONResponse(Favorite.objects.all().filter(user=user).to_json())
def post(id): """Creates a new favorite for the logged in user for the given beer""" if id != str(flask.request.user.id): return flask.Response( 'You can not add a favorite beer for another user', 400) data = flask.request.get_json() if not 'beer' in data: return flask.Response('No beer was specified', 400) # find the beer try: beer = Beer.objects.get(id=data['beer']) except mongoengine.DoesNotExist: return flask.Resposne('No beer with id {} found'.format(data['beer']), 404) except: return flask.Resposne('Invalid beer id {}'.format(data['beer']), 400) # check to see if a favorite was already created for this beer from this # user try: Favorite.objects.get(beer=beer, user=flask.request.user) except mongoengine.DoesNotExist: pass else: return flask.Response( 'You\'ve already favorited beer {}'.format(data['beer']), 400) favorite = Favorite(user=flask.request.user, beer=beer) try: favorite.save() except mongoengine.ValidationError as exp: return flask.Response('{}'.format(exp), 400) return JSONResponse(favorite.to_json())
def get(id, rid): """Returns the given review for the given beer by ids""" try: beer = Beer.objects.get(id=id) except mongoengine.DoesNotExist: return flask.Response('Failed to find a beer with id {}'.format(id), 404) except: return flask.Response('Invalid beer id {}'.format(id), 400) try: review = Review.objects.get(id=rid, beer=beer) except mongoengine.DoesNotExist: return flask.Resposne('Failed to find a review with id {}'.format(id), 404) except: return flask.Response('Invalid review id {}'.format(rid), 400) return JSONResponse(review.to_json())
def get(id, fid): """Returns the given favorite for the given user by ids""" try: user = User.objects.get(id=id) except mongoengine.DoesNotExist: return flask.Response('Failed to find a user with id {}'.format(id), 404) except: return flask.Response('Invalid user id {}'.format(id), 400) try: favorite = Favorite.objects.get(id=fid, user=user) except mongoengine.DoesNotExist: return flask.Resposne( 'Failed to find a favorite with id {}'.format(fid), 404) except: return flask.Response('Invalid favorite id {}'.format(fid), 400) return JSONResponse(favorite.to_json())
def list(id): """Returns a list of all reviews for the given beer""" try: beer = Beer.objects.get(id=id) except mongoengine.DoesNotExist: return flask.Response('No beer with id {} found'.format(id), 404) except: return flask.Resposne('Invalid id {}'.format(id), 400) reviews = Review.objects.all().filter(beer=beer) if 'sort' in flask.request.values: props = [ 'aroma', 'appearance', 'taste', 'palate', 'bottle_style', 'overall' ] keys = get_sort_keys(flask.request.values['sort'].split(','), props) if len(keys) > 0: reviews = reviews.order_by(*keys) return JSONResponse(reviews.to_json())
def put(id, rid): """Updates the given review for a beer by ids""" try: beer = Beer.objects.get(id=id) except mongoengine.DoesNotExist: return flask.Response('No beer with id {} found'.format(id), 404) except: return flask.Resposne('Invalid beer id {}'.format(id), 400) try: review = Review.objects.get(id=rid, beer=beer) except mongoengine.DoesNotExist: return flask.Response('No review with id {} found'.format(rid), 404) except: return flask.Response('Invalid review id {}'.format(id), 400) data = flask.request.get_json() # update an of our simple fields props = ['aroma', 'appearance', 'taste', 'palate', 'bottle_style'] for item in props: if item in data: setattr(review, item, data[item]) review.calculate() try: review.save() except mongoengine.ValidationError as exp: return flask.Response('{}'.format(exp), 400) beer.rating = Review.objects.all().filter(beer=beer).average('overall') beer.save() return JSONResponse(review.to_json())