-
Notifications
You must be signed in to change notification settings - Fork 0
/
mutations.py
90 lines (78 loc) · 2.41 KB
/
mutations.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
from datetime import datetime
from ariadne import convert_kwargs_to_snake_case
from api import db
from api.models import Todo
@convert_kwargs_to_snake_case
def resolve_create_todo(obj, info, description, due_date):
try:
due_date = datetime.strptime(due_date, '%d-%m-%Y').date()
todo = Todo(
description=description, due_date=due_date
)
db.session.add(todo)
db.session.commit()
payload = {
"success": True,
"todo": todo.to_dict()
}
except ValueError: # date format errors
payload = {
"success": False,
"errors": [f"Incorrect date format provided. Date should be in "
f"the format dd-mm-yyyy"]
}
return payload
@convert_kwargs_to_snake_case
def resolve_mark_done(obj, info, todo_id):
try:
todo = Todo.query.get(todo_id)
todo.completed = True
db.session.add(todo)
db.session.commit()
payload = {
"success": True,
"todo": todo.to_dict()
}
except AttributeError: # todo not found
payload = {
"success": False,
"errors": [f"Todo matching id {todo_id} was not found"]
}
return payload
@convert_kwargs_to_snake_case
def resolve_delete_todo(obj, info, todo_id):
try:
todo = Todo.query.get(todo_id)
db.session.delete(todo)
db.session.commit()
payload = {"success": True}
except AttributeError:
payload = {
"success": False,
"errors": [f"Todo matching id {todo_id} not found"]
}
return payload
@convert_kwargs_to_snake_case
def resolve_update_due_date(obj, info, todo_id, new_date):
try:
todo = Todo.query.get(todo_id)
if todo:
todo.due_date = datetime.strptime(new_date, '%d-%m-%Y').date()
db.session.add(todo)
db.session.commit()
payload = {
"success": True,
"todo": todo.to_dict()
}
except ValueError: # date format errors
payload = {
"success": False,
"errors": ["Incorrect date format provided. Date should be in "
"the format dd-mm-yyyy"]
}
except AttributeError: # todo not found
payload = {
"success": False,
"errors": [f"Todo matching id {todo_id} not found"]
}
return payload