Exemple #1
0
def get_posts():
    params = converts_keys(request.args.to_dict(), case='snake')
    set_filter_params(DEFAULT_POST_LIMIT, MAX_POST_LIMIT, params)
    cookies = request.cookies
    if 'token' in cookies:
        with connect(DSN) as connection:
            with connection.cursor(cursor_factory=RealDictCursor) as cursor:
                cursor.execute(Users.get_user_id(), cookies)
                record = cursor.fetchone()
                user_id = record['user_id']
    else:
        user_id = 0
    with connect(DSN) as connection:
        with connection.cursor(cursor_factory=RealDictCursor) as cursor:
            if 'search' in params:
                params['search'] = '%' + params['search'] + '%'
            cursor.execute(Posts.filter(**params), {
                'user_id': user_id,
                **params
            })
            posts = cursor.fetchall()
            cursor.execute(Posts.count(**params), params)
            record = cursor.fetchone()
    for post in posts:
        put_out_author(post)
    return jsonify(converts_keys({'posts': posts, **record}, case='camel'))
Exemple #2
0
def get_comments():
    params = converts_keys(request.args.to_dict(), case='snake')
    set_filter_params(DEFAULT_COMMENT_LIMIT, MAX_COMMENT_LIMIT, params)
    cookies = request.cookies
    if 'token' in cookies:
        with connect(DSN) as connection:
            with connection.cursor(cursor_factory=RealDictCursor) as cursor:
                cursor.execute(Users.get_user_id(), cookies)
                record = cursor.fetchone()
                user_id = record['user_id']
    else:
        user_id = 0
    with connect(DSN) as connection:
        with connection.cursor(cursor_factory=RealDictCursor) as cursor:
            cursor.execute(Comments.filter(**params), {
                'user_id': user_id,
                **params
            })
            comments = cursor.fetchall()
            cursor.execute(Comments.count(**params), params)
            record = cursor.fetchone()
    for comment in comments:
        put_out_author(comment)
    return jsonify(
        converts_keys({
            'comments': comments,
            **record
        }, case='camel'))
Exemple #3
0
def me():
    cookies = request.cookies
    if 'token' not in cookies:
        return jsonify(), 401
    with connect(DSN) as connection:
        with connection.cursor(cursor_factory=RealDictCursor) as cursor:
            cursor.execute(Users.get_user_id(), cookies)
            record = cursor.fetchone()
            cursor.execute(Users.me(), record)
            me = cursor.fetchone()
    return jsonify(converts_keys(me, case='camel'))
Exemple #4
0
def get_followings():
    cookies = request.cookies
    if 'token' not in cookies:
        return jsonify(), 401
    with connect(DSN) as connection:
        with connection.cursor(cursor_factory=RealDictCursor) as cursor:
            cursor.execute(Users.get_user_id(), cookies)
            record = cursor.fetchone()
            cursor.execute(Followings.get_followings(),
                           {'follower_id': record['user_id']})
            followings = cursor.fetchall()
    return jsonify(converts_keys({'followings': followings}, case='camel'))
Exemple #5
0
def unfollow(user_id):
    cookies = request.cookies
    if 'token' not in cookies:
        return jsonify(), 401
    with connect(DSN) as connection:
        with connection.cursor(cursor_factory=RealDictCursor) as cursor:
            cursor.execute(Users.get_user_id(), cookies)
            record = cursor.fetchone()
            cursor.execute(Followings.unfollow(), {
                'follower_id': record['user_id'],
                'user_id': user_id
            })
    return jsonify(), 204
Exemple #6
0
def create_post():
    payload = converts_keys(loads(request.data), case='snake')
    check_only_required_payload_props(payload, 'category', 'content')
    cookies = request.cookies
    if 'token' not in cookies:
        return jsonify(), 401
    with connect(DSN) as connection:
        with connection.cursor(cursor_factory=RealDictCursor) as cursor:
            cursor.execute(Users.get_user_id(), cookies)
            record = cursor.fetchone()
            author_id = record['user_id']
            cursor.execute(Posts.create(), {'author_id': author_id, **payload})
            post = cursor.fetchone()
    put_out_author(post)
    return jsonify(converts_keys(post, case='camel')), 201
Exemple #7
0
def delete_comment(comment_id):
    cookies = request.cookies
    if 'token' not in cookies:
        return jsonify(), 401
    with connect(DSN) as connection:
        with connection.cursor(cursor_factory=RealDictCursor) as cursor:
            cursor.execute(Users.get_user_id(), cookies)
            user_id = cursor.fetchone()['user_id']
            cursor.execute(Comments.get_author_id(), {'id': comment_id})
            author_id = cursor.fetchone()['author_id']
    if user_id != author_id:
        return jsonify(), 401
    with connect(DSN) as connection:
        with connection.cursor(cursor_factory=RealDictCursor) as cursor:
            cursor.execute(Comments.delete(), {'id': comment_id})
    return jsonify(), 205
Exemple #8
0
def feed():
    cookies = request.cookies
    if 'token' not in cookies:
        return jsonify(), 401
    params = converts_keys(request.args.to_dict(), case='snake')
    set_filter_params(DEFAULT_POST_LIMIT, MAX_POST_LIMIT, params)
    with connect(DSN) as connection:
        with connection.cursor(cursor_factory=RealDictCursor) as cursor:
            cursor.execute(Users.get_user_id(), cookies)
            follower_id = cursor.fetchone()['user_id']
            cursor.execute(Followings.feed(), {
                'follower_id': follower_id,
                **params
            })
            posts = cursor.fetchall()
    return jsonify(converts_keys({'posts': posts}, case='camel'))
Exemple #9
0
def unlike():
    params = converts_keys(request.args.to_dict(), case='snake')
    cookies = request.cookies
    if 'token' not in cookies:
        return jsonify(), 401
    with connect(DSN) as connection:
        with connection.cursor(cursor_factory=RealDictCursor) as cursor:
            cursor.execute(Users.get_user_id(), cookies)
            record = cursor.fetchone()
            if 'post_id' in params:
                cursor.execute(Posts.unlike(), {**record, **params})
            elif 'comment_id' in params:
                cursor.execute(Comments.unlike(), {**record, **params})
            elif 'reply_id' in params:
                cursor.execute(Replies.unlike(), {**record, **params})
            else:
                jsonify(), 400
    return jsonify(), 205
Exemple #10
0
def update_comment(comment_id):
    payload = converts_keys(loads(request.data), case='snake')
    check_only_required_payload_props(payload, 'post_id', 'content')
    cookies = request.cookies
    if 'token' not in cookies:
        return jsonify(), 401
    with connect(DSN) as connection:
        with connection.cursor(cursor_factory=RealDictCursor) as cursor:
            cursor.execute(Users.get_user_id(), cookies)
            user_id = cursor.fetchone()['user_id']
            cursor.execute(Comments.get_author_id(), {'id': comment_id})
            author_id = cursor.fetchone()['author_id']
    if user_id != author_id:
        return jsonify(), 401
    with connect(DSN) as connection:
        with connection.cursor(cursor_factory=RealDictCursor) as cursor:
            cursor.execute(Comments.update(), {'id': comment_id, **payload})
            comment = cursor.fetchone()
    return jsonify(converts_keys(comment, case='camel'))
Exemple #11
0
def get_user_data(user_id):
    cookies = request.cookies
    with connect(DSN) as connection:
        with connection.cursor(cursor_factory=RealDictCursor) as cursor:
            if 'token' in cookies:
                cursor.execute(Users.get_user_id(), cookies)
                record = cursor.fetchone()
                try:
                    follower_id = record['user_id']
                except KeyError:
                    cursor(Users.logout(), cookies)
                    follower_id = 0
            else:
                follower_id = 0
            cursor.execute(Users.get_user_data(), {
                'id': user_id,
                'follower_id': follower_id
            })
            profile = cursor.fetchone()
        put_out_contacts(profile)
        return jsonify(converts_keys(profile, case='camel'))
Exemple #12
0
def update_user_data():
    cookies = request.cookies
    if 'token' not in cookies:
        return jsonify(), 401
    try:
        payload = converts_keys(json.loads(request.data), case='snake')
    except json.decoder.JSONDecodeError:
        raise EmptyPayloadError
    profile = payload
    contacts = profile.pop('contacts')
    validate_contacts(contacts)
    with connect(DSN) as connection:
        with connection.cursor(cursor_factory=RealDictCursor) as cursor:
            cursor.execute(Users.get_user_id(), cookies)
            record = cursor.fetchone()
            if profile:
                cursor.execute(Profiles.update(profile), {**record, **profile})
            if contacts:
                cursor.execute(Contacts.update(contacts), {
                    **record,
                    **contacts
                })
    return jsonify(), 204