mirror of
https://github.com/multica-ai/multica.git
synced 2026-06-17 11:48:42 +02:00
- Add migration 106: CREATE INDEX CONCURRENTLY on member(user_id, workspace_id) - Rewrite ListWorkspaces to drive from member table with explicit fields - Regenerate all sqlc code with v1.31.1 (intentional version upgrade) Co-authored-by: multica-agent <github@multica.ai>
113 lines
3.1 KiB
Go
113 lines
3.1 KiB
Go
// Code generated by sqlc. DO NOT EDIT.
|
|
// versions:
|
|
// sqlc v1.31.1
|
|
// source: daemon_token.sql
|
|
|
|
package db
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/jackc/pgx/v5/pgtype"
|
|
)
|
|
|
|
const createDaemonToken = `-- name: CreateDaemonToken :one
|
|
INSERT INTO daemon_token (token_hash, workspace_id, daemon_id, expires_at)
|
|
VALUES ($1, $2, $3, $4)
|
|
RETURNING id, token_hash, workspace_id, daemon_id, expires_at, created_at
|
|
`
|
|
|
|
type CreateDaemonTokenParams struct {
|
|
TokenHash string `json:"token_hash"`
|
|
WorkspaceID pgtype.UUID `json:"workspace_id"`
|
|
DaemonID string `json:"daemon_id"`
|
|
ExpiresAt pgtype.Timestamptz `json:"expires_at"`
|
|
}
|
|
|
|
func (q *Queries) CreateDaemonToken(ctx context.Context, arg CreateDaemonTokenParams) (DaemonToken, error) {
|
|
row := q.db.QueryRow(ctx, createDaemonToken,
|
|
arg.TokenHash,
|
|
arg.WorkspaceID,
|
|
arg.DaemonID,
|
|
arg.ExpiresAt,
|
|
)
|
|
var i DaemonToken
|
|
err := row.Scan(
|
|
&i.ID,
|
|
&i.TokenHash,
|
|
&i.WorkspaceID,
|
|
&i.DaemonID,
|
|
&i.ExpiresAt,
|
|
&i.CreatedAt,
|
|
)
|
|
return i, err
|
|
}
|
|
|
|
const deleteDaemonTokensByWorkspaceAndDaemons = `-- name: DeleteDaemonTokensByWorkspaceAndDaemons :many
|
|
DELETE FROM daemon_token
|
|
WHERE workspace_id = $1
|
|
AND daemon_id = ANY($2::text[])
|
|
RETURNING token_hash
|
|
`
|
|
|
|
type DeleteDaemonTokensByWorkspaceAndDaemonsParams struct {
|
|
WorkspaceID pgtype.UUID `json:"workspace_id"`
|
|
DaemonIds []string `json:"daemon_ids"`
|
|
}
|
|
|
|
// Deletes every daemon_token row matching the (workspace_id, daemon_id)
|
|
// pairs implied by `daemon_ids`. Used by the member-revocation flow to
|
|
// nuke tokens for all runtimes a leaving member owned in one shot.
|
|
// Returns token_hash so the caller can invalidate auth.DaemonTokenCache
|
|
// before the 10-minute TTL expires — without that invalidate, a daemon
|
|
// can keep using its stale token until cache eviction even though the
|
|
// DB row is gone.
|
|
func (q *Queries) DeleteDaemonTokensByWorkspaceAndDaemons(ctx context.Context, arg DeleteDaemonTokensByWorkspaceAndDaemonsParams) ([]string, error) {
|
|
rows, err := q.db.Query(ctx, deleteDaemonTokensByWorkspaceAndDaemons, arg.WorkspaceID, arg.DaemonIds)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer rows.Close()
|
|
items := []string{}
|
|
for rows.Next() {
|
|
var token_hash string
|
|
if err := rows.Scan(&token_hash); err != nil {
|
|
return nil, err
|
|
}
|
|
items = append(items, token_hash)
|
|
}
|
|
if err := rows.Err(); err != nil {
|
|
return nil, err
|
|
}
|
|
return items, nil
|
|
}
|
|
|
|
const deleteExpiredDaemonTokens = `-- name: DeleteExpiredDaemonTokens :exec
|
|
DELETE FROM daemon_token
|
|
WHERE expires_at <= now()
|
|
`
|
|
|
|
func (q *Queries) DeleteExpiredDaemonTokens(ctx context.Context) error {
|
|
_, err := q.db.Exec(ctx, deleteExpiredDaemonTokens)
|
|
return err
|
|
}
|
|
|
|
const getDaemonTokenByHash = `-- name: GetDaemonTokenByHash :one
|
|
SELECT id, token_hash, workspace_id, daemon_id, expires_at, created_at FROM daemon_token
|
|
WHERE token_hash = $1 AND expires_at > now()
|
|
`
|
|
|
|
func (q *Queries) GetDaemonTokenByHash(ctx context.Context, tokenHash string) (DaemonToken, error) {
|
|
row := q.db.QueryRow(ctx, getDaemonTokenByHash, tokenHash)
|
|
var i DaemonToken
|
|
err := row.Scan(
|
|
&i.ID,
|
|
&i.TokenHash,
|
|
&i.WorkspaceID,
|
|
&i.DaemonID,
|
|
&i.ExpiresAt,
|
|
&i.CreatedAt,
|
|
)
|
|
return i, err
|
|
}
|