femMemos/db.go

92 lines
1.5 KiB
Go
Raw Normal View History

2022-08-12 21:10:29 -07:00
package main
import (
"database/sql"
"errors"
"log"
"os"
"time"
)
type Memo struct {
ID int64 `json:"id"`
Time string `json:"time"`
Message string `json:"message"`
}
func openOrCreateDb(name string) *sql.DB {
new := false
if _, err := os.Stat(name); errors.Is(err, os.ErrNotExist) {
log.Println("memos db does not exist, creating.")
new = true
}
db, err := sql.Open("sqlite3", name)
if err != nil {
log.Fatal(err)
}
if new {
_, err = db.Exec(`create table memos (
ID integer primary key autoincrement,
time text not null,
Message text not null
)`)
if err != nil {
log.Fatal(err)
}
}
return db
}
func insertMemo(db *sql.DB, message string) int64 {
tx, err := db.Begin()
if err != nil {
log.Fatal(err)
}
stmt, err := tx.Prepare("insert into memos (time, Message) values (?, ?)")
if err != nil {
log.Fatal(err)
}
defer stmt.Close()
timeStr := time.Now().Format(time.RFC3339)
row, err := stmt.Exec(timeStr, message)
if err != nil {
log.Fatal(err)
}
err = tx.Commit()
if err != nil {
log.Fatal(err)
}
id, err := row.LastInsertId()
if err != nil {
log.Fatal(err)
}
return id
}
func getMemos(db *sql.DB) []Memo {
rows, err := db.Query("select * from memos order by id desc")
if err != nil {
log.Fatal(err)
}
defer rows.Close()
var memos []Memo
for rows.Next() {
var memo Memo
err = rows.Scan(&memo.ID, &memo.Time, &memo.Message)
if err != nil {
log.Fatal(err)
}
memos = append(memos, memo)
}
err = rows.Err()
if err != nil {
log.Fatal(err)
}
return memos
}