summaryrefslogtreecommitdiff
path: root/http-server/database.go
diff options
context:
space:
mode:
authorAndrew <saintruler@gmail.com>2021-04-28 13:54:25 +0400
committerAndrew <saintruler@gmail.com>2021-04-28 13:54:25 +0400
commit3f672bf327b949a8335fb53b4649bdeef90fdd98 (patch)
treee61d43c8d6d84674aaea7dbbdef2356253088d4a /http-server/database.go
parentf3088f22e319b7183f9ad29d582574d3a06666ed (diff)
Added http server.
Diffstat (limited to 'http-server/database.go')
-rw-r--r--http-server/database.go67
1 files changed, 67 insertions, 0 deletions
diff --git a/http-server/database.go b/http-server/database.go
new file mode 100644
index 0000000..d13e8c1
--- /dev/null
+++ b/http-server/database.go
@@ -0,0 +1,67 @@
+package main
+
+import (
+ "database/sql"
+ _ "github.com/mattn/go-sqlite3"
+)
+
+type SQLConnection struct {
+ db *sql.DB
+}
+
+func (conn *SQLConnection) init(dbpath string) error {
+ var err error
+ conn.db, err = sql.Open("sqlite3", dbpath)
+ return err
+}
+
+func (conn *SQLConnection) registerUser(username string, key string) error {
+ _, err := conn.db.Exec("INSERT INTO users (username, key) VALUES (?, ?)", username, key)
+ return err
+}
+
+func (conn *SQLConnection) checkUserRegistered(username string) (bool, error) {
+ result, err := conn.db.Query("SELECT username FROM users WHERE username = ?", username)
+ if err != nil {
+ return false, err
+ }
+ for result.Next() {
+ _ = result.Close()
+ return true, nil
+ }
+ return false, nil
+}
+
+func (conn *SQLConnection) saveMessage(message Message) error {
+ var err error
+
+ query := `INSERT INTO messages (userId, data, timestamp) values (
+ (SELECT id FROM users WHERE username = ?), ?, ?
+ )`
+ _, err = conn.db.Exec(query, message.User, message.Data, message.Timestamp)
+
+ return err
+}
+
+func (conn *SQLConnection) getMessagesSince(timestamp int64) ([]Message, error) {
+ var err error
+ var msg []Message
+
+ query := `SELECT username, data, timestamp FROM users JOIN messages
+ WHERE users.id = messages.userId AND timestamp > ?
+ ORDER BY timestamp;`
+
+ result, err := conn.db.Query(query, timestamp)
+ if err != nil {
+ return msg, err
+ }
+
+ for result.Next() {
+ var message Message
+ _ = result.Scan(&message.User, &message.Data, &message.Timestamp)
+ msg = append(msg, message)
+ }
+ _ = result.Close()
+
+ return msg, err
+}