mirror of
https://github.com/multica-ai/multica.git
synced 2026-07-16 22:59:04 +02:00
Co-authored-by: Eve <eve@multica-ai.local> Co-authored-by: multica-agent <github@multica.ai>
33 lines
1.1 KiB
SQL
33 lines
1.1 KiB
SQL
-- name: ListChatPinnedAgents :many
|
|
SELECT * FROM chat_pinned_agent
|
|
WHERE workspace_id = $1 AND user_id = $2
|
|
ORDER BY position ASC, created_at ASC;
|
|
|
|
-- name: CreateChatPinnedAgent :one
|
|
-- Idempotent: pinning an already-pinned agent is a no-op that returns the
|
|
-- existing row (DO UPDATE keeps `:one` from hitting a no-rows error).
|
|
INSERT INTO chat_pinned_agent (workspace_id, user_id, agent_id, position)
|
|
VALUES ($1, $2, $3, $4)
|
|
ON CONFLICT (workspace_id, user_id, agent_id)
|
|
DO UPDATE SET position = chat_pinned_agent.position
|
|
RETURNING *;
|
|
|
|
-- name: DeleteChatPinnedAgent :exec
|
|
DELETE FROM chat_pinned_agent
|
|
WHERE workspace_id = $1 AND user_id = $2 AND agent_id = $3;
|
|
|
|
-- name: DeleteChatPinnedAgentsByWorkspace :exec
|
|
DELETE FROM chat_pinned_agent
|
|
WHERE workspace_id = $1;
|
|
|
|
-- name: DeleteChatPinnedAgentsByArchivedRuntimeAgents :exec
|
|
DELETE FROM chat_pinned_agent
|
|
WHERE agent_id IN (
|
|
SELECT id FROM agent WHERE runtime_id = $1 AND archived_at IS NOT NULL
|
|
);
|
|
|
|
-- name: GetMaxChatPinnedAgentPosition :one
|
|
SELECT COALESCE(MAX(position), 0)::float8 AS max_position
|
|
FROM chat_pinned_agent
|
|
WHERE workspace_id = $1 AND user_id = $2;
|