aboutsummaryrefslogtreecommitdiff
path: root/src/db/tasks.py
blob: efb88d621293648f2d708218abde19f63dde531e (plain)
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
91
92
93
94
95
96
97
98
99
100
101
102
103
from sqlite3 import Cursor
import time
from typing import List

from model.task import Task, ValidTaskForm
from model.status import Status
from 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)