aboutsummaryrefslogtreecommitdiff
path: root/todo/db/tasks.py
diff options
context:
space:
mode:
Diffstat (limited to 'todo/db/tasks.py')
-rw-r--r--todo/db/tasks.py103
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)