From fb653292612eddca5b088ed88466c546d1597107 Mon Sep 17 00:00:00 2001 From: Elizabeth Alexander Hunt Date: Sat, 20 Jun 2026 09:40:07 -0700 Subject: Initial commit --- database/chat.go | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 database/chat.go (limited to 'database/chat.go') 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 +} -- cgit v1.3