Skip to content

Commit fdb4ad6

Browse files
committed
Add project swagger documentation.
1 parent f8d12e3 commit fdb4ad6

File tree

1 file changed

+310
-1
lines changed

1 file changed

+310
-1
lines changed

src/api/views/projectView.py

Lines changed: 310 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,68 @@
44

55
# Project
66
@app.route("/projects", methods=['POST'])
7-
def post_project():
7+
def create_project():
8+
"""
9+
Create project
10+
---
11+
tags:
12+
- Project
13+
parameters:
14+
- in: body
15+
name: Project
16+
required: true
17+
description: Project object containing data for creation
18+
schema:
19+
$ref: "#/definitions/Project"
20+
definitions:
21+
- schema:
22+
id: Project
23+
properties:
24+
id:
25+
type: integer
26+
description: Id of the project. This property will be assigned a value returned by the database
27+
name:
28+
type: string
29+
description: Name of the project
30+
description:
31+
type: string
32+
description: Description of the project
33+
languages:
34+
type: string
35+
description: List of programming languages the project uses
36+
development_status:
37+
type: integer
38+
description: Development status of the project
39+
creation_date:
40+
type: string
41+
description: Creation date of the project
42+
release_date:
43+
type: string
44+
description: Release date of the project
45+
repository:
46+
type: string
47+
description: Url of the project's repository
48+
users:
49+
type: array
50+
description: List of members of the project
51+
items:
52+
$ref: "#/definitions/User"
53+
links:
54+
type: array
55+
description: List of links
56+
items:
57+
$ref: "#/definitions/ProjectLink"
58+
feedbacks:
59+
type: array
60+
description: List of feedbacks given to the project
61+
items:
62+
$ref: "#/definitions/ProjectFeedback"
63+
responses:
64+
201:
65+
description: Project created successfully
66+
400:
67+
description: Failed to create project
68+
"""
869
project = projectController.create_project(**request.get_json())
970

1071
if project == None:
@@ -14,6 +75,30 @@ def post_project():
1475

1576
@app.route("/projects/<id>", methods=['POST'])
1677
def update_project(id):
78+
"""
79+
Update project
80+
Updates project with `id` using the data in request body
81+
---
82+
tags:
83+
- Project
84+
parameters:
85+
- in: path
86+
name: id
87+
type: integer
88+
required: true
89+
description: Id of project to update
90+
- in: body
91+
name: Project
92+
required: true
93+
description: Project object containing data to update
94+
schema:
95+
$ref: "#/definitions/Project"
96+
responses:
97+
200:
98+
description: Project updated successfully
99+
400:
100+
description: Failed to update project
101+
"""
17102
if 'id' in request.get_json():
18103
return "Failed to update project. Request body can not specify project's id.", 400
19104

@@ -26,6 +111,24 @@ def update_project(id):
26111

27112
@app.route("/projects/<id>", methods=['GET'])
28113
def get_project(id):
114+
"""
115+
Get project
116+
Retreives project with `id`
117+
---
118+
tags:
119+
- Project
120+
parameters:
121+
- in: path
122+
name: id
123+
type: integer
124+
required: true
125+
description: Id of the project to retrieve
126+
responses:
127+
200:
128+
description: Project object
129+
404:
130+
description: Project not found
131+
"""
29132
project = projectController.get_project(id=id)
30133

31134
if project:
@@ -35,6 +138,16 @@ def get_project(id):
35138

36139
@app.route("/projects", methods=['GET'])
37140
def get_all_projects():
141+
"""
142+
Get all projects
143+
Retreives all projects
144+
---
145+
tags:
146+
- Project
147+
responses:
148+
200:
149+
description: List of projects
150+
"""
38151
all_projects = projectController.get_all_projects()
39152

40153
projects = [ project.as_dict() for project in all_projects ]
@@ -43,6 +156,24 @@ def get_all_projects():
43156

44157
@app.route("/projects/<id>", methods=['DELETE'])
45158
def delete_project(id):
159+
"""
160+
Delete project
161+
Deletes project with `id`
162+
---
163+
tags:
164+
- Project
165+
parameters:
166+
- in: path
167+
name: id
168+
type: integer
169+
required: true
170+
description: Id of the project to delete
171+
responses:
172+
200:
173+
description: Project deleted successfully
174+
400:
175+
description: Project not found
176+
"""
46177
project = projectController.delete_project(id)
47178

48179
if project:
@@ -53,6 +184,40 @@ def delete_project(id):
53184
# Project Link
54185
@app.route("/projects/<project_id>/links", methods=['POST'])
55186
def create_project_link(project_id):
187+
"""
188+
Create project link
189+
---
190+
tags:
191+
- ProjectLink
192+
parameters:
193+
- in: body
194+
name: ProjectLink
195+
required: true
196+
description: Project link object containing data to update
197+
schema:
198+
$ref: "#/definitions/ProjectLink"
199+
definitions:
200+
- schema:
201+
id: ProjectLink
202+
properties:
203+
id:
204+
type: integer
205+
description: Id of the project link. This property will be assigned a value returned by the database
206+
name:
207+
type: string
208+
description: Name of the project link
209+
url:
210+
type: string
211+
description: Url of the project link
212+
project_id:
213+
type: integer
214+
description: Id of the project
215+
responses:
216+
201:
217+
description: Project link created successfully
218+
400:
219+
description: Failed to create project link
220+
"""
56221
if 'project_id' in request.get_json():
57222
return "Failed to create project link. Request body can not specify link's project_id.", 400
58223

@@ -65,6 +230,35 @@ def create_project_link(project_id):
65230

66231
@app.route("/projects/<project_id>/links/<link_id>", methods=['POST'])
67232
def update_project_link(project_id, link_id):
233+
"""
234+
Update project link
235+
Updates project link with `project_id` and `link_id` using the data in request body
236+
---
237+
tags:
238+
- ProjectLink
239+
parameters:
240+
- in: path
241+
name: project_id
242+
type: integer
243+
required: true
244+
description: Id of the project
245+
- in: path
246+
name: link_id
247+
type: integer
248+
required: true
249+
description: Id of the project link to update
250+
- in: body
251+
name: ProjectLink
252+
required: true
253+
description: Project link object containing data to update
254+
schema:
255+
$ref: "#/definitions/ProjectLink"
256+
responses:
257+
200:
258+
description: Project link updated successfully
259+
400:
260+
description: Failed to update project link
261+
"""
68262
if 'project_id' in request.get_json():
69263
return "Failed to update project link. Request body can not specify link's project_id.", 400
70264
elif 'link_id' in request.get_json():
@@ -79,6 +273,22 @@ def update_project_link(project_id, link_id):
79273

80274
@app.route("/projects/<project_id>/links", methods=['GET'])
81275
def get_all_project_links(project_id):
276+
"""
277+
Get all project links
278+
Retreives all project links with `project_id`
279+
---
280+
tags:
281+
- ProjectLink
282+
parameters:
283+
- in: path
284+
name: project_id
285+
type: integer
286+
required: true
287+
description: Id of the project
288+
responses:
289+
200:
290+
description: List of project links
291+
"""
82292
all_links = projectController.get_all_links(project_id)
83293

84294
links = [ link.as_dict() for link in all_links ]
@@ -87,6 +297,29 @@ def get_all_project_links(project_id):
87297

88298
@app.route("/projects/<project_id>/links/<link_id>", methods=['DELETE'])
89299
def delete_project_link(project_id, link_id):
300+
"""
301+
Delete project link
302+
Deletes project link with `project_id` and `link_id`
303+
---
304+
tags:
305+
- ProjectLink
306+
parameters:
307+
- in: path
308+
name: project_id
309+
type: integer
310+
required: true
311+
description: Id of the project
312+
- in: path
313+
name: link_id
314+
type: integer
315+
required: true
316+
description: Id of the project link to delete
317+
responses:
318+
200:
319+
description: Project link deleted successfully
320+
404:
321+
description: Project link not found
322+
"""
90323
link = projectController.delete_link(project_id, link_id)
91324

92325
if link == None:
@@ -97,6 +330,43 @@ def delete_project_link(project_id, link_id):
97330
# Project Feedback
98331
@app.route("/projects/<project_id>/feedbacks", methods=['POST'])
99332
def create_project_feedback(project_id):
333+
"""
334+
Create project feedback
335+
---
336+
tags:
337+
- ProjectFeedback
338+
parameters:
339+
- in: body
340+
name: ProjectFeedback
341+
required: true
342+
description: Project feedback object containing data to update
343+
schema:
344+
$ref: "#/definitions/ProjectFeedback"
345+
definitions:
346+
- schema:
347+
id: ProjectFeedback
348+
properties:
349+
id:
350+
type: integer
351+
description: Id of the project feedback. This property will be assigned a value returned by the database
352+
user_id:
353+
type: integer
354+
description: Id of the user
355+
project_id:
356+
type: integer
357+
description: Id of the project
358+
rating:
359+
type: string
360+
description: The rating of the project feedback
361+
description:
362+
type: string
363+
description: The body of the project feedback
364+
responses:
365+
201:
366+
description: Project feedback created successfully
367+
400:
368+
description: Failed to create project feedback
369+
"""
100370
if 'project_id' in request.get_json():
101371
return "Failed to create feedback. Request body can not specify feedback's project_id.", 400
102372

@@ -109,6 +379,22 @@ def create_project_feedback(project_id):
109379

110380
@app.route("/projects/<project_id>/feedbacks", methods=['GET'])
111381
def get_all_project_feedbacks(project_id):
382+
"""
383+
Get all project feedbacks
384+
Retreives all project feedbacks with `project_id`
385+
---
386+
tags:
387+
- ProjectFeedback
388+
parameters:
389+
- in: path
390+
name: project_id
391+
type: integer
392+
required: true
393+
description: Id of the project
394+
responses:
395+
200:
396+
description: List of project feedbacks
397+
"""
112398
all_feedbacks = projectController.get_all_feedbacks(project_id)
113399

114400
feedbacks = [ feedback.as_dict() for feedback in all_feedbacks ]
@@ -117,6 +403,29 @@ def get_all_project_feedbacks(project_id):
117403

118404
@app.route("/projects/<project_id>/feedbacks/<feedback_id>", methods=['DELETE'])
119405
def delete_project_feedback(project_id, feedback_id):
406+
"""
407+
Delete project feedback
408+
Deletes project feedback with `project_id` and `feedback_id`
409+
---
410+
tags:
411+
- ProjectFeedback
412+
parameters:
413+
- in: path
414+
name: project_id
415+
type: integer
416+
required: true
417+
description: Id of the project
418+
- in: path
419+
name: feedback_id
420+
type: integer
421+
required: true
422+
description: Id of the project feedback to delete
423+
responses:
424+
200:
425+
description: Project feedback deleted successfully
426+
404:
427+
description: Project feedback not found
428+
"""
120429
feedback = projectController.delete_feedback(project_id, feedback_id)
121430

122431
if feedback == None:

0 commit comments

Comments
 (0)