diff options
Diffstat (limited to 'todo/db/tasks.py')
-rw-r--r-- | todo/db/tasks.py | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/todo/db/tasks.py b/todo/db/tasks.py new file mode 100644 index 0000000..fc23bf0 --- /dev/null +++ b/todo/db/tasks.py @@ -0,0 +1,103 @@ +from sqlite3 import Cursor +import time +from typing import List + +from todo.model.task import Task, ValidTaskForm +from todo.model.status import Status +from todo.model import difficulty, priority, status + +def get(cursor: Cursor, s: Status) -> List[Task]: + cursor.execute( + " SELECT" + " id," + " created_at," + " updated_at," + " name," + " duration," + " difficulty," + " priority," + " description" + " FROM" + " tasks" + " WHERE" + " status = ?", + (status.format(s),)) + + res = [] + + for task in cursor.fetchall(): + res.append(Task( + id = task[0], + created_at = task[1], + updated_at = task[2], + name = task[3], + duration = task[4], + difficulty = difficulty.parse(task[5]), + priority = priority.parse(task[6]), + description = task[7] + )) + + return res + +def insert(cursor: Cursor, s: Status, form: ValidTaskForm): + now = int(time.time()) + cursor.execute( + " INSERT INTO tasks(" + " created_at," + " updated_at," + " name," + " duration," + " difficulty," + " priority," + " description," + " status" + " ) VALUES (?, ?, ?, ?, ?, ?, ?, ?)", + (now, now, form.name, form.duration, difficulty.format(form.difficulty), priority.format(form.priority), form.description, status.format(s))) + + return Task( + id = cursor.lastrowid, + created_at = now, + updated_at = now, + name = form.name, + duration = form.duration, + difficulty = form.difficulty, + priority = form.priority, + description = form.description + ) + +def update(cursor: Cursor, task: Task, form: ValidTaskForm): + now = int(time.time()) + + cursor.execute( + " UPDATE tasks SET" + " updated_at = ?," + " name = ?," + " duration = ?," + " difficulty = ?," + " priority = ?," + " description = ?" + " WHERE id = ?", + (now, form.name, form.duration, difficulty.format(form.difficulty), priority.format(form.priority), form.description, task.id)) + + return Task( + id = task.id, + created_at = task.created_at, + updated_at = now, + name = form.name, + duration = form.duration, + difficulty = form.difficulty, + priority = form.priority, + description = form.description + ) + +def delete(cursor: Cursor, ids: List[int]): + if len(ids) >= 1: + cursor.execute( + "DELETE FROM tasks WHERE id IN (%s)" % ",".join("?"*len(ids)), + ids) + +def update_status(cursor: Cursor, ids: List[int], s: Status): + if len(ids) >= 1: + cursor.execute( + "UPDATE tasks SET status = ? WHERE id IN (%s)" % ",".join("?"*len(ids)), + [status.format(s)] + ids) |