db.go (view raw)
1package main
2
3import (
4 "database/sql"
5 "fmt"
6 "log"
7 "strconv"
8 "time"
9
10 _ "github.com/mattn/go-sqlite3"
11)
12
13func getDb() *sql.DB {
14 db, err := sql.Open("sqlite3", "./tsl.db")
15 if err != nil {
16 log.Fatal(err)
17 }
18 // defer db.Close()
19
20 _, err = db.Exec("CREATE TABLE IF NOT EXISTS tasks (id INTEGER PRIMARY KEY, createdAt DATE DEFAULT current_date, name TEXT NOT NULL, done BOOLEAN DEFAULT false, dueDate DATE, context TEXT)")
21
22 return db
23}
24
25func getTasks() TasksList {
26 db := getDb()
27 rows, err := db.Query("SELECT * FROM tasks WHERE NOT done OR dueDate >= date('now')")
28 if err != nil {
29 log.Fatal(err)
30 }
31 defer rows.Close()
32 var tasksList TasksList
33 tasksList.tasks = make(map[string]Task)
34 for rows.Next() {
35 var t Task
36 err := rows.Scan(&t.Id, &t.CreatedAt, &t.Name, &t.Done, &t.DueDate, &t.Context)
37 if err != nil {
38 log.Fatal(err)
39 }
40
41 date, _ := time.Parse("2006-01-02T15:04:05Z", t.DueDate)
42 t.DueDate = date.Format("2006-01-02")
43 tasksList.tasks[strconv.Itoa(t.Id)] = t
44
45 }
46
47 db.Close()
48 return tasksList
49}
50
51func addTask(tp TaskPayload) {
52 db := getDb()
53 _, err := db.Exec("INSERT INTO tasks (name, dueDate, context, done) VALUES (?, ?, ?, ?)", tp.Name, tp.DueDate, tp.Context, false)
54 if err != nil {
55 log.Fatal(err)
56 }
57 fmt.Printf("Task %s added to db", tp.Name)
58 db.Close()
59}
60
61func updateTask(id int, tp TaskPayload) {
62 db := getDb()
63 done := (tp.DoneRaw == "on" || tp.DoneRaw == "true")
64 _, err := db.Exec("UPDATE tasks SET name = ?, dueDate = ?, context = ?, done = ? WHERE id = ?", tp.Name, tp.DueDate, tp.Context, done, id)
65 if err != nil {
66 log.Fatal(err)
67 }
68 fmt.Printf("Task %d updated\n", id)
69 db.Close()
70}