Files

44 lines
1.2 KiB
Go

package database
import (
"database/sql"
"time"
"git.noroutes.net/NoRoutes/vibetunes/internal/idgen"
)
type ChatMessage struct {
Username string
Message string
CreatedAt time.Time
}
func AddChatMessage(db *sql.DB, userID, message string) error {
_, err := db.Exec(`INSERT INTO chat_messages (id, user_id, message) VALUES (?, ?, ?)`, idgen.New("cm"), userID, message)
return err
}
// ListChatMessagesSince returns chat messages newer than since (pass the
// zero time for all messages), oldest first, capped at 500 — a chat
// room does not need unbounded history in one response.
func ListChatMessagesSince(db *sql.DB, since time.Time) ([]ChatMessage, error) {
rows, err := db.Query(`SELECT u.username, c.message, c.created_at FROM chat_messages c
JOIN users u ON u.id = c.user_id
WHERE c.created_at > ? ORDER BY c.created_at ASC LIMIT 500`, since.UTC().Format(timeLayout))
if err != nil {
return nil, err
}
defer rows.Close()
var out []ChatMessage
for rows.Next() {
var m ChatMessage
var createdAt string
if err := rows.Scan(&m.Username, &m.Message, &createdAt); err != nil {
return nil, err
}
m.CreatedAt, _ = parseTime(createdAt)
out = append(out, m)
}
return out, rows.Err()
}