mirror of
https://github.com/AppFlowy-IO/AppFlowy-Cloud.git
synced 2025-04-19 03:24:42 -04:00
* feat: template crud endpoint * fix: clippy error * fix: categories for related view * fix: add created at and last updated at to template response * feat: template api delete endpoint * feat: include number of template count for template creator * fix: use params instead of individual fields for template api * fix: seach template creator by name query * chore: simplify query * feat: support template count limit for template homepage
85 lines
2.8 KiB
PL/PgSQL
85 lines
2.8 KiB
PL/PgSQL
-- Appflowy template is based on a published view. Template information should be preserved even if the
|
|
-- published view is deleted.
|
|
CREATE TABLE IF NOT EXISTS af_template_view (
|
|
view_id UUID NOT NULL,
|
|
created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
name TEXT NOT NULL,
|
|
description TEXT NOT NULL,
|
|
about TEXT NOT NULL,
|
|
view_url TEXT NOT NULL,
|
|
creator_id UUID NOT NULL REFERENCES af_template_creator(creator_id) ON DELETE CASCADE,
|
|
is_new_template BOOLEAN NOT NULL,
|
|
is_featured BOOLEAN NOT NULL,
|
|
|
|
PRIMARY KEY (view_id)
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS af_template_view_template_category (
|
|
view_id UUID NOT NULL REFERENCES af_template_view(view_id) ON DELETE CASCADE,
|
|
category_id UUID NOT NULL REFERENCES af_template_category(category_id) ON DELETE CASCADE,
|
|
|
|
PRIMARY KEY (view_id, category_id)
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS af_related_template_view (
|
|
view_id UUID NOT NULL REFERENCES af_template_view(view_id) ON DELETE CASCADE,
|
|
related_view_id UUID NOT NULL REFERENCES af_template_view(view_id) ON DELETE CASCADE,
|
|
|
|
PRIMARY KEY (view_id, related_view_id)
|
|
);
|
|
|
|
BEGIN;
|
|
|
|
DO $$
|
|
BEGIN
|
|
IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'account_link_type') THEN
|
|
CREATE TYPE account_link_type AS (
|
|
link_type TEXT,
|
|
url TEXT
|
|
);
|
|
END IF;
|
|
|
|
IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'template_creator_type') THEN
|
|
CREATE TYPE template_creator_type AS (
|
|
creator_id UUID,
|
|
name TEXT,
|
|
avatar_url TEXT,
|
|
account_links account_link_type[],
|
|
number_of_templates INT
|
|
);
|
|
END IF;
|
|
|
|
IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'template_creator_minimal_type') THEN
|
|
CREATE TYPE template_creator_minimal_type AS (
|
|
creator_id UUID,
|
|
name TEXT,
|
|
avatar_url TEXT
|
|
);
|
|
END IF;
|
|
|
|
IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'template_category_minimal_type') THEN
|
|
CREATE TYPE template_category_minimal_type AS (
|
|
category_id UUID,
|
|
name TEXT,
|
|
icon TEXT,
|
|
bg_color TEXT
|
|
);
|
|
END IF;
|
|
|
|
IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'template_minimal_type') THEN
|
|
CREATE TYPE template_minimal_type AS (
|
|
view_id UUID,
|
|
created_at TIMESTAMP WITH TIME ZONE,
|
|
updated_at TIMESTAMP WITH TIME ZONE,
|
|
name TEXT,
|
|
description TEXT,
|
|
view_url TEXT,
|
|
creator template_creator_minimal_type,
|
|
categories template_category_minimal_type[],
|
|
is_new_template BOOLEAN,
|
|
is_featured BOOLEAN
|
|
);
|
|
END IF;
|
|
END
|
|
$$;
|