1
1
"""
2
2
Flask Application
3
3
"""
4
-
5
4
from flask import Flask , jsonify , request
6
- from models import Experience , Education , Project , Skill , User
7
- from utils import get_suggestion , check_phone_number , correct_spelling
8
-
5
+ from models import Experience , Education , Skill , Project
6
+ from utils import check_phone_number , correct_spelling , get_suggestion , load_data
9
7
10
8
app = Flask (__name__ )
11
9
12
- data = {
13
- "user" : [
User (
"Jackie Stewart" ,
"+4478322678" ,
"[email protected] " )],
14
- "experience" : [
15
- Experience (
16
- "Software Developer" ,
17
- "A Cool Company" ,
18
- "October 2022" ,
19
- "Present" ,
20
- "Writing Python Code" ,
21
- "example-logo.png" ,
22
- ),
23
- Experience (
24
- "Intern" ,
25
- "A Nice Company" ,
26
- "October 2021" ,
27
- "December 2021" ,
28
- "Writing Scripts" ,
29
- "example-logo.png" ,
30
- ),
31
- ],
32
- "education" : [
33
- Education (
34
- "Computer Science" ,
35
- "University of Tech" ,
36
- "September 2019" ,
37
- "July 2022" ,
38
- "80%" ,
39
- "example-logo.png" ,
40
- )
41
- ],
42
- "skill" : [
43
- Skill ("Python" ,
44
- "1-2 Years" ,
45
- "example-logo.png" )
46
- ],
47
- "project" : [
48
- Project (
49
- title = "Sample Project" ,
50
- description = "A sample project" ,
51
- technologies = ["Python" , "Flask" ],
52
- link = "https://github.com/username/sample-project"
53
- )
54
- ]
55
- }
56
-
10
+ data = load_data ('data/resume.json' )
57
11
58
12
@app .route ("/test" )
59
13
def hello_world ():
@@ -64,59 +18,56 @@ def hello_world():
64
18
65
19
66
20
@app .route ("/resume/user" , methods = ["GET" , "POST" , "PUT" ])
67
- def user ():
21
+ def user_route ():
68
22
"""
69
- Handles User information
23
+ Handle GET, POST, and PUT requests for user data.
24
+ GET: Retrieve all users
25
+ POST: Create a new user
26
+ PUT: Update an existing user
70
27
"""
28
+ if request .method == 'GET' :
29
+ return jsonify (data ['user' ]), 200
71
30
72
- # defining sub function to reduce number of returns
73
- def get_users ():
74
- return jsonify ([user .__dict__ for user in data ["user" ]]), 200
75
-
76
- def add_user (body ):
77
- # retrieve user's information.
78
- name = body ["name" ]
79
- phone_number = body ["phone_number" ]
80
- email = body ["email_address" ]
81
- # store the new user information.
82
- if not check_phone_number (phone_number ):
83
- return jsonify ({"error" : "Incorrect phone number !" }), 400
84
- new_user = User (name , phone_number , email )
85
- data ["user" ].append (new_user )
86
- return jsonify (new_user .__dict__ ), 201
87
-
88
- # edit the user information.
89
- def edit_user (body ):
90
- name = body ["name" ]
91
- phone_number = body ["phone_number" ]
92
- email = body ["email_address" ]
93
- for i , user_ in enumerate (data ["user" ]):
94
- if user_ .email_address == email :
95
- if not check_phone_number (phone_number ):
96
- return jsonify ({"error" : "Incorrect phone number !" }), 400
97
- data ["user" ][i ] = User (name , phone_number , email )
98
- return jsonify (data ["user" ][i ].__dict__ ), 200
99
- return jsonify ({"error" : "User not found !" }), 404
31
+ body = request .get_json ()
32
+ if not body or not all (key in body for key in ['name' , 'phone_number' , 'email_address' ]):
33
+ return jsonify ({"error" : "Missing required fields" }), 400
100
34
101
- if request .method == "GET" :
102
- return get_users ()
103
- if request .method == "POST" :
104
- body = request .get_json ()
105
- return add_user (body )
106
- if request .method == "PUT" :
107
- body = request .get_json ()
108
- return edit_user (body )
109
- return jsonify ({"error" : "Unsupported request method !" }), 405
35
+ name = body ['name' ]
36
+ phone_number = body ['phone_number' ]
37
+ email = body ['email_address' ]
38
+ if not check_phone_number (phone_number ):
39
+ return jsonify ({"error" : "Incorrect phone number" }), 400
40
+
41
+ if request .method == 'POST' :
42
+ # Create a new user and add it to the data
43
+ new_user = {
44
+ 'name' : name ,
45
+ 'phone_number' : phone_number ,
46
+ 'email_address' : email
47
+ }
48
+ data ['user' ].append (new_user )
49
+ return jsonify (new_user ), 201
50
+
51
+ # Handle PUT request
52
+ for i , current_user in enumerate (data ['user' ]):
53
+ if current_user ['email_address' ] == email :
54
+ data ['user' ][i ] = {
55
+ 'name' : name ,
56
+ 'phone_number' : phone_number ,
57
+ 'email_address' : email
58
+ }
59
+ return jsonify (data ['user' ][i ]), 200
60
+
61
+ return jsonify ({"error" : "User not found !" }), 404
110
62
111
63
112
64
@app .route ("/resume/experience" , methods = ["GET" , "POST" , 'PUT' ])
113
65
def experience ():
114
66
"""
115
67
Handle experience requests
116
68
"""
117
- if request .method == 'GET' :
118
- return jsonify (
119
- {"experience" : [exp .__dict__ for exp in data ["experience" ]]})
69
+ if request .method == "GET" :
70
+ return jsonify ({"experience" : list (data ["experience" ])}), 200
120
71
121
72
if request .method == "POST" :
122
73
new_experience = request .json
@@ -130,7 +81,7 @@ def experience():
130
81
new_exp ["logo" ],
131
82
)
132
83
data ["experience" ].append (experience_instance )
133
- return jsonify ({"id" : len (data ["experience" ]) - 1 })
84
+ return jsonify ({"id" : len (data ["experience" ]) - 1 }), 201
134
85
135
86
if request .method == 'PUT' :
136
87
body = request .get_json ()
@@ -145,10 +96,9 @@ def experience():
145
96
146
97
new_experience_order .append (
147
98
Experience (title , company , start_date , end_date , description , logo )
148
- )
99
+ )
149
100
data ['experience' ] = new_experience_order
150
-
151
- return_data = [item .__dict__ for item in data ['experience' ]]
101
+ return_data = list (data ['experience' ])
152
102
return jsonify (return_data ), 200
153
103
154
104
return jsonify ({"error" : "Unsupported request method !" }), 405
@@ -158,9 +108,9 @@ def education():
158
108
"""
159
109
Handles education requests
160
110
"""
161
- if request . method == 'GET' :
162
- return jsonify (
163
- {"education" : [ edu . __dict__ for edu in data ["education" ]]})
111
+
112
+ if request . method == "GET" :
113
+ return jsonify ( {"education" : list ( data ["education" ])}), 200
164
114
165
115
if request .method == "POST" :
166
116
new_education = request .json
@@ -174,7 +124,7 @@ def education():
174
124
new_edu ["logo" ],
175
125
)
176
126
data ["education" ].append (education_instance )
177
- return jsonify ({"id" : len (data ["education" ]) - 1 })
127
+ return jsonify ({"id" : len (data ["education" ]) - 1 }), 201
178
128
179
129
if request .method == 'PUT' :
180
130
body = request .get_json ()
@@ -189,9 +139,10 @@ def education():
189
139
new_education_order .append (Education (course , school , start_date , end_date , grade , logo ))
190
140
data ['education' ] = new_education_order
191
141
192
- return_data = [ item . __dict__ for item in data ['education' ]]
142
+ return_data = list ( data ['education' ])
193
143
return jsonify (return_data ), 200
194
- return jsonify ({})
144
+ return jsonify ({}), 405
145
+
195
146
196
147
197
148
@app .route ("/resume/skill" , methods = ["GET" , "POST" , 'PUT' ])
@@ -201,7 +152,7 @@ def skill():
201
152
"""
202
153
203
154
if request .method == "GET" :
204
- return jsonify ({"skills" : [ skill . __dict__ for skill in data ["skill" ]]})
155
+ return jsonify ({"skills" : list ( data ["skill" ])}), 200
205
156
206
157
if request .method == "POST" :
207
158
new_skill = request .json
@@ -212,7 +163,7 @@ def skill():
212
163
skill_data ["logo" ]
213
164
)
214
165
data ["skill" ].append (skill_instance )
215
- return jsonify ({"id" : len (data ["skill" ]) - 1 })
166
+ return jsonify ({"id" : len (data ["skill" ]) - 1 }), 201
216
167
217
168
if request .method == 'PUT' :
218
169
body = request .get_json ()
@@ -227,7 +178,7 @@ def skill():
227
178
return_data = [item .__dict__ for item in data ['skill' ]]
228
179
return jsonify (return_data ), 200
229
180
230
- return jsonify ({})
181
+ return jsonify ({}), 405
231
182
232
183
233
184
@app .route ('/resume/project' , methods = ['GET' , 'POST' , 'PUT' , 'DELETE' ])
@@ -245,7 +196,7 @@ def validate_id(project_id):
245
196
if not project_id .isdigit ():
246
197
raise ValueError ("Invalid id" )
247
198
248
- # check if the id is within the range of the project list
199
+ # Check if the id is within the range of the project list
249
200
int_id = int (project_id )
250
201
if int_id < 0 or int_id >= len (data ['project' ]):
251
202
raise ValueError ("Project not found" )
@@ -264,7 +215,7 @@ def get_project(project_id):
264
215
return jsonify ({"error" : str (error )}), 400
265
216
266
217
return jsonify ([
267
- {** project . __dict__ , "id" : str (index )}
218
+ {** project , "id" : str (index )}
268
219
for index , project in enumerate (data ['project' ])
269
220
]), 200
270
221
@@ -301,7 +252,7 @@ def edit_project(project_id, body):
301
252
if hasattr (data ['project' ][project_id ], key ):
302
253
setattr (data ['project' ][project_id ], key , value )
303
254
else :
304
- return jsonify ({"error" : f"invalid field: { key } " }), 400
255
+ return jsonify ({"error" : f"Invalid field: { key } " }), 400
305
256
306
257
return jsonify ({** data ['project' ][project_id ].__dict__ , "id" : str (project_id )}), 200
307
258
@@ -338,6 +289,7 @@ def delete_project(project_id):
338
289
339
290
return jsonify ({"error" : "Unsupported request method" }), 405
340
291
292
+
341
293
@app .route ("/resume/spellcheck" , methods = ["POST" ])
342
294
def spellcheck ():
343
295
"""
@@ -363,4 +315,4 @@ def get_description_suggestion():
363
315
if not description or not description_type :
364
316
return jsonify ({"error" : "Description and type are required" }), 400
365
317
suggestion = get_suggestion (description , description_type )
366
- return jsonify ({"suggestion" : suggestion })
318
+ return jsonify ({"suggestion" : suggestion }), 200
0 commit comments