all repos — tsl @ dd8f1b8c6abd14e2097834d0945b683931b13985

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}