diff options
Diffstat (limited to 'http-server/database.go')
| -rw-r--r-- | http-server/database.go | 67 |
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 +} |