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'))
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'))
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'))
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'))
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
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
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
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'))
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
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'))
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'))
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