-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathuserController.py
More file actions
171 lines (125 loc) · 5.14 KB
/
userController.py
File metadata and controls
171 lines (125 loc) · 5.14 KB
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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
from api.models import db, User, UserHasProject, UserLink, UserFeedback
from api import app
from flask_jwt_extended import get_jwt_identity
from flask import jsonify
class UserController:
session = db.session
# User
def create_user(self, **kwargs):
try:
user = User(**kwargs)
self.session.add(user)
self.session.commit()
return user, "OK", 200
except:
self.session.rollback()
return None, "Forbidden attributes", 400
def update_user(self, id, **kwargs):
user = User.query.filter_by(id=id).first()
if user == None:
return None, "User not found", 404
for key, value in kwargs.items():
if not hasattr(user, key):
return None, f"Forbidden attribute '{key}'", 400
for key, value in kwargs.items():
setattr(user, key, value)
db.session.commit()
return user, "OK", 200
def get_user(self, **kwargs):
user = User.query.filter_by(**kwargs).first()
if user is None:
return None, "User not found", 404
return user, "OK", 200
def delete_user(self, id):
# Remove all user's links
for link in UserLink.query.filter_by(user_id=id).all():
db.session.delete(link)
# Remove user from all projects
for project in UserHasProject.query.filter_by(user_id=id).all():
db.session.delete(project)
user = User.query.filter_by(id=id).first()
if user == None:
return None, "User not found", 404
db.session.delete(user)
db.session.commit()
return user, "OK", 200
# User Link
def create_link(self, user_id, **kwargs):
try:
if 'name' in kwargs and 'url' in kwargs and len(kwargs) == 2:
if kwargs['name'] is None or kwargs['url'] is None:
return None, "Arguments can't be empty", 400
link = UserLink(user_id=user_id, **kwargs)
self.session.add(link)
self.session.commit()
return link, "OK", 201
else:
return None, "Forbidden attributes used in request. only name and url allowed.", 400
except:
self.session.rollback()
return None, "Link creation failed", 500
def update_link(self, user_id, **kwargs):
if not 'id' in kwargs:
return None, "Missing required parameter 'id'", 400
print(kwargs['id'])
print(user_id)
link = UserLink.query.filter_by(user_id=user_id, id=kwargs['id']).first()
if link == None:
return None, "User doesn't have a link with that id or user doesn't exist", 404
for key, value in kwargs.items():
if not hasattr(link, key):
return None, f"Forbidden attribute {key} used", 400
for key, value in kwargs.items():
setattr(link, key, value)
db.session.commit()
return link, "OK", 200
def get_all_links(self, user_id):
user = User.query.filter_by(id=user_id).first()
if user is None:
return None, "User not found", 404
return user.links, "OK", 200
def delete_link(self, user_id, **kwargs):
if not 'id' in kwargs:
return None, "Missing required parameter 'id'", 400
link = UserLink.query.filter_by(user_id=user_id, id=kwargs['id']).first()
if link == None:
return None, "Link not found", 404
db.session.delete(link)
db.session.commit()
return link, "OK", 200
# User Feedback
def create_feedback(self, user_id, **kwargs):
author = User.query.filter_by(id=user_id).first()
if author is None:
return None, "Author not found", 404
if not 'id' in kwargs or not 'rating' in kwargs:
return None, "Missing required argument", 400
user = User.query.filter_by(id=kwargs['id']).first()
if user is None:
return None, "User not found", 404
feedback = UserFeedback(author_id=author.id, user_id=kwargs.pop('id'), **kwargs)
self.session.add(feedback)
self.session.commit()
return feedback, "OK", 201
def get_all_feedbacks(self, **kwargs):
if not 'id' in kwargs:
return None, "id Required", 400
user = User.query.filter_by(id=kwargs['id']).first()
if user is None:
return None, "User not found", 404
return user.received_feedbacks, "OK", 200
def delete_feedback(self, user_id, **kwargs):
user = User.query.filter_by(id=user_id).first()
if user == None:
return None, "User not found", 404
if not 'id' in kwargs:
return None, "id Required", 400
feedback = UserFeedback.query.filter_by(author_id=user_id, id=kwargs['id']).first()
if feedback == None:
return None, "feedback not found", 404
db.session.delete(feedback)
db.session.commit()
return feedback, "OK", 200
def get_user_from_jwt(self):
return self.get_user(id=get_jwt_identity())
userController = UserController()