-- dolt.sr.ht full initial schema. -- -- This is the authoritative DDL for a fresh install. The brant migration in -- migrations/0001_initial.sql applies the same objects incrementally; keep the -- two in sync. The "user" table mirrors meta's users (core-go's -- FetchMetaProfile lazily inserts rows keyed by meta's user id). CREATE TYPE visibility AS ENUM ( 'PUBLIC', 'PRIVATE', 'UNLISTED' ); CREATE TYPE user_type AS ENUM ( 'PENDING', 'USER', 'ADMIN', 'SUSPENDED' ); CREATE TYPE access_mode AS ENUM ( 'RO', 'RW' ); CREATE TABLE "user" ( id integer PRIMARY KEY, -- meta's user id, inserted explicitly (not serial) username varchar(256) UNIQUE, created timestamp NOT NULL, updated timestamp NOT NULL, email varchar(256) NOT NULL UNIQUE, user_type user_type NOT NULL, url varchar(256), location varchar(256), bio varchar(4096), suspension_notice varchar(4096) ); CREATE INDEX ix_user_username ON "user"(username); CREATE TABLE repository ( id serial PRIMARY KEY, created timestamp NOT NULL, updated timestamp NOT NULL, name varchar(64) NOT NULL, description varchar(1024), owner_id integer NOT NULL REFERENCES "user"(id) ON DELETE CASCADE, path varchar(1024) NOT NULL UNIQUE, -- absolute on-disk NBS store dir visibility visibility NOT NULL, CONSTRAINT uq_repo_owner_id_name UNIQUE (owner_id, name) ); CREATE TABLE access ( id serial PRIMARY KEY, created timestamp NOT NULL, updated timestamp NOT NULL, repo_id integer NOT NULL REFERENCES repository(id) ON DELETE CASCADE, user_id integer NOT NULL REFERENCES "user"(id) ON DELETE CASCADE, mode access_mode NOT NULL, CONSTRAINT uq_access_user_id_repo_id UNIQUE (user_id, repo_id) ); CREATE TABLE dolt_key ( id serial PRIMARY KEY, created timestamp NOT NULL, user_id integer NOT NULL REFERENCES "user"(id) ON DELETE CASCADE, kid varchar(64) NOT NULL UNIQUE, -- base32(SHA-512/224(pubkey)), dolt alphabet pubkey bytea NOT NULL, -- 32-byte ed25519 public key comment varchar(256), last_used timestamp );