-- name: RegisterDesktopClient :one INSERT INTO desktop_clients ( id, tenant_id, workspace_id, user_id, token_hash, device_name, os, cpu_arch, client_version, channel ) VALUES ( sqlc.arg(id), sqlc.arg(tenant_id), sqlc.arg(workspace_id), sqlc.arg(user_id), sqlc.arg(token_hash), sqlc.narg(device_name), sqlc.narg(os), sqlc.narg(cpu_arch), sqlc.narg(client_version), sqlc.narg(channel) ) ON CONFLICT (id) DO UPDATE SET tenant_id = EXCLUDED.tenant_id, workspace_id = EXCLUDED.workspace_id, user_id = EXCLUDED.user_id, token_hash = EXCLUDED.token_hash, device_name = EXCLUDED.device_name, os = EXCLUDED.os, cpu_arch = EXCLUDED.cpu_arch, client_version = EXCLUDED.client_version, channel = EXCLUDED.channel, last_seen_at = now(), last_rotated_at = now(), revoked_at = NULL RETURNING *; -- name: GetDesktopClientByTokenHash :one SELECT * FROM desktop_clients WHERE token_hash = sqlc.arg(token_hash) AND revoked_at IS NULL LIMIT 1; -- name: GetDesktopClientByID :one SELECT * FROM desktop_clients WHERE id = sqlc.arg(id) AND workspace_id = sqlc.arg(workspace_id) AND revoked_at IS NULL LIMIT 1; -- name: RotateDesktopClientToken :one UPDATE desktop_clients SET token_hash = sqlc.arg(token_hash), last_rotated_at = now() WHERE id = sqlc.arg(id) AND workspace_id = sqlc.arg(workspace_id) AND revoked_at IS NULL RETURNING *; -- name: HeartbeatDesktopClient :one UPDATE desktop_clients SET device_name = COALESCE(sqlc.narg(device_name), device_name), os = COALESCE(sqlc.narg(os), os), cpu_arch = COALESCE(sqlc.narg(cpu_arch), cpu_arch), client_version = COALESCE(sqlc.narg(client_version), client_version), channel = COALESCE(sqlc.narg(channel), channel), last_seen_at = now() WHERE id = sqlc.arg(id) AND workspace_id = sqlc.arg(workspace_id) AND revoked_at IS NULL RETURNING *; -- name: RevokeDesktopClient :one UPDATE desktop_clients SET revoked_at = now() WHERE id = sqlc.arg(id) AND workspace_id = sqlc.arg(workspace_id) AND revoked_at IS NULL RETURNING *; -- name: ListDesktopClientsByWorkspace :many SELECT * FROM desktop_clients WHERE workspace_id = sqlc.arg(workspace_id) AND revoked_at IS NULL ORDER BY last_seen_at DESC NULLS LAST, created_at DESC; -- name: ListDesktopClientsByUser :many SELECT * FROM desktop_clients WHERE tenant_id = sqlc.arg(tenant_id) AND workspace_id = sqlc.arg(workspace_id) AND user_id = sqlc.arg(user_id) AND revoked_at IS NULL ORDER BY last_seen_at DESC NULLS LAST, created_at DESC;