1- from flask import Blueprint
1+ from ..models .task import Task
2+ from flask import Blueprint , abort , make_response , request , Response ,jsonify
3+ from ..db import db
4+ from .routes_utilities import validate_model ,create_model ,get_models_with_filters
5+ from datetime import datetime
6+
7+ bp = Blueprint ("tasks_bp" , __name__ , url_prefix = "/tasks" )
8+
9+ @bp .post ("" )
10+ def create_task ():
11+
12+ request_body = request .get_json ()
13+
14+ try :
15+ new_task = Task .from_dict (request_body )
16+ except KeyError :
17+ return jsonify ({"details" : "Invalid data" }), 400
18+
19+ db .session .add (new_task )
20+ db .session .commit ()
21+ return new_task .to_dict (), 201
22+
23+
24+ @bp .get ("" )
25+
26+ def get_all_tasks ():
27+ query = db .select (Task )
28+
29+ id_param = request .args .get ("id" )
30+ if id_param :
31+ query = query .where (Task .id == int (id_param ))
32+
33+ description_param = request .args .get ("description" )
34+ if description_param :
35+ query = query .where (Task .description .ilike (f"%{ description_param } %" ))
36+
37+ title_param = request .args .get ("title" )
38+ sort_param = request .args .get ("sort" )
39+ if title_param :
40+ query = query .where (Task .title .ilike (f"%{ title_param } %" ))
41+
42+ complete_param = request .args .get ("is_complete" )
43+ if complete_param == "true" :
44+
45+ query = query .where (Task .completed_at .is_not (None ))
46+
47+ elif complete_param == "false" :
48+
49+ query = query .where (Task .completed_at .is_ (None ))
50+
51+ #query = query.order_by(Task.id)
52+ if sort_param == "asc" :
53+ query = query = query .order_by (Task .title .asc ())
54+ elif sort_param == "desc" :
55+ query = query .order_by (Task .title .desc ())
56+ else :
57+ query = query .order_by (Task .id )
58+ tasks = db .session .scalars (query )
59+
60+ result_list = []
61+
62+ result_list = [task .to_dict ()for task in tasks ]
63+
64+ return jsonify (result_list or []),200
65+
66+
67+ @bp .get ("/<id>" )
68+
69+ def get_one_task (id ):
70+
71+ task = validate_model (Task ,id )
72+ return task .to_dict ()
73+
74+
75+ @bp .put ("/<id>" )
76+ def replace_task (id ):
77+ task = validate_model (Task , id )
78+
79+ request_body = request .get_json ()
80+
81+ # if request_body["is_complete"]:
82+ # task.completed_at = datetime.utcnow()
83+ # else:
84+ # task.completed_at = None
85+ task .title = request_body ["title" ]
86+
87+ task .description = request_body ["description" ]
88+
89+ db .session .commit ()
90+
91+ return Response (status = 204 ,mimetype = "application/json" )
92+
93+ @bp .delete ("/<id>" )
94+ def del_task (id ):
95+ task = validate_model (Task , id )
96+
97+ db .session .delete (task )
98+
99+ db .session .commit ()
100+
101+ return Response (status = 204 ,mimetype = "application/json" )
102+
103+
104+
105+
106+ @bp .patch ("/<id>/mark_complete" )
107+ def mark_complete (id ):
108+ task = validate_model (Task , id )
109+ task .completed_at = datetime .utcnow ()
110+ db .session .commit ()
111+ return Response (status = 204 , mimetype = "application/json" )
112+
113+
114+ @bp .patch ("/<id>/mark_incomplete" )
115+ def mark_incomplete (id ):
116+ task = validate_model (Task , id )
117+
118+ task .completed_at = None
119+ db .session .commit ()
120+ return Response (status = 204 , mimetype = "application/json" )
0 commit comments