summaryrefslogtreecommitdiff
path: root/database/chat.go
diff options
context:
space:
mode:
authorElizabeth Alexander Hunt <me@liz.coffee>2026-06-20 09:40:07 -0700
committerElizabeth Alexander Hunt <me@liz.coffee>2026-06-20 09:40:07 -0700
commitfb653292612eddca5b088ed88466c546d1597107 (patch)
tree900ed32e066812688858ed3bb15128c41bb78054 /database/chat.go
downloadpenguins.lan-fb653292612eddca5b088ed88466c546d1597107.tar.gz
penguins.lan-fb653292612eddca5b088ed88466c546d1597107.zip
Initial commit
Diffstat (limited to 'database/chat.go')
-rw-r--r--database/chat.go55
1 files changed, 55 insertions, 0 deletions
diff --git a/database/chat.go b/database/chat.go
new file mode 100644
index 0000000..66550cd
--- /dev/null
+++ b/database/chat.go
@@ -0,0 +1,55 @@
+package database
+
+import (
+ "database/sql"
+ "log"
+ "time"
+
+ _ "github.com/mattn/go-sqlite3"
+)
+
+type ChatMessage struct {
+ ID string `json:"id"`
+ UserID string `json:"user_id"`
+ Nick string `json:"nick"`
+ Body string `json:"body"`
+ CreatedAt time.Time `json:"created_at"`
+}
+
+func GetRecentChat(db *sql.DB, limit int) ([]ChatMessage, error) {
+ rows, err := db.Query(
+ `SELECT c.id, c.user_id, u.username, c.body, c.created_at
+ FROM chat c JOIN users u ON u.id = c.user_id
+ ORDER BY c.created_at DESC LIMIT ?`,
+ limit,
+ )
+ if err != nil {
+ return nil, err
+ }
+ defer rows.Close()
+
+ messages := []ChatMessage{}
+ for rows.Next() {
+ var msg ChatMessage
+ if err := rows.Scan(&msg.ID, &msg.UserID, &msg.Nick, &msg.Body, &msg.CreatedAt); err != nil {
+ return nil, err
+ }
+ messages = append([]ChatMessage{msg}, messages...)
+ }
+
+ return messages, rows.Err()
+}
+
+func SaveChatMessage(db *sql.DB, msg *ChatMessage) (*ChatMessage, error) {
+ log.Println("saving chat message", msg.ID)
+
+ msg.CreatedAt = time.Now()
+ _, err := db.Exec(
+ "INSERT INTO chat (id, user_id, body, created_at) VALUES (?, ?, ?, ?)",
+ msg.ID, msg.UserID, msg.Body, msg.CreatedAt,
+ )
+ if err != nil {
+ return nil, err
+ }
+ return msg, nil
+}