forked from bookbooks/bookbooks
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathuser_db_access.py
145 lines (122 loc) · 5.3 KB
/
user_db_access.py
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
class UserDBAccess:
def __init__(self, conn):
self.conn = conn
def get_user(self, user_id):
user = {}
cursor = self.conn.execute('select u.* from users u where u.uid=%s', user_id)
for row in cursor:
user = dict(row)
del user['password']
if not user['address']:
user['address'] = ''
cursor.close()
return dict(user)
def get_followers(self, user_id, only_id=False): # get the users that follow you
followers = []
cursor = self.conn.execute('select f.uid from follows f where f.followid=%s', user_id)
for row in cursor:
uid = row['uid']
if only_id:
followers.append(uid)
else:
user = self.get_user(uid)
followers.append(user)
cursor.close()
return followers
def get_followings(self, user_id): # get the users that you are following
followings = []
cursor = self.conn.execute('select f.followid from follows f where f.uid=%s', user_id)
for row in cursor:
follow_id = row['followid']
user = self.get_user(follow_id)
followings.append(user)
cursor.close()
return followings
def follow(self, your_id, his_id):
try:
self.conn.execute('insert into follows values(%s, %s)', (your_id, his_id))
except Exception as e:
print e
def unfollow(self, your_id, his_id):
try:
self.conn.execute('delete from follows where uid=%s and followid=%s', (your_id, his_id))
except Exception as e:
print e
def register(self, username, password, firstname, lastname, email):
output = {'result': {}, 'status': False, 'message': ''}
status = False
message = ''
user = {}
is_unique, message = self.__is_unique(username, email)
if not is_unique:
output['message'] = message
return output
else:
status = True
cursor = self.conn.execute("""insert into users(username, password, firstname, lastname, email, creationdate)
values (%s, %s, %s, %s, %s, now()) returning uid, creationdate""", (username, password, firstname, lastname, email))
for row in cursor:
new_user_id = row['uid']
creationdate = row['creationdate']
user['uid'] = new_user_id
user['username'] = username
user['firstname'] = firstname
user['lastname'] = lastname
user['email'] = email
user['creationdate'] = creationdate
cursor.close()
output['result'] = user
output['message'] = 'The registration is successful!'
output['status'] = status
return output
def __is_unique(self, username, email):
message = 'You can use this username and email!'
status = True
cursor = self.conn.execute('select count(*) as size from users where username=%s', (username, ))
for row in cursor:
if int(row['size']) > 0:
status = False
message = 'The username has been taken!'
cursor.close()
if status:
cursor = self.conn.execute('select count(*) as size from users where email=%s', (email, ))
for row in cursor:
if int(row['size']) > 0:
status = False
message = 'The email has been taken!'
cursor.close()
return status, message
def change_password(self, user_id, old_password, new_password):
output = {'message': '', 'status': False}
cursor = self.conn.execute('select count(*) as size from users where password=%s and uid=%s', (old_password, user_id))
for row in cursor:
if int(row['size']) > 0:
output['status'] = True
output['message'] = 'Your password has been changed!'
self.conn.execute('update users set password=%s where uid=%s', (new_password, user_id))
else:
output['status'] = False
output['message'] = 'The old password is NOT correct!'
cursor.close()
return output
def update_profile(self, user_id, firstname, lastname, email, address):
output = {'message': '', 'status': False}
status, message = self.__is_your_email_unique(user_id, email)
if not status:
output['status'] = status
output['message'] = message
else:
output['status'] = status
output['message'] = 'You have successfully updated your profile!'
self.conn.execute('update users set firstname=%s, lastname=%s, email=%s, address=%s where uid=%s', (firstname, lastname, email, address, user_id))
return output
def __is_your_email_unique(self, user_id, email):
message = 'You can use this email!'
status = True
cursor = self.conn.execute('select count(*) as size from users where email=%s and uid!=%s', (email, user_id))
for row in cursor:
if int(row['size']) > 0:
status = False
message = 'The email has been taken!'
cursor.close()
return status, message