package main import ( "database/sql" "fmt" "log" "strconv" "time" _ "github.com/mattn/go-sqlite3" ) func getDb() *sql.DB { db, err := sql.Open("sqlite3", "./tsl.db") if err != nil { log.Fatal(err) } // defer db.Close() _, 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)") return db } func getTasks() TasksList { db := getDb() rows, err := db.Query("SELECT * FROM tasks WHERE NOT done OR dueDate >= date('now')") if err != nil { log.Fatal(err) } defer rows.Close() var tasksList TasksList tasksList.tasks = make(map[string]Task) for rows.Next() { var t Task err := rows.Scan(&t.Id, &t.CreatedAt, &t.Name, &t.Done, &t.DueDate, &t.Context) if err != nil { log.Fatal(err) } date, _ := time.Parse("2006-01-02T15:04:05Z", t.DueDate) t.DueDate = date.Format("2006-01-02") tasksList.tasks[strconv.Itoa(t.Id)] = t } db.Close() return tasksList } func addTask(tp TaskPayload) { db := getDb() _, err := db.Exec("INSERT INTO tasks (name, dueDate, context, done) VALUES (?, ?, ?, ?)", tp.Name, tp.DueDate, tp.Context, false) if err != nil { log.Fatal(err) } fmt.Printf("Task %s added to db", tp.Name) db.Close() } func updateTask(id int, tp TaskPayload) { db := getDb() done := (tp.DoneRaw == "on" || tp.DoneRaw == "true") _, err := db.Exec("UPDATE tasks SET name = ?, dueDate = ?, context = ?, done = ? WHERE id = ?", tp.Name, tp.DueDate, tp.Context, done, id) if err != nil { log.Fatal(err) } fmt.Printf("Task %d updated\n", id) db.Close() }