92 lines
1.5 KiB
Go
92 lines
1.5 KiB
Go
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
|
|
}
|