Beispiel #1
0
def get_food_and_store_by_id(food_id, is_dict_result=False):
    """Get food and store by id

    :param is_dict_result: True return dict
    :param food_id: food_id
    :return: food
    """
    result = db.session.query(Food, Store).join(Store, Food.restaurant_id == Store.restaurant_id) \
        .filter(Food.id == food_id).first()
    food, store = result
    if is_dict_result:
        return object_to_dict_utils(food), object_to_dict_utils(store)
    return result
Beispiel #2
0
def get_list_allergy_by_uid_dao(uid,
                                is_list_result=False,
                                is_dict_result=False):
    """Get all allergy by uid

    :param is_dict_result:
    :param is_list_result: True return list
    :param uid: uid
    :return: allergy
    """
    if is_dict_result and is_list_result:
        return []
    results = db.session.query(Allergy, MetaTag.v_name).join(
        MetaTag,
        MetaTag.id == Allergy.meta_tag_id).filter(Allergy.uid == uid).all()
    if is_list_result:
        result_list = []
        for result in results:
            result_list.append(result[1])
        return result_list
    if is_dict_result:
        result_dict = []
        for result in results:
            data_dict = object_to_dict_utils(result[0])
            data_dict['name'] = result[1]
            result_dict.append(data_dict)
        return result_dict
    return results
Beispiel #3
0
def get_user_by_uid_dao(uid, is_dict_result=False):
    """Get user by uid

    :param uid: uid of user
    :param is_dict_result: True return dict, False return object
    :return: user information
    """
    user = User.query.filter_by(uid=uid).first()
    if is_dict_result:
        return object_to_dict_utils(user)
    return user
Beispiel #4
0
def get_food_by_id(food_id, is_dict_result=False):
    """Get food by id

    :param is_dict_result: True return dict
    :param food_id: food_id
    :return: food
    """
    result = db.session.query(Food).filter(Food.id == food_id).first()
    if is_dict_result:
        return object_to_dict_utils(result)
    return result
Beispiel #5
0
def update_user_dao(user_obj):
    """Update user

    :param user_obj: user object
    :return: True if update success
    """
    try:
        User.query.filter_by(uid=user_obj.uid).update(object_to_dict_utils(user_obj))
        db.session.commit()
    except Exception as e:
        db.session.rollback()
        logging.error(str(e))
        return False
Beispiel #6
0
def get_store_by_id_dao(store_id, is_dict_result=False):
    """Get store by id

    :param store_id: store_id
    :param is_dict_result: True return dict
    :return: store response
    """
    result = Store.query.filter_by(restaurant_id=store_id).first()
    if not result:
        return None
    if is_dict_result:
        return object_to_dict_utils(result)
    return result
Beispiel #7
0
def get_city_by_name(name, is_dict_result=False):
    """Get location by name

    :param name: name of city
    :param is_dict_result: True return dict, False return object
    :return: city
    """
    city = City.query.filter_by(name=name).first()
    if city:
        if is_dict_result:
            return object_to_dict_utils(city)
        return city
    else:
        return None
Beispiel #8
0
def get_list_histories_dao(uid, is_dict_result=False):
    """Get list history

    :param uid: uid
    :param is_dict_result:
    :return:
    """
    result_foods = db.session.query(History, Food.image, Food.name) \
        .join(Food, Food.id == History.food_id).filter(History.uid == uid).all()
    if is_dict_result:
        list_result = []
        for food in result_foods:
            dict_result = object_to_dict_utils(food[0])
            dict_result['image'] = food[1]
            dict_result['food_name'] = food[2]
            list_result.append(dict_result)
        return list_result
    return result_foods
Beispiel #9
0
def get_list_bookmarks_dao(uid, is_dict_result=False):
    """Get list bookmarks

    :param uid: uid
    :param is_dict_result: True return dict result
    :return: list bookmarks
    """
    results = db.session.query(Food, Store.address) \
        .join(Bookmark, Food.id == Bookmark.food_id) \
        .join(Store, Food.restaurant_id == Store.restaurant_id) \
        .filter(Bookmark.uid == uid).all()
    if is_dict_result:
        results_list = []
        for result in results:
            results_dict = object_to_dict_utils(result[0])
            results_dict['address'] = result[1]
            results_list.append(results_dict)
        return results_list
    return results
Beispiel #10
0
def get_vegetarian_food_by_location_mealtoday(location, uid):
    """Get vegetarian food by location

    :param location: location
    :param uid: uid
    :return: food
    """
    location_format = "%{}".format(location)
    get_vegetarian_food_script = db.session.query(Food).join(FoodTag, Food.food_id == FoodTag.food_id) \
            .join(Tag, FoodTag.tag_id == Tag.id) \
            .filter(Tag.name == 'chay')
    get_food_by_location_script = db.session.query(Food).join(Store, Food.restaurant_id == Store.restaurant_id) \
        .filter(Store.address.like(location_format))
    results = get_vegetarian_food_script.intersect(
        get_food_by_location_script).order_by(db.func.random()).first()
    if results:
        foods = object_to_dict_utils(results)
        return foods
    else:
        return None
Beispiel #11
0
def search_limited_food_dao(keyword, limit, is_dict_result=False):
    """Search limited food dao

    :param keyword: keyword
    :param limit: limit
    :param is_dict_result: True return dict
    :return: limited foods
    """
    escaped_keyword = '%{}%'.format(
        keyword.replace('%', '/%').replace('_', '/_'))
    result_foods = db.session.query(Food, Store.food_name) \
        .join(Store, Store.restaurant_id == Food.restaurant_id) \
        .order_by(Food.name).filter(Food.name.ilike(escaped_keyword)).limit(limit).all()
    if is_dict_result:
        result_foods_list = []
        for result_food in result_foods:
            result_foods_dict = object_to_dict_utils(result_food[0])
            result_foods_dict['description'] = result_food[1]
            result_foods_list.append(result_foods_dict)
        return result_foods_list
    return result_foods
Beispiel #12
0
def get_top_rating_dao(top, offset):
    """Get top rating dao

    :param offset: offset
    :param top: limit top foods
    :return: top food dict
    """
    results = db.session.query(Food, db.func.sum(Rating.rate), Store.food_name) \
        .join(Rating, Food.food_id == Rating.food_id) \
        .join(Store, Food.restaurant_id == Store.restaurant_id) \
        .group_by(Food.id, Store.food_name).order_by(db.func.sum(Rating.rate).desc()).offset(
        (offset - 1) * top).limit(top).all()
    result_list = []
    rank = 0
    for result in results:
        rank += 1
        result_dict = object_to_dict_utils(result[0])
        result_dict['rate'] = result[1]
        result_dict['description'] = result[2]
        result_dict['rank'] = rank
        result_list.append(result_dict)
    return result_list
Beispiel #13
0
def get_food_from_super_tag_name_and_location(super_tag_name, location):
    """Get food by super_tag

    @param super_tag_name: name of meta tag
    @param location: location of user
    @return: List food corresponding of super tag
    """
    location_format = "%{}".format(location)
    get_food_by_super_tag_script = db.session.query(Food).join(FoodTag, Food.food_id == FoodTag.food_id) \
        .join(Tag, Tag.id == FoodTag.tag_id) \
        .join(TagMetaTag, Tag.id == TagMetaTag.tag_id) \
        .join(MetaTag, MetaTag.id == TagMetaTag.meta_tag_id) \
        .join(MetaTagSuperTag, MetaTag.id == MetaTagSuperTag.meta_tag_id) \
        .join(SuperTag, SuperTag.id == MetaTagSuperTag.super_tag_id) \
        .filter(SuperTag.name == super_tag_name)

    get_food_by_location_script = db.session.query(Food).join(Store, Food.restaurant_id == Store.restaurant_id) \
        .filter(Store.address.like(location_format))
    results = get_food_by_super_tag_script.intersect(
        get_food_by_location_script).order_by(db.func.random()).first()
    if results is not None:
        food = object_to_dict_utils(results)
        return food
    return None