chore: update v1 schema (#643)

This commit is contained in:
Colin Adler
2022-04-01 14:42:36 -05:00
committed by GitHub
parent cbb82ce017
commit 2b1a0ee126
69 changed files with 757 additions and 624 deletions
@@ -0,0 +1,8 @@
DROP TABLE licenses;
DROP TABLE api_keys;
DROP TABLE organization_members;
DROP TABLE organizations;
DROP TABLE users;
DROP TYPE login_type;
+47 -43
View File
@@ -4,28 +4,18 @@
-- All tables and types are stolen from:
-- https://github.com/coder/m/blob/47b6fc383347b9f9fab424d829c482defd3e1fe2/product/coder/pkg/database/dump.sql
DO $$ BEGIN
CREATE TYPE login_type AS ENUM (
'built-in',
'saml',
'oidc'
);
EXCEPTION
WHEN duplicate_object THEN null;
END $$;
--
-- Name: users; Type: TABLE; Schema: public; Owner: coder
--
DO $$ BEGIN
CREATE TYPE userstatus AS ENUM (
'active',
'dormant',
'decommissioned'
);
EXCEPTION
WHEN duplicate_object THEN null;
END $$;
CREATE TYPE login_type AS ENUM (
'built-in',
'saml',
'oidc'
);
CREATE TABLE IF NOT EXISTS users (
id text NOT NULL,
id uuid NOT NULL,
email text NOT NULL,
name text NOT NULL,
revoked boolean NOT NULL,
@@ -33,44 +23,51 @@ CREATE TABLE IF NOT EXISTS users (
hashed_password bytea NOT NULL,
created_at timestamp with time zone NOT NULL,
updated_at timestamp with time zone NOT NULL,
temporary_password boolean DEFAULT false NOT NULL,
avatar_hash text DEFAULT '' :: text NOT NULL,
ssh_key_regenerated_at timestamp with time zone DEFAULT now() NOT NULL,
username text DEFAULT '' :: text NOT NULL,
dotfiles_git_uri text DEFAULT '' :: text NOT NULL,
roles text [] DEFAULT '{site-member}' :: text [] NOT NULL,
status userstatus DEFAULT 'active' :: public.userstatus NOT NULL,
relatime timestamp with time zone DEFAULT now() NOT NULL,
gpg_key_regenerated_at timestamp with time zone DEFAULT now() NOT NULL,
_decomissioned boolean DEFAULT false NOT NULL,
shell text DEFAULT '' :: text NOT NULL
username text DEFAULT ''::text NOT NULL,
PRIMARY KEY (id)
);
CREATE UNIQUE INDEX IF NOT EXISTS idx_users_email ON users USING btree (email);
CREATE UNIQUE INDEX IF NOT EXISTS idx_users_username ON users USING btree (username);
CREATE UNIQUE INDEX IF NOT EXISTS users_username_lower_idx ON users USING btree (lower(username));
--
-- Name: organizations; Type: TABLE; Schema: Owner: coder
--
CREATE TABLE IF NOT EXISTS organizations (
id text NOT NULL,
id uuid NOT NULL,
name text NOT NULL,
description text NOT NULL,
created_at timestamp with time zone NOT NULL,
updated_at timestamp with time zone NOT NULL,
"default" boolean DEFAULT false NOT NULL,
auto_off_threshold bigint DEFAULT '28800000000000' :: bigint NOT NULL,
cpu_provisioning_rate real DEFAULT 4.0 NOT NULL,
memory_provisioning_rate real DEFAULT 1.0 NOT NULL,
workspace_auto_off boolean DEFAULT false NOT NULL
PRIMARY KEY (id)
);
CREATE UNIQUE INDEX IF NOT EXISTS idx_organization_name ON organizations USING btree (name);
CREATE UNIQUE INDEX IF NOT EXISTS idx_organization_name_lower ON organizations USING btree (lower(name));
CREATE TABLE IF NOT EXISTS organization_members (
organization_id text NOT NULL,
user_id text NOT NULL,
user_id uuid NOT NULL,
organization_id uuid NOT NULL,
created_at timestamp with time zone NOT NULL,
updated_at timestamp with time zone NOT NULL,
roles text [] DEFAULT '{organization-member}' :: text [] NOT NULL
roles text [] DEFAULT '{organization-member}' :: text [] NOT NULL,
PRIMARY KEY (organization_id, user_id)
);
CREATE INDEX idx_organization_member_organization_id_uuid ON organization_members USING btree (organization_id);
CREATE INDEX idx_organization_member_user_id_uuid ON organization_members USING btree (user_id);
ALTER TABLE ONLY organization_members
ADD CONSTRAINT organization_members_organization_id_uuid_fkey FOREIGN KEY (organization_id) REFERENCES organizations(id) ON DELETE CASCADE;
ALTER TABLE ONLY organization_members
ADD CONSTRAINT organization_members_user_id_uuid_fkey FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE;
CREATE TABLE IF NOT EXISTS api_keys (
id text NOT NULL,
hashed_secret bytea NOT NULL,
user_id text NOT NULL,
user_id uuid NOT NULL,
application boolean NOT NULL,
name text NOT NULL,
last_used timestamp with time zone NOT NULL,
@@ -82,11 +79,18 @@ CREATE TABLE IF NOT EXISTS api_keys (
oidc_refresh_token text DEFAULT ''::text NOT NULL,
oidc_id_token text DEFAULT ''::text NOT NULL,
oidc_expiry timestamp with time zone DEFAULT '0001-01-01 00:00:00+00'::timestamp with time zone NOT NULL,
devurl_token boolean DEFAULT false NOT NULL
devurl_token boolean DEFAULT false NOT NULL,
PRIMARY KEY (id)
);
CREATE INDEX IF NOT EXISTS idx_api_keys_user ON api_keys USING btree (user_id);
ALTER TABLE ONLY api_keys
ADD CONSTRAINT api_keys_user_id_uuid_fkey FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE;
CREATE TABLE IF NOT EXISTS licenses (
id integer NOT NULL,
id serial,
license jsonb NOT NULL,
created_at timestamp with time zone NOT NULL
created_at timestamptz NOT NULL,
PRIMARY KEY (id)
);
@@ -1,10 +1,12 @@
-- Store arbitrary data like project source code or avatars.
CREATE TABLE files (
hash varchar(64) NOT NULL UNIQUE,
hash varchar(64) NOT NULL,
created_at timestamptz NOT NULL,
created_by text NOT NULL,
-- foreign key?
created_by uuid NOT NULL,
mimetype varchar(64) NOT NULL,
data bytea NOT NULL
data bytea NOT NULL,
PRIMARY KEY (hash)
);
CREATE TYPE provisioner_type AS ENUM ('echo', 'terraform');
@@ -12,17 +14,18 @@ CREATE TYPE provisioner_type AS ENUM ('echo', 'terraform');
-- Project defines infrastructure that your software project
-- requires for development.
CREATE TABLE projects (
id uuid NOT NULL UNIQUE,
id uuid NOT NULL,
created_at timestamptz NOT NULL,
updated_at timestamptz NOT NULL,
-- Projects must be scoped to an organization.
organization_id text NOT NULL,
organization_id uuid NOT NULL REFERENCES organizations (id) ON DELETE CASCADE,
deleted boolean NOT NULL DEFAULT FALSE,
name varchar(64) NOT NULL,
provisioner provisioner_type NOT NULL,
-- Target's a Project Version to use for Workspaces.
-- If a Workspace doesn't match this version, it will be prompted to rebuild.
active_version_id uuid NOT NULL,
PRIMARY KEY (id),
-- Disallow projects to have the same name under
-- the same organization.
UNIQUE(organization_id, name)
@@ -35,10 +38,10 @@ CREATE UNIQUE INDEX ON projects (organization_id, name) WHERE deleted = FALSE;
-- an "import" job is queued to parse parameters. A Project Version
-- can only be used if the import job succeeds.
CREATE TABLE project_versions (
id uuid NOT NULL UNIQUE,
-- This should be indexed.
project_id uuid REFERENCES projects (id),
organization_id text NOT NULL,
id uuid NOT NULL,
-- This should be indexed. It is intentionally nullable.
project_id uuid REFERENCES projects (id) ON DELETE CASCADE,
organization_id uuid NOT NULL REFERENCES organizations (id) ON DELETE CASCADE,
created_at timestamptz NOT NULL,
updated_at timestamptz NOT NULL,
-- Name is generated for ease of differentiation.
@@ -49,6 +52,7 @@ CREATE TABLE project_versions (
description varchar(1048576) NOT NULL,
-- The job ID for building the project version.
job_id uuid NOT NULL,
PRIMARY KEY (id),
-- Disallow projects to have the same build name
-- multiple times.
UNIQUE(project_id, name)
@@ -1,11 +1,14 @@
CREATE TABLE workspaces (
id uuid NOT NULL UNIQUE,
id uuid NOT NULL,
created_at timestamptz NOT NULL,
updated_at timestamptz NOT NULL,
owner_id text NOT NULL,
project_id uuid NOT NULL REFERENCES projects (id),
-- Use ON DELETE RESTRICT so that we can cleanup external workspace
-- resources first.
owner_id uuid NOT NULL REFERENCES users (id) ON DELETE RESTRICT,
project_id uuid NOT NULL REFERENCES projects (id) ON DELETE RESTRICT,
deleted boolean NOT NULL DEFAULT FALSE,
name varchar(64) NOT NULL
name varchar(64) NOT NULL,
PRIMARY KEY (id)
);
-- Enforces no active workspaces have the same name.
+27 -18
View File
@@ -1,12 +1,13 @@
CREATE TABLE IF NOT EXISTS provisioner_daemons (
id uuid NOT NULL UNIQUE,
id uuid NOT NULL,
created_at timestamptz NOT NULL,
updated_at timestamptz,
organization_id text,
organization_id uuid,
-- Name is generated for ease of differentiation.
-- eg. WowBananas16
name varchar(64) NOT NULL UNIQUE,
provisioners provisioner_type [ ] NOT NULL
provisioners provisioner_type [ ] NOT NULL,
PRIMARY KEY (id)
);
CREATE TYPE provisioner_job_type AS ENUM (
@@ -17,21 +18,23 @@ CREATE TYPE provisioner_job_type AS ENUM (
CREATE TYPE provisioner_storage_method AS ENUM ('file');
CREATE TABLE IF NOT EXISTS provisioner_jobs (
id uuid NOT NULL UNIQUE,
id uuid NOT NULL,
created_at timestamptz NOT NULL,
updated_at timestamptz NOT NULL,
started_at timestamptz,
canceled_at timestamptz,
completed_at timestamptz,
error text,
organization_id text NOT NULL,
initiator_id text NOT NULL,
organization_id uuid NOT NULL REFERENCES organizations (id) ON DELETE CASCADE,
-- foreign key?
initiator_id uuid NOT NULL,
provisioner provisioner_type NOT NULL,
storage_method provisioner_storage_method NOT NULL,
storage_source text NOT NULL,
type provisioner_job_type NOT NULL,
input jsonb NOT NULL,
worker_id uuid
worker_id uuid,
PRIMARY KEY (id)
);
CREATE TYPE log_level AS ENUM (
@@ -48,28 +51,30 @@ CREATE TYPE log_source AS ENUM (
);
CREATE TABLE IF NOT EXISTS provisioner_job_logs (
id uuid NOT NULL UNIQUE,
id uuid NOT NULL,
job_id uuid NOT NULL REFERENCES provisioner_jobs (id) ON DELETE CASCADE,
created_at timestamptz NOT NULL,
source log_source NOT NULL,
level log_level NOT NULL,
stage varchar(128) NOT NULL,
output varchar(1024) NOT NULL
output varchar(1024) NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE workspace_resources (
id uuid NOT NULL UNIQUE,
id uuid NOT NULL,
created_at timestamptz NOT NULL,
job_id uuid NOT NULL REFERENCES provisioner_jobs (id) ON DELETE CASCADE,
transition workspace_transition NOT NULL,
address varchar(256) NOT NULL,
type varchar(192) NOT NULL,
name varchar(64) NOT NULL,
agent_id uuid
agent_id uuid,
PRIMARY KEY (id)
);
CREATE TABLE workspace_agents (
id uuid NOT NULL UNIQUE,
id uuid NOT NULL,
created_at timestamptz NOT NULL,
updated_at timestamptz NOT NULL,
first_connected_at timestamptz,
@@ -81,7 +86,8 @@ CREATE TABLE workspace_agents (
environment_variables jsonb,
startup_script varchar(65534),
instance_metadata jsonb,
resource_metadata jsonb
resource_metadata jsonb,
PRIMARY KEY (id)
);
CREATE TYPE parameter_scope AS ENUM (
@@ -111,7 +117,7 @@ CREATE TYPE parameter_destination_scheme AS ENUM('none', 'environment_variable',
-- a UI for users to enter values.
-- Needs to be made consistent with the examples below.
CREATE TABLE parameter_schemas (
id uuid NOT NULL UNIQUE,
id uuid NOT NULL,
created_at timestamptz NOT NULL,
job_id uuid NOT NULL REFERENCES provisioner_jobs (id) ON DELETE CASCADE,
name varchar(64) NOT NULL,
@@ -131,26 +137,28 @@ CREATE TABLE parameter_schemas (
validation_condition varchar(512) NOT NULL,
validation_type_system parameter_type_system NOT NULL,
validation_value_type varchar(64) NOT NULL,
PRIMARY KEY (id),
UNIQUE(job_id, name)
);
-- Parameters are provided to jobs for provisioning and to workspaces.
CREATE TABLE parameter_values (
id uuid NOT NULL UNIQUE,
id uuid NOT NULL,
created_at timestamptz NOT NULL,
updated_at timestamptz NOT NULL,
scope parameter_scope NOT NULL,
scope_id text NOT NULL,
scope_id uuid NOT NULL,
name varchar(64) NOT NULL,
source_scheme parameter_source_scheme NOT NULL,
source_value text NOT NULL,
destination_scheme parameter_destination_scheme NOT NULL,
PRIMARY KEY (id),
-- Prevents duplicates for parameters in the same scope.
UNIQUE(scope_id, name)
);
CREATE TABLE workspace_builds (
id uuid NOT NULL UNIQUE,
id uuid NOT NULL,
created_at timestamptz NOT NULL,
updated_at timestamptz NOT NULL,
workspace_id uuid NOT NULL REFERENCES workspaces (id) ON DELETE CASCADE,
@@ -159,10 +167,11 @@ CREATE TABLE workspace_builds (
before_id uuid,
after_id uuid,
transition workspace_transition NOT NULL,
initiator varchar(255) NOT NULL,
initiator_id uuid NOT NULL,
-- State stored by the provisioner
provisioner_state bytea,
-- Job ID of the action
job_id uuid NOT NULL UNIQUE REFERENCES provisioner_jobs (id) ON DELETE CASCADE,
PRIMARY KEY (id),
UNIQUE(workspace_id, name)
);