hugo-cms/sql/schema/1_init.up.sql
2025-02-01 10:56:59 +11:00

54 lines
1.4 KiB
SQL

CREATE TYPE post_state AS ENUM (
'draft',
'published'
);
CREATE TYPE target_role AS ENUM (
'production'
);
CREATE TYPE target_type AS ENUM (
'netlify'
);
CREATE TABLE users (
id BIGSERIAL NOT NULL PRIMARY KEY,
email TEXT NOT NULL UNIQUE,
password TEXT NOT NULL
);
CREATE TABLE sites (
id BIGSERIAL NOT NULL PRIMARY KEY,
owner_user_id BIGINT NOT NULL,
name TEXT NOT NULL UNIQUE,
title TEXT NOT NULL,
theme TEXT NOT NULL,
props JSON NOT NULL,
FOREIGN KEY (owner_user_id) REFERENCES users (id)
);
CREATE TABLE posts (
id BIGSERIAL NOT NULL PRIMARY KEY,
site_id BIGINT NOT NULL,
title TEXT,
body TEXT NOT NULL,
state post_state NOT NULL,
props JSON NOT NULL,
post_date TIMESTAMP WITH TIME ZONE,
created_at TIMESTAMP NOT NULL,
FOREIGN KEY (site_id) REFERENCES sites (id) ON DELETE CASCADE
);
CREATE TABLE publish_targets (
id BIGSERIAL NOT NULL PRIMARY KEY,
site_id BIGINT NOT NULL,
role target_role NOT NULL,
target_type target_type NOT NULL,
url TEXT NOT NULL,
target_ref TEXT NOT NULL,
FOREIGN KEY (site_id) REFERENCES sites (id) ON DELETE CASCADE,
UNIQUE (site_id, role)
);