def get_events():
    events = session.query(Event).order_by(Event.id.desc()).limit(100).all()
    results = []
    for e in events:
        event = {
            'user': u_ctrl.get_user_as_dictionary(e.user_id),
            'action': e.action,
            'view_type': e.view_type,
            'time_stamp': e.time_stamp,
            'data': None #just a default
        }
        if e.view_type == 'product':
            event['data'] = p_ctrl.get_product_as_dictionary(e.data_id)
            event['comments'] = p_ctrl.get_notes(e.user_id, e.data_id)
        if e.view_type in ['article', 'blog']:
            try:
                site_info_Q = s_ctrl.query_by_id_and_type(e.data_id, e.view_type).one()
                site_info = {}
                for column in site_info_Q.__table__.columns:
                    site_info[column.name] = getattr(site_info_Q, column.name)
                event['data'] = site_info
            except:
                None
            event['comments'] = s_ctrl.get_comments(e.user_id, e.view_type, e.data_id)
        
        results.append(event)

    return {'events':results}
def get_events():
    events = session.query(Event).order_by(Event.id.desc()).limit(100).all()
    results = []
    for e in events:
        event = {
            'user': u_ctrl.get_user_as_dictionary(e.user_id),
            'action': e.action,
            'view_type': e.view_type,
            'time_stamp': e.time_stamp,
            'data': None  #just a default
        }
        if e.view_type == 'product':
            event['data'] = p_ctrl.get_product_as_dictionary(e.data_id)
            event['comments'] = p_ctrl.get_notes(e.user_id, e.data_id)
        if e.view_type in ['article', 'blog']:
            try:
                site_info_Q = s_ctrl.query_by_id_and_type(
                    e.data_id, e.view_type).one()
                site_info = {}
                for column in site_info_Q.__table__.columns:
                    site_info[column.name] = getattr(site_info_Q, column.name)
                event['data'] = site_info
            except:
                None
            event['comments'] = s_ctrl.get_comments(e.user_id, e.view_type,
                                                    e.data_id)

        results.append(event)

    return {'events': results}
def get_recommendation_by_user_id(user_id):
    recommendations = session.query(Recommendation).filter(Recommendation.user_id == user_id).all()
    results = []
    for r in recommendations:
        results.append(
            p_ctrl.get_product_as_dictionary(r.product_id)
            )
    return results
def get_personal_recs(user_id):
    #filter by to user id
    recs = session.query(Personal_Rec).filter(Personal_Rec.to_user_id == user_id).all()
    results = []
    for r in recs:
        rec = {'id': r.id}
        #replace from_user_id with full user object
        rec['product'] = p_ctrl.get_product_as_dictionary(r.product_id)
        #replace product_id with full product
        rec['from_user'] = u_ctrl.get_user_as_dictionary(r.from_user_id)
        results.append(rec)
    return results
def add_personal_rec(from_user_id, to_user_id, p):
    product_id = p_ctrl.verify_product_by_name_and_brand(p['product_name'], p['brand_name'])
    if not product_id:
        p_ctrl.add_product_to_products(p['product_name'], p['brand_name'], p.get('category',''))
    #check that rec doesn't already exists
    if session.query(Personal_Rec).filter(Personal_Rec.from_user_id == from_user_id, Personal_Rec.to_user_id == to_user_id, Personal_Rec.product_id == product_id).count() > 0:
        return None
    #add recomendation
    rec_id = session.add(Personal_Rec(from_user_id, to_user_id, product_id))
    session.commit()
    #response info
    rec = {'id': rec_id}
    rec['product'] = p_ctrl.get_product_as_dictionary(product_id)
    rec['to_user'] = u_ctrl.get_user_as_dictionary(to_user_id)
    return rec