mirror of
https://github.com/block/buzz.git
synced 2026-08-18 06:50:31 +02:00
Signed-off-by: Tyler Longwell <tlongwell@block.xyz> Co-authored-by: npub1qyvc0c5kl4gqv2fd97fsk46tu378sqgy35vc83rvgfwne90sel7s0ed67d <011987e296fd5006292d2f930b574be47c7801048d1983c46c425d3c95f0cffd@sprout-oss.stage.blox.sqprod.co> Co-authored-by: Tyler Longwell <tlongwell@block.xyz>
30 lines
1.6 KiB
SQL
30 lines
1.6 KiB
SQL
-- ── Git repo name registry (NIP-34 kind:30617) ───────────────────────────────
|
|
-- The relay holds no persistent per-repo filesystem state: git reads/writes
|
|
-- hydrate an ephemeral bare repo from object storage per request, and writer
|
|
-- serialization is the object-store pointer CAS (docs/git-on-object-storage.md,
|
|
-- Inv_NoFork). This table is the one remaining shared-state need — repo-name
|
|
-- uniqueness — moved off local disk so the relay is stateless and can run
|
|
-- multiple replicas without a ReadWriteMany volume.
|
|
--
|
|
-- Additive migration (not folded into 0001): brownfield databases that already
|
|
-- applied the pre-PR 0001 must not see its checksum change, or sqlx aborts
|
|
-- startup with a VersionMismatch. New table + index only; no edits to existing
|
|
-- objects.
|
|
--
|
|
-- Per-community, not global: a repo name is unique within a community, matching
|
|
-- the multi-tenant invariant (community_id leads the PK). The PK enforces
|
|
-- uniqueness atomically (INSERT … ON CONFLICT), replacing the old atomic
|
|
-- `create_dir`. `owner_pubkey` distinguishes idempotent re-announce (same owner)
|
|
-- from collision (different owner), and backs the per-pubkey quota via COUNT.
|
|
|
|
CREATE TABLE git_repo_names (
|
|
community_id UUID NOT NULL REFERENCES communities(id),
|
|
repo_id TEXT NOT NULL,
|
|
owner_pubkey TEXT NOT NULL,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
PRIMARY KEY (community_id, repo_id)
|
|
);
|
|
|
|
-- Backs the per-pubkey repo quota: COUNT(*) WHERE community_id = $1 AND owner_pubkey = $2.
|
|
CREATE INDEX idx_git_repo_names_owner ON git_repo_names (community_id, owner_pubkey);
|