39 lines
1.5 KiB
SQL
39 lines
1.5 KiB
SQL
CREATE TABLE IF NOT EXISTS navigation_items (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
label TEXT NOT NULL,
|
|
url TEXT NOT NULL,
|
|
location TEXT NOT NULL DEFAULT 'primary',
|
|
sort_order INTEGER NOT NULL DEFAULT 0,
|
|
is_visible BOOLEAN NOT NULL DEFAULT true,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
UNIQUE (location, label, url),
|
|
CONSTRAINT navigation_items_location_check CHECK (location IN ('primary', 'footer'))
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS navigation_items_location_sort_order_idx
|
|
ON navigation_items (location, sort_order ASC, label ASC);
|
|
|
|
INSERT INTO navigation_items (label, url, location, sort_order, is_visible)
|
|
SELECT seed.label, seed.url, seed.location, seed.sort_order, seed.is_visible
|
|
FROM (
|
|
VALUES
|
|
('Home pages', '/', 'primary', 10, true),
|
|
('Tags', '/tags', 'primary', 20, true),
|
|
('Authors', '/pages/about', 'primary', 30, true),
|
|
('Style', '/post/hello-sori-studio', 'primary', 40, true),
|
|
('Post types', '/post/custom-writing-tool', 'primary', 50, true),
|
|
('Members', '/pages/contact', 'primary', 60, true),
|
|
('Landing pages', '/pages/projects', 'primary', 70, true),
|
|
('Portal', '/pages/links', 'footer', 10, true),
|
|
('Docs', '/pages/about', 'footer', 20, true),
|
|
('Projects', '/pages/projects', 'footer', 30, true)
|
|
) AS seed(label, url, location, sort_order, is_visible)
|
|
WHERE NOT EXISTS (
|
|
SELECT 1
|
|
FROM navigation_items existing
|
|
WHERE existing.location = seed.location
|
|
AND existing.label = seed.label
|
|
AND existing.url = seed.url
|
|
);
|