@@ -48,13 +48,15 @@ def hello_world():
4848 return jsonify ({"message" : "Hello, World!" })
4949
5050
51- @app .route ('/resume/experience' , methods = ['GET' , 'POST' , 'DELETE' ])
51+ @app .route ('/resume/experience' , methods = ['GET' , 'POST' , 'PUT' , ' DELETE' ])
5252def experience ():
5353 '''
5454 Handle experience requests
5555 '''
56+ response = {}
57+ status = 200
5658 if request .method == 'GET' :
57- experience_list = [
59+ response = [
5860 {
5961 "title" : exp .title ,
6062 "company" : exp .company ,
@@ -65,9 +67,7 @@ def experience():
6567 }
6668 for exp in data ['experience' ]
6769 ]
68- return jsonify (experience_list )
69-
70- if request .method == 'POST' :
70+ elif request .method == 'POST' :
7171 new_experience = Experience (
7272 title = request .json ['title' ],
7373 company = request .json ['company' ],
@@ -77,12 +77,41 @@ def experience():
7777 logo = request .json ['logo' ]
7878 )
7979 data ['experience' ].append (new_experience )
80- index = len (data ['experience' ]) - 1
81- return jsonify ({"id" : index })
82-
83- if request .method == 'DELETE' :
84- return _delete_experience (request .get_json ())
85- return jsonify ({})
80+ response = {"id" : len (data ['experience' ]) - 1 }
81+ elif request .method == 'PUT' :
82+ body = request .get_json ()
83+ if not body or 'id' not in body :
84+ response = {"error" : "ID is required for update" }
85+ status = 400
86+ else :
87+ try :
88+ item_id = int (body ['id' ])
89+ except (ValueError , TypeError ):
90+ response = {"error" : "ID must be an integer" }
91+ status = 400
92+ else :
93+ if item_id < 0 or item_id >= len (data ['experience' ]):
94+ response = {"error" : "ID is out of range" }
95+ status = 400
96+ else :
97+ try :
98+ updated_experience = Experience (
99+ title = body ['title' ],
100+ company = body ['company' ],
101+ start_date = body ['start_date' ],
102+ end_date = body ['end_date' ],
103+ description = body ['description' ],
104+ logo = body ['logo' ]
105+ )
106+ except KeyError as exc :
107+ response = {"error" : f"Missing field: { exc } " }
108+ status = 400
109+ else :
110+ data ['experience' ][item_id ] = updated_experience
111+ response = {"id" : item_id }
112+ elif request .method == 'DELETE' :
113+ response , status = _delete_experience (request .get_json ())
114+ return jsonify (response ), status
86115
87116
88117@app .route ('/resume/experience/<int:index>' , methods = ['GET' ])
@@ -161,15 +190,15 @@ def skill(): # pylint: disable=too-many-return-statements
161190
162191def _delete_experience (body ):
163192 if not body or 'id' not in body :
164- return jsonify ( {"error" : "ID is required for deletion" }) , 400
193+ return {"error" : "ID is required for deletion" }, 400
165194 try :
166195 item_id = int (body ['id' ])
167196 except (ValueError , TypeError ):
168- return jsonify ( {"error" : "ID must be an integer" }) , 400
197+ return {"error" : "ID must be an integer" }, 400
169198 if item_id < 0 or item_id >= len (data ["experience" ]):
170- return jsonify ( {"error" : "ID is out of range" }) , 400
199+ return {"error" : "ID is out of range" }, 400
171200 data ["experience" ].pop (item_id )
172- return jsonify ( {"deleted" : item_id }) , 200
201+ return {"deleted" : item_id }, 200
173202
174203def _delete_skill (body ):
175204 if not body or 'id' not in body :
0 commit comments