summaryrefslogtreecommitdiffstats
path: root/storage/storage.go
diff options
context:
space:
mode:
authorbt <bt@rctt.net>2026-05-16 17:46:36 +0200
committerbt <bt@rctt.net>2026-05-16 22:46:48 +0200
commit3169d07cc6514280ad3e51d1c6c78802b06b9f57 (patch)
tree4f8db6ffb0b580d0d92f447e71940fa3c160b376 /storage/storage.go
parent83be96382f60235ce3051dda30d1358e389332a7 (diff)
downloadsolec-3169d07cc6514280ad3e51d1c6c78802b06b9f57.tar.gz
solec-3169d07cc6514280ad3e51d1c6c78802b06b9f57.zip
Save messages in a database
Diffstat (limited to 'storage/storage.go')
-rw-r--r--storage/storage.go61
1 files changed, 61 insertions, 0 deletions
diff --git a/storage/storage.go b/storage/storage.go
new file mode 100644
index 0000000..9207761
--- /dev/null
+++ b/storage/storage.go
@@ -0,0 +1,61 @@
+package storage
+
+import (
+ "database/sql"
+ "fmt"
+ "time"
+
+ "go.rctt.net/solec/core"
+)
+
+type Database struct {
+ *sql.DB
+}
+
+const initSql = `
+ CREATE TABLE IF NOT EXISTS messages
+ (id INTEGER NOT NULL PRIMARY KEY, source STRING, target STRING, timestamp INT, content STRING);
+`
+
+func InitDb(path string) (*Database, error) {
+ db, err := sql.Open("sqlite3", path)
+ if err != nil {
+ return nil, err
+ }
+
+ _, err = db.Exec(initSql)
+ return &Database{db}, nil
+}
+
+func (db *Database) Write(msg core.Message) (err error) {
+ fmt.Println(msg.Timestamp)
+
+ _, err = db.Exec(
+ "INSERT INTO messages (source, target, timestamp, content) VALUES (?, ?, ?, ?);",
+ msg.Source, msg.Target, msg.Timestamp.Unix(), msg.Content,
+ )
+
+ return err
+}
+
+func (db *Database) Read(channel string, since time.Time, num int, offset int) (history []core.Message, err error) {
+ rows, err := db.Query(
+ "SELECT source, target, timestamp, content FROM messages WHERE timestamp > ? LIMIT ? OFFSET ?",
+ since.Unix(), num, offset,
+ )
+ defer rows.Close()
+
+ if err != nil {
+ return history, err
+ }
+
+ for rows.Next() {
+ var msg core.Message
+ if err := rows.Scan(&msg.Source, &msg.Target, &msg.Timestamp, &msg.Content); err != nil {
+ return history, err
+ }
+ history = append(history, msg)
+ }
+
+ return history, nil
+}