Skip to content

Commit 715e13e

Browse files
authored
Merge branch 'routes' into swagger
2 parents 0e2253a + 8dd4ce7 commit 715e13e

15 files changed

+654
-48
lines changed

.editorconfig

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ root = true
55
indent_style = space
66
end_of_line = lf
77
insert_final_newline = true
8+
trim_trailing_whitespace = true
89

910
[*.py]
1011
indent_style = space

src/api/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55
from flask import Flask
66
app = Flask(__name__)
7+
# Disable sorting of the jsonified data
8+
app.config['JSON_SORT_KEYS'] = False
79

810
from api.models import db
911
import api.models
Lines changed: 124 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,134 @@
1-
from api.models import db, Project
1+
from api.models import db, Project, UserHasProject, ProjectLink, ProjectFeedback
22

33
class ProjectController:
44
session = db.session()
5+
6+
# Project
57
def create_project(self, **kwargs):
6-
project = Project(**kwargs)
7-
self.session.add(project)
8-
self.session.commit()
8+
try:
9+
project = Project(**kwargs)
10+
self.session.add(project)
11+
self.session.commit()
12+
13+
return project
14+
except:
15+
return None
16+
17+
def update_project(self, id, **kwargs):
18+
project = Project.query.filter_by(id=id).first()
19+
20+
if project == None:
21+
return None
22+
23+
for key, value in kwargs.items():
24+
if not hasattr(project, key):
25+
return None
26+
27+
for key, value in kwargs.items():
28+
setattr(project, key, value)
29+
30+
db.session.commit()
31+
32+
return project
933

1034
def get_project(self, **kwargs):
1135
project = Project.query.filter_by(**kwargs).first()
36+
37+
return project
38+
39+
def get_all_projects(self, **kwargs):
40+
all_projects = Project.query.all()
41+
42+
return all_projects
43+
44+
def delete_project(self, id):
45+
# Remove all project's links
46+
for link in ProjectLink.query.filter_by(project_id=id).all():
47+
db.session.delete(link)
48+
49+
# Remove project from all users
50+
for project in UserHasProject.query.filter_by(project_id=id).all():
51+
db.session.delete(project)
52+
53+
project = Project.query.filter_by(id=id).first()
54+
55+
if project == None:
56+
return project
57+
58+
db.session.delete(project)
59+
db.session.commit()
60+
1261
return project
1362

63+
# Project Link
64+
def create_link(self, project_id, **kwargs):
65+
try:
66+
link = ProjectLink(project_id=project_id, **kwargs)
67+
self.session.add(link)
68+
self.session.commit()
69+
70+
return link
71+
except:
72+
return None
73+
74+
def update_link(self, project_id, link_id, **kwargs):
75+
link = ProjectLink.query.filter_by(project_id=project_id, id=link_id).first()
76+
77+
if link == None:
78+
return None
79+
80+
for key, value in kwargs.items():
81+
if not hasattr(link, key):
82+
return None
83+
84+
for key, value in kwargs.items():
85+
setattr(link, key, value)
86+
87+
db.session.commit()
88+
89+
return link
90+
91+
def get_all_links(self, project_id):
92+
all_links = ProjectLink.query.filter_by(project_id=project_id).all()
93+
94+
return all_links
95+
96+
def delete_link(self, project_id, link_id):
97+
link = ProjectLink.query.filter_by(project_id=project_id, id=link_id).first()
98+
99+
if link == None:
100+
return None
101+
102+
db.session.delete(link)
103+
db.session.commit()
104+
105+
return link
106+
107+
# Project Feedback
108+
def create_feedback(self, project_id, **kwargs):
109+
try:
110+
feedback = ProjectFeedback(project_id=project_id, **kwargs)
111+
self.session.add(feedback)
112+
self.session.commit()
113+
114+
return feedback
115+
except:
116+
return None
117+
118+
def get_all_feedbacks(self, project_id):
119+
all_feedbacks = ProjectFeedback.query.filter_by(project_id=project_id).all()
120+
121+
return all_feedbacks
122+
123+
def delete_feedback(self, project_id, feedback_id):
124+
feedback = ProjectFeedback.query.filter_by(project_id=project_id, id=feedback_id).first()
125+
126+
if feedback == None:
127+
return None
128+
129+
db.session.delete(feedback)
130+
db.session.commit()
131+
132+
return feedback
133+
14134
projectController = ProjectController()
Lines changed: 124 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,134 @@
1-
from api.models import db, User
1+
from api.models import db, User, UserHasProject, UserLink, UserFeedback
22

33
class UserController:
44
session = db.session()
5+
6+
# User
57
def create_user(self, **kwargs):
6-
user = User(**kwargs)
7-
self.session.add(user)
8-
self.session.commit()
8+
try:
9+
user = User(**kwargs)
10+
self.session.add(user)
11+
self.session.commit()
12+
13+
return user
14+
except:
15+
return None
16+
17+
def update_user(self, id, **kwargs):
18+
user = User.query.filter_by(id=id).first()
19+
20+
if user == None:
21+
return None
22+
23+
for key, value in kwargs.items():
24+
if not hasattr(user, key):
25+
return None
26+
27+
for key, value in kwargs.items():
28+
setattr(user, key, value)
29+
30+
db.session.commit()
31+
32+
return user
933

1034
def get_user(self, **kwargs):
1135
user = User.query.filter_by(**kwargs).first()
36+
1237
return user
1338

39+
def get_all_users(self, **kwargs):
40+
all_users = User.query.all()
41+
42+
return all_users
43+
44+
def delete_user(self, id):
45+
# Remove all user's links
46+
for link in UserLink.query.filter_by(user_id=id).all():
47+
db.session.delete(link)
48+
49+
# Remove user from all projects
50+
for project in UserHasProject.query.filter_by(user_id=id).all():
51+
db.session.delete(project)
52+
53+
user = User.query.filter_by(id=id).first()
54+
55+
if user == None:
56+
return None
57+
58+
db.session.delete(user)
59+
db.session.commit()
60+
61+
return user
62+
63+
# User Link
64+
def create_link(self, user_id, **kwargs):
65+
try:
66+
link = UserLink(user_id=user_id, **kwargs)
67+
self.session.add(link)
68+
self.session.commit()
69+
70+
return link
71+
except:
72+
return None
73+
74+
def update_link(self, user_id, link_id, **kwargs):
75+
link = UserLink.query.filter_by(user_id=user_id, id=link_id).first()
76+
77+
if link == None:
78+
return None
79+
80+
for key, value in kwargs.items():
81+
if not hasattr(link, key):
82+
return None
83+
84+
for key, value in kwargs.items():
85+
setattr(link, key, value)
86+
87+
db.session.commit()
88+
89+
return link
90+
91+
def get_all_links(self, user_id):
92+
all_links = UserLink.query.filter_by(user_id=user_id).all()
93+
94+
return all_links
95+
96+
def delete_link(self, user_id, link_id):
97+
link = UserLink.query.filter_by(user_id=user_id, id=link_id).first()
98+
99+
if link == None:
100+
return None
101+
102+
db.session.delete(link)
103+
db.session.commit()
104+
105+
return link
106+
107+
# User Feedback
108+
def create_feedback(self, user_id, **kwargs):
109+
try:
110+
feedback = UserFeedback(user_id=user_id, **kwargs)
111+
self.session.add(feedback)
112+
self.session.commit()
113+
114+
return feedback
115+
except:
116+
return None
117+
118+
def get_all_feedbacks(self, user_id):
119+
all_feedbacks = UserFeedback.query.filter_by(user_id=user_id).all()
120+
121+
return all_feedbacks
122+
123+
def delete_feedback(self, user_id, feedback_id):
124+
feedback = UserFeedback.query.filter_by(user_id=user_id, id=feedback_id).first()
125+
126+
if feedback == None:
127+
return None
128+
129+
db.session.delete(feedback)
130+
db.session.commit()
131+
132+
return feedback
133+
14134
userController = UserController()

src/api/models/__init__.py

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,16 @@
33
"""
44
from sys import argv
55
from datetime import datetime
6+
67
from api.models.database import db, init_db
7-
from api.models.userModel import UserHasProject, User, UserLink
8-
from api.models.projectModel import Project, ProjectLink
8+
9+
from api.models.userModel import User
10+
from api.models.userLinkModel import UserLink
11+
from api.models.projectModel import Project
12+
from api.models.projectLinkModel import ProjectLink
13+
from api.models.userHasProjectModel import UserHasProject
14+
from api.models.userFeedbackModel import UserFeedback
15+
from api.models.projectFeedbackModel import ProjectFeedback
916

1017
if '--reset-db' in argv:
1118
init_db(True)
@@ -17,10 +24,12 @@
1724
import datetime;
1825
1926
user1 = User(name='Foe Joe')
27+
user2 = User(name='Tommy Frich')
28+
user3 = User(name='Limm Carter')
2029
link1 = UserLink(name='GitHub', url='https://github.com')
2130
user1.links.append(link1)
2231
23-
project1 = Project(name='Hello, World!', description='First project.', development_status=2, creation_date=datetime.datetime.now())
32+
project1 = Project(name='Hello, World!', repository="https://github.com/ProgrammingBuddies/programmingbuddies-api", description='First project.', development_status=2, creation_date=datetime.datetime.now())
2433
link2 = ProjectLink(name='Reddit', url='https://reddit.com')
2534
project1.links.append(link2)
2635
@@ -29,6 +38,17 @@
2938
3039
user1.projects.append(userHasProject)
3140
41+
feedback1 = ProjectFeedback(rating=3, description="Cool project!", project_feed_author=user1, project=project1)
42+
feedback2 = ProjectFeedback(rating=1, description="Not so cool!", project_feed_author=user2, project=project1)
43+
44+
# project1.feedbacks.append(feedback1)
45+
# project1.feedbacks.append(feedback2)
46+
47+
feedback3 = UserFeedback(user_feed_author=user1, destination=user2, rating=5, description="Good guy!")
48+
feedback4 = UserFeedback(user_feed_author=user3, destination=user2, rating=1, description="Poor guy!")
49+
3250
db.session.add(user1)
51+
db.session.add(user2)
52+
db.session.add(user3)
3353
db.session.commit()
3454
"""
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
from api.models import db
2+
3+
class ProjectFeedback(db.Model):
4+
id = db.Column(db.Integer, primary_key=True)
5+
user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
6+
project_id = db.Column(db.Integer, db.ForeignKey('project.id'))
7+
rating = db.Column(db.Integer, nullable=False)
8+
description = db.Column(db.String(255), nullable=True)
9+
10+
def as_dict(self):
11+
obj_d = {
12+
'id': self.id,
13+
'user_id': self.user_id,
14+
'project_id': self.project_id,
15+
'rating': self.rating,
16+
'description': self.description,
17+
}
18+
return obj_d

src/api/models/projectLinkModel.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
from api.models import db
2+
3+
class ProjectLink(db.Model):
4+
id = db.Column(db.Integer, primary_key=True)
5+
name = db.Column(db.String(80), nullable=False)
6+
url = db.Column(db.Text, nullable=False)
7+
project_id = db.Column(db.Integer, db.ForeignKey('project.id'), nullable=False)
8+
9+
# todo: decide if this should contain project_id (it is already present in the model)
10+
def as_dict(self):
11+
obj_d = {
12+
'id': self.id,
13+
'name': self.name,
14+
'url': self.url,
15+
'project_id': self.project_id
16+
}
17+
return obj_d
18+
19+
def __repr__(self):
20+
return '<ProjectLink %r>' % self.name

0 commit comments

Comments
 (0)