Subsonic: internet radio, chat, bookmarks, play queue, scanner status endpoints
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
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()
|
||||
}
|
||||
Reference in New Issue
Block a user