mirror of
https://github.com/coder/coder.git
synced 2026-06-03 21:18:24 +00:00
d5a1792f07
Needed by #23833 Adds a `chat_file_links` association table to track which files are associated with each chat. - `AppendChatFileIDs` query links a file to a chat with deduplication - `GetChatFileMetadataByIDs` query returns lightweight file metadata by IDs - Tool-created files (e.g. `propose_plan`) are linked to the chat after insert - User-uploaded files are linked to the chat when the referencing message is sent - Single-chat GET endpoint hydrates `files: ChatFileMetadata[]` on the response > 🤖 Created by Coder Agents and massaged into shape by a human.
21 lines
850 B
SQL
21 lines
850 B
SQL
-- name: InsertChatFile :one
|
|
INSERT INTO chat_files (owner_id, organization_id, name, mimetype, data)
|
|
VALUES (@owner_id::uuid, @organization_id::uuid, @name::text, @mimetype::text, @data::bytea)
|
|
RETURNING id, owner_id, organization_id, created_at, name, mimetype;
|
|
|
|
-- name: GetChatFileByID :one
|
|
SELECT * FROM chat_files WHERE id = @id::uuid;
|
|
|
|
-- name: GetChatFilesByIDs :many
|
|
SELECT * FROM chat_files WHERE id = ANY(@ids::uuid[]);
|
|
|
|
-- name: GetChatFileMetadataByChatID :many
|
|
-- GetChatFileMetadataByChatID returns lightweight file metadata for
|
|
-- all files linked to a chat. The data column is excluded to avoid
|
|
-- loading file content.
|
|
SELECT cf.id, cf.owner_id, cf.organization_id, cf.name, cf.mimetype, cf.created_at
|
|
FROM chat_files cf
|
|
JOIN chat_file_links cfl ON cfl.file_id = cf.id
|
|
WHERE cfl.chat_id = @chat_id::uuid
|
|
ORDER BY cf.created_at ASC;
|