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 }