mirror of https://github.com/coder/coder.git
61 lines
2.3 KiB
SQL
61 lines
2.3 KiB
SQL
-- Store arbitrary data like template source code or avatars.
|
|
CREATE TABLE files (
|
|
hash varchar(64) NOT NULL,
|
|
created_at timestamptz NOT NULL,
|
|
-- foreign key?
|
|
created_by uuid NOT NULL,
|
|
mimetype varchar(64) NOT NULL,
|
|
data bytea NOT NULL,
|
|
PRIMARY KEY (hash)
|
|
);
|
|
|
|
CREATE TYPE provisioner_type AS ENUM ('echo', 'terraform');
|
|
|
|
-- Template defines infrastructure that your software template
|
|
-- requires for development.
|
|
CREATE TABLE templates (
|
|
id uuid NOT NULL,
|
|
created_at timestamptz NOT NULL,
|
|
updated_at timestamptz NOT NULL,
|
|
-- Templates must be scoped to an organization.
|
|
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 Template 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 templates to have the same name under
|
|
-- the same organization.
|
|
UNIQUE(organization_id, name)
|
|
);
|
|
|
|
-- Enforces no active templates have the same name.
|
|
CREATE UNIQUE INDEX ON templates (organization_id, name) WHERE deleted = FALSE;
|
|
CREATE UNIQUE INDEX idx_templates_name_lower ON templates USING btree (lower(name));
|
|
|
|
-- Template Versions store historical template data. When a Template Version is imported,
|
|
-- an "import" job is queued to parse parameters. A Template Version
|
|
-- can only be used if the import job succeeds.
|
|
CREATE TABLE template_versions (
|
|
id uuid NOT NULL,
|
|
-- This should be indexed. It is intentionally nullable.
|
|
template_id uuid REFERENCES templates (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.
|
|
-- eg. TheCozyRabbit16
|
|
name varchar(64) NOT NULL,
|
|
-- Extracted from a README.md on import.
|
|
-- Maximum of 1MB.
|
|
description varchar(1048576) NOT NULL,
|
|
-- The job ID for building the template version.
|
|
job_id uuid NOT NULL,
|
|
PRIMARY KEY (id),
|
|
-- Disallow templates to have the same build name
|
|
-- multiple times.
|
|
UNIQUE(template_id, name)
|
|
);
|