diff options
Diffstat (limited to 'database/messages.go')
-rw-r--r-- | database/messages.go | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/database/messages.go b/database/messages.go new file mode 100644 index 0000000..7646b50 --- /dev/null +++ b/database/messages.go @@ -0,0 +1,49 @@ +package database + +import ( + "database/sql" + "time" +) + +type Message struct { + Id string + FrenId string + Message string + Time time.Time + FrenSent bool +} + +type ListMessageQuery struct { + FrenId string + Before time.Time + Limit int +} + +func ListMessages(dbConn *sql.DB, query ListMessageQuery) ([]Message, error) { + rows, err := dbConn.Query(`SELECT id, fren_id, message, time, fren_sent FROM messages WHERE fren_id = ? AND time < ? ORDER BY time ASC LIMIT ?;`, query.FrenId, query.Before, query.Limit) + if err != nil { + return nil, err + } + defer rows.Close() + + messages := []Message{} + for rows.Next() { + var message Message + err := rows.Scan(&message.Id, &message.FrenId, &message.Message, &message.Time, &message.FrenSent) + if err != nil { + return nil, err + } + messages = append(messages, message) + } + + return messages, nil +} + +func SaveMessage(db *sql.DB, message *Message) (*Message, error) { + _, err := db.Exec("INSERT OR REPLACE INTO messages (id, fren_id, message, time, fren_sent) VALUES (?, ?, ?, ?, ?)", message.Id, message.FrenId, message.Message, message.Time, message.FrenSent) + + if err != nil { + return nil, err + } + return message, nil +} |