1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
from flask import Blueprint, request
from db import cursor
from rating import get_rating
from hierarchy import one_person
import json
# get relation to user_2_id from user_1_id's perspective
def get_relation_to(user_1_id, user_2_id):
relation = cursor.execute("select * from social where " + \
"(user_1_id = ? and user_2_id = ?) or " + \
"(user_1_id = ? and user_2_id = ?)", [user_1_id, user_2_id, user_2_id, user_1_id]).fetchone()
if not relation: return "none"
if relation[2] == "friendship": return "friends"
if relation[2] == "outgoing" and relation[0] == user_1_id:
return "outgoing"
if relation[2] == "outgoing" and relation[1] == user_1_id:
return "incoming"
if relation[2] == "block" and relation[0] == user_1_id: return "blocked"
return "none"
# get users friend count
def count_friends(user_id):
query = cursor.execute(
"select type from social where (user_1_id = ? or user_2_id = ?) and type = \"friendship\"",
[user_id, user_id]
).fetchall()
return len(query) #FIXME: use SQL count() instead of python's len()
# get user/info of `user_id` as `viewer` (id)
def format_user(user_id, viewer=''):
user = cursor.execute(
"select " + ", ".join(
[
"username",
"user_id",
"country",
"registered",
"status",
]
) + " from users where user_id = ?", [user_id]
).fetchone()
formatted_user = {
"username": user[0],
"id": user[1],
"country": user[2],
"registered": user[3],
"status": user[4],
"friends": count_friends(user_id),
"rating":
get_rating(user_id), #TODO: calculate rating based on game analysis
}
if viewer: formatted_user["relation"] = get_relation_to(viewer, user_id)
return formatted_user
info = Blueprint('info', __name__)
# view own user/info if no user_id or username is provided and is logged in,
# else view user/info of user with user_id = `user_id` or username = `username`
@info.route('/info', methods=['GET', 'POST'])
@one_person
def index(user_id, viewer):
user = format_user(user_id, viewer)
return user, 200
dynamic_route = ["/user", info]
|