add fetching message history

This commit is contained in:
2026-04-11 20:03:09 +02:00
parent 1c7d0a691d
commit 1c58954613
6 changed files with 323 additions and 37 deletions
+36 -1
View File
@@ -57,7 +57,7 @@ func DbInit(ctx context.Context) {
CREATE TABLE IF NOT EXISTS messages (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
sender_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
receiver_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
receiver_id UUID NOT NULL REFERENCES user_connections(id) ON DELETE CASCADE,
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
content TEXT NOT NULL,
is_group_message BOOLEAN DEFAULT FALSE
@@ -217,12 +217,47 @@ func DbConnectionUpdateState(ctx context.Context, conn *Connection) error {
}
func DbMessageSave(ctx context.Context, message *Message) error {
if message.Id != (uuid.UUID{}) {
_, err := dbConn.Exec(ctx, `
INSERT INTO messages (id, sender_id, receiver_id, created_at, content, is_group_message) VALUES ($1, $2, $3, $4, $5, $6)
`, message.Id, message.Sender, message.Receiver, message.CreatedAt, message.Content, message.IsGroupMessage)
return err
}
return dbConn.QueryRow(ctx, `
INSERT INTO messages (sender_id, receiver_id, created_at, content, is_group_message) VALUES ($1, $2, $3, $4, $5)
RETURNING id
`, message.Sender, message.Receiver, message.CreatedAt, message.Content, message.IsGroupMessage).Scan(&message.Id)
}
func DbConnectionGetMessagesBefore(ctx context.Context, before time.Time, connection uuid.UUID, cap uint32) ([]*Message, error) {
rows, err := dbConn.Query(ctx, `
SELECT id, sender_id, receiver_id, created_at, content, is_group_message
FROM (
SELECT id, sender_id, receiver_id, created_at, content, is_group_message
FROM messages
WHERE receiver_id = $1
AND created_at < $2
ORDER BY created_at DESC
LIMIT $3
) sub
ORDER BY created_at ASC
`, connection, before, cap)
if err != nil {
return nil, err
}
defer rows.Close()
messages := make([]*Message, 0, cap)
for rows.Next() {
msg := &Message{}
if err = rows.Scan(&msg.Id, &msg.Sender, &msg.Receiver, &msg.CreatedAt, &msg.Content, &msg.IsGroupMessage); err != nil {
return nil, err
}
messages = append(messages, msg)
}
return messages, rows.Err()
}
func DbGroupSave(ctx context.Context, group *Group) error {
err := dbConn.QueryRow(ctx, `
INSERT INTO chat_groups (name, creator_id, owner_id, enable_client_colors, color_red, color_green, color_blue, created_at)