- sqlc.yaml + internal/db/queries/*.sql: typed queries for entities, relationships, ontology, operations (signals, events, audit, idempotency, entity_status) - internal/db/sqlcgen/: generated Go from sqlc (pgx/v5) - internal/observability/record.go: Audit() and Event() helpers that write in the caller's transaction (SG10). actorLabel is interim text identity in detail JSON until OIDC resolution lands; actor_id column exists but is not yet populated - migrations/008: post-commit pg_notify trigger on events table for SSE fan-out (SG8/SG10)
34 lines
1.5 KiB
SQL
34 lines
1.5 KiB
SQL
-- name: ListEntityRelations :many
|
|
SELECT se.slug AS source_slug, te.slug AS target_slug, r.type, r.attributes,
|
|
r.valid_from, r.valid_to
|
|
FROM relationships r
|
|
JOIN entities se ON se.id = r.source_id
|
|
JOIN entities te ON te.id = r.target_id
|
|
WHERE r.valid_to IS NULL
|
|
AND ((sqlc.arg('direction')::text IN ('out','both') AND r.source_id = sqlc.arg('id'))
|
|
OR (sqlc.arg('direction')::text IN ('in','both') AND r.target_id = sqlc.arg('id')))
|
|
AND (sqlc.narg('rel_type')::text IS NULL OR r.type = sqlc.narg('rel_type'))
|
|
ORDER BY r.type, se.slug, te.slug;
|
|
|
|
-- name: ListGraphEdges :many
|
|
SELECT se.slug AS source_slug, te.slug AS target_slug, r.type, r.attributes,
|
|
r.valid_from, r.valid_to
|
|
FROM relationships r
|
|
JOIN entities se ON se.id = r.source_id
|
|
JOIN entities te ON te.id = r.target_id
|
|
WHERE r.valid_to IS NULL
|
|
AND r.source_id = ANY(sqlc.arg('ids')::uuid[])
|
|
AND r.target_id = ANY(sqlc.arg('ids')::uuid[])
|
|
AND (sqlc.narg('rel_types')::text[] IS NULL OR r.type = ANY(sqlc.narg('rel_types')::text[]))
|
|
ORDER BY r.type, se.slug, te.slug;
|
|
|
|
-- name: UpsertCurrentRelationship :exec
|
|
INSERT INTO relationships (source_id, target_id, type, attributes, valid_from, valid_to)
|
|
VALUES ($1, $2, $3, $4, now(), NULL)
|
|
ON CONFLICT (source_id, target_id, type) WHERE valid_to IS NULL
|
|
DO UPDATE SET attributes = EXCLUDED.attributes;
|
|
|
|
-- name: EndCurrentRelationship :execrows
|
|
UPDATE relationships SET valid_to = now()
|
|
WHERE source_id = $1 AND target_id = $2 AND type = $3 AND valid_to IS NULL;
|