From 61fa862c8e7054f13373317fc9a6a78cbb37e313 Mon Sep 17 00:00:00 2001 From: Aki Date: Wed, 8 Jul 2020 00:57:18 +0200 Subject: Initial backend that collects entries --- entry.go | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 entry.go (limited to 'entry.go') diff --git a/entry.go b/entry.go new file mode 100644 index 0000000..544a8c5 --- /dev/null +++ b/entry.go @@ -0,0 +1,62 @@ +package main + +import ( + "github.com/jmoiron/sqlx" + _ "github.com/mattn/go-sqlite3" + "log" + "os" + "time" +) + +const schema = ` +CREATE TABLE IF NOT EXISTS entries ( + id INTEGER PRIMARY KEY, + location TEXT NOT NULL, + referrer TEXT, + started_at DATETIME NOT NULL, + time_spent INTEGER NOT NULL, + scrolled_to REAL NOT NULL +);` + +type Entry struct { + Id int `db:"id"` + Location string `json:"location" db:"location"` + Referrer string `json:"referrer" db:"referrer"` + StartedAt time.Time `json:"startedAt" db:"started_at"` + TimeSpent int `json:"timeSpent" db:"time_spent"` + ScrolledTo float32 `json:"scrolledTo" db:"scrolled_to"` +} + +var db *sqlx.DB + +func InitEntries() { + file := os.Getenv("STATSDB") + if file == "" { + log.Println("Defaulting to STATSDB=./stats.db") + file = "./stats.db" + } + + var err error + db, err = sqlx.Connect("sqlite3", file) + if err != nil { + log.Fatalln(err) + } + + _, err = db.Exec(schema) + if err != nil { + log.Fatalln("Could not initialize schema") + log.Fatalln(err) + } +} + +func CloseEntries() { + db.Close() +} + +func InsertEntry(entry *Entry) error { + const query = ` + INSERT INTO entries (location, referrer, started_at, time_spent, scrolled_to) + VALUES (:location, :referrer, :started_at, :time_spent, :scrolled_to);` + _, err := db.NamedExec(query, entry) + return err +} -- cgit v1.1