You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

28 lines
1.4 KiB
SQL

-- pages.elijah.run — incremental migration: page aliases
--
-- pages-9lsk: adds removable, long-lived **aliases** — extra names a page can
-- be reached at, in the same URL namespace as `pages.slug`. Serving is
-- serve-direct (an alias request serves the canonical page's R2 content with
-- no redirect); namespace uniqueness across `pages.slug` and `aliases.alias`
-- is enforced in the route handlers (src/routes/api.rs). See design §4.1.
--
-- Unlike 0002-trust.sql (an in-place `ALTER TABLE`), this adds a brand-new
-- table, so every statement is `IF NOT EXISTS` and the file is fully
-- idempotent — re-running it against a database that already has the table is
-- a safe no-op. `migrations/schema.sql` already contains the same definitions
-- for fresh installs; this file is the isolated change for the *existing*
-- production D1 database.
--
-- Apply with (a separate, human-triggered step):
-- wrangler d1 execute <DB_NAME> --file=migrations/0003-aliases.sql (remote)
-- wrangler d1 execute <DB_NAME> --local --file=migrations/0003-aliases.sql (local dev)
CREATE TABLE IF NOT EXISTS aliases (
alias TEXT PRIMARY KEY,
slug TEXT NOT NULL REFERENCES pages(slug),
owner_id INTEGER NOT NULL REFERENCES users(id),
created_at TEXT NOT NULL DEFAULT (datetime('now'))
);
CREATE INDEX IF NOT EXISTS idx_aliases_slug ON aliases(slug);