- Restructure operator sidebar into a flat task list with indented children; fold plan topology into plan ladders - Expand member catalog non-plan section to all published non-tier products; require recurring Stripe-mapped prices for purchase - Add operator domains placements and terminal-claims ledger; redirect /domains to the FedWiki Sites Domains anchor - Apply canonical vocabulary and chrome/form conventions; migrate seeded FedWiki Sites display name
71 lines
2.7 KiB
SQL
71 lines
2.7 KiB
SQL
-- name: CreatePlacement :one
|
|
INSERT INTO domains.placements (claim_id, fqdn, reversed_labels, provider, resource_ref, servable)
|
|
VALUES ($1, $2, $3, $4, $5, $6)
|
|
RETURNING *;
|
|
|
|
-- name: GetPlacementByFQDN :one
|
|
-- The serving path (/domains/ask). Deliberately unconditional: a row with
|
|
-- servable = false is a local refusal, distinct from a registry miss, and
|
|
-- the authorizer needs to tell those apart (design D5).
|
|
SELECT * FROM domains.placements
|
|
WHERE fqdn = $1;
|
|
|
|
-- name: GetPlacementByID :one
|
|
-- The release path reads the placement before deleting it: the claim_id it
|
|
-- carries is what the auto-release re-count needs.
|
|
SELECT * FROM domains.placements
|
|
WHERE placement_id = $1;
|
|
|
|
-- name: GetPlacementByResource :one
|
|
SELECT * FROM domains.placements
|
|
WHERE provider = $1 AND resource_ref = $2;
|
|
|
|
-- name: ListPlacementsByClaim :many
|
|
SELECT * FROM domains.placements
|
|
WHERE claim_id = $1
|
|
ORDER BY fqdn;
|
|
|
|
-- name: CountPlacementsByClaim :one
|
|
-- Re-read under the registry advisory lock before auto-releasing a claim,
|
|
-- so a release racing a placement cannot strand a live placement in a
|
|
-- released claim (design D3).
|
|
SELECT COUNT(*) FROM domains.placements
|
|
WHERE claim_id = $1;
|
|
|
|
-- name: ListPlacementsByFQDNs :many
|
|
-- Ancestor walk on placements: an operator placement above a candidate root
|
|
-- blocks carving it. Exact equality keeps this on the fqdn unique index.
|
|
SELECT * FROM domains.placements
|
|
WHERE fqdn = ANY(@fqdns::text[])
|
|
ORDER BY length(fqdn) DESC;
|
|
|
|
-- name: ListPlacementsInSubtree :many
|
|
-- Descendant scan via the reversed-label prefix; excludes the subtree root
|
|
-- itself (an exact hit is the unique index's business).
|
|
SELECT * FROM domains.placements
|
|
WHERE reversed_labels LIKE @reversed_root::text || '.%'
|
|
ORDER BY reversed_labels;
|
|
|
|
-- name: SetPlacementServableByResource :execrows
|
|
-- Provider lifecycle transitions address placements by their own resource
|
|
-- identity, not by name (fedwiki: archive => FALSE, restore => TRUE).
|
|
UPDATE domains.placements
|
|
SET servable = $3, updated_at = NOW()
|
|
WHERE provider = $1 AND resource_ref = $2;
|
|
|
|
-- name: DeletePlacement :execrows
|
|
DELETE FROM domains.placements
|
|
WHERE placement_id = $1;
|
|
|
|
-- name: ListAllPlacementsForOperator :many
|
|
-- The operator placements section (ux-ia-naming task 9.1): every exact name
|
|
-- actually being served, deployment-wide, each with the provider resource it
|
|
-- is wired to. Claims and placements are never conflated
|
|
-- (docs/models/domains-registry.md, "Claim vs placement") -- a claim can hold
|
|
-- a name that serves nothing, and this is the query that answers what
|
|
-- actually serves. Ordered by fqdn so the list reads in the same namespace
|
|
-- order as the claims table above it.
|
|
SELECT placement_id, claim_id, fqdn, provider, resource_ref, servable, created_at
|
|
FROM domains.placements
|
|
ORDER BY fqdn;
|