oficina / home Public

Clone
git clone https://amadan.net/oficina/home

Plain git — no account needed to clone.

Download

Download this file

1CREATE TABLE teams (
2 id INTEGER PRIMARY KEY AUTOINCREMENT,
3 sqid TEXT NOT NULL UNIQUE CHECK(length(sqid) BETWEEN 1 AND 64 AND sqid NOT GLOB '*[^a-zA-Z0-9]*'),
4 label TEXT NOT NULL UNIQUE CHECK(length(label) BETWEEN 1 AND 63 AND label NOT GLOB '*[^a-z0-9-]*' AND substr(label,1,1) != '-' AND substr(label,-1,1) != '-'),
5 sealed_name BLOB NOT NULL CHECK(typeof(sealed_name) = 'blob' AND length(sealed_name) BETWEEN 29 AND 284),
6 created_at INTEGER NOT NULL CHECK(created_at > 0),
7 roster_epoch INTEGER NOT NULL DEFAULT 1 CHECK(typeof(roster_epoch) = 'integer' AND roster_epoch > 0)
8);
9CREATE TABLE team_instances (
10 team_id INTEGER NOT NULL REFERENCES teams(id) ON DELETE RESTRICT,
11 app TEXT NOT NULL,
12 origin TEXT NOT NULL UNIQUE,
13 consumer_id TEXT NOT NULL UNIQUE,
14 state TEXT NOT NULL CHECK(state IN ('pending', 'live', 'disabled')),
15 PRIMARY KEY(team_id, app)
16);
17CREATE TABLE memberships (
18 team_id INTEGER NOT NULL REFERENCES teams(id) ON DELETE RESTRICT,
19 person_ref TEXT NOT NULL CHECK(length(person_ref) = 29 AND substr(person_ref,1,3) = 'pr_' AND substr(person_ref,4) NOT GLOB '*[^a-z2-7]*'),
20 role TEXT NOT NULL CHECK(role IN ('owner', 'member')),
21 PRIMARY KEY(team_id, person_ref)
22);
23CREATE INDEX memberships_person ON memberships(person_ref, team_id);
24