32
migrations/006_resource_seven_locales.sql
Normal file
32
migrations/006_resource_seven_locales.sql
Normal file
@@ -0,0 +1,32 @@
|
||||
-- Seven resource locales: zh (Simplified Chinese), en, ja, ko, vi, id, ms.
|
||||
|
||||
ALTER TABLE resources ADD COLUMN IF NOT EXISTS title_zh TEXT;
|
||||
ALTER TABLE resources ADD COLUMN IF NOT EXISTS title_ja TEXT;
|
||||
ALTER TABLE resources ADD COLUMN IF NOT EXISTS title_ko TEXT;
|
||||
ALTER TABLE resources ADD COLUMN IF NOT EXISTS title_vi TEXT;
|
||||
ALTER TABLE resources ADD COLUMN IF NOT EXISTS title_id TEXT;
|
||||
ALTER TABLE resources ADD COLUMN IF NOT EXISTS title_ms TEXT;
|
||||
ALTER TABLE resources ADD COLUMN IF NOT EXISTS description_zh TEXT;
|
||||
ALTER TABLE resources ADD COLUMN IF NOT EXISTS description_ja TEXT;
|
||||
ALTER TABLE resources ADD COLUMN IF NOT EXISTS description_ko TEXT;
|
||||
ALTER TABLE resources ADD COLUMN IF NOT EXISTS description_vi TEXT;
|
||||
ALTER TABLE resources ADD COLUMN IF NOT EXISTS description_id TEXT;
|
||||
ALTER TABLE resources ADD COLUMN IF NOT EXISTS description_ms TEXT;
|
||||
ALTER TABLE resources ADD COLUMN IF NOT EXISTS body_text_zh TEXT;
|
||||
ALTER TABLE resources ADD COLUMN IF NOT EXISTS body_text_ja TEXT;
|
||||
ALTER TABLE resources ADD COLUMN IF NOT EXISTS body_text_ko TEXT;
|
||||
ALTER TABLE resources ADD COLUMN IF NOT EXISTS body_text_vi TEXT;
|
||||
ALTER TABLE resources ADD COLUMN IF NOT EXISTS body_text_id TEXT;
|
||||
ALTER TABLE resources ADD COLUMN IF NOT EXISTS body_text_ms TEXT;
|
||||
|
||||
UPDATE resources SET title_zh = COALESCE(NULLIF(title_zh, ''), NULLIF(title_zh_cn, ''), NULLIF(title_zh_tw, ''), title)
|
||||
WHERE COALESCE(title_zh, '') = '';
|
||||
UPDATE resources SET description_zh = COALESCE(description_zh, description_zh_cn, description_zh_tw, description)
|
||||
WHERE description_zh IS NULL;
|
||||
UPDATE resources SET body_text_zh = COALESCE(body_text_zh, body_text_zh_cn, body_text_zh_tw, body_text)
|
||||
WHERE body_text_zh IS NULL;
|
||||
|
||||
UPDATE resources SET title = COALESCE(NULLIF(title_zh, ''), title);
|
||||
UPDATE resources SET description = description_zh;
|
||||
UPDATE resources SET body_text = body_text_zh;
|
||||
UPDATE resources SET language = 'zh' WHERE language IN ('zh-TW', 'zh-CN', 'zh-tw', 'zh-cn');
|
||||
21
migrations/007_category_seven_locales.sql
Normal file
21
migrations/007_category_seven_locales.sql
Normal file
@@ -0,0 +1,21 @@
|
||||
-- Category names/descriptions: zh (Simplified), en, ja, ko, vi, id, ms.
|
||||
|
||||
ALTER TABLE categories ADD COLUMN IF NOT EXISTS name_zh TEXT;
|
||||
ALTER TABLE categories ADD COLUMN IF NOT EXISTS name_en TEXT;
|
||||
ALTER TABLE categories ADD COLUMN IF NOT EXISTS name_ja TEXT;
|
||||
ALTER TABLE categories ADD COLUMN IF NOT EXISTS name_ko TEXT;
|
||||
ALTER TABLE categories ADD COLUMN IF NOT EXISTS name_vi TEXT;
|
||||
ALTER TABLE categories ADD COLUMN IF NOT EXISTS name_id TEXT;
|
||||
ALTER TABLE categories ADD COLUMN IF NOT EXISTS name_ms TEXT;
|
||||
ALTER TABLE categories ADD COLUMN IF NOT EXISTS description_zh TEXT;
|
||||
ALTER TABLE categories ADD COLUMN IF NOT EXISTS description_en TEXT;
|
||||
ALTER TABLE categories ADD COLUMN IF NOT EXISTS description_ja TEXT;
|
||||
ALTER TABLE categories ADD COLUMN IF NOT EXISTS description_ko TEXT;
|
||||
ALTER TABLE categories ADD COLUMN IF NOT EXISTS description_vi TEXT;
|
||||
ALTER TABLE categories ADD COLUMN IF NOT EXISTS description_id TEXT;
|
||||
ALTER TABLE categories ADD COLUMN IF NOT EXISTS description_ms TEXT;
|
||||
|
||||
UPDATE categories SET name_zh = COALESCE(NULLIF(name_zh, ''), NULLIF(name_zh_cn, ''), name_zh_tw)
|
||||
WHERE COALESCE(name_zh, '') = '';
|
||||
UPDATE categories SET description_zh = COALESCE(description_zh, description_zh_tw)
|
||||
WHERE description_zh IS NULL;
|
||||
52
migrations/008_posts.sql
Normal file
52
migrations/008_posts.sql
Normal file
@@ -0,0 +1,52 @@
|
||||
-- Telegram-style posts feed (separate from legacy resources)
|
||||
|
||||
CREATE TABLE IF NOT EXISTS posts (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
category_id INT NOT NULL REFERENCES categories(id),
|
||||
language TEXT NOT NULL DEFAULT 'zh',
|
||||
text_zh TEXT,
|
||||
text_en TEXT,
|
||||
text_ja TEXT,
|
||||
text_ko TEXT,
|
||||
text_vi TEXT,
|
||||
text_id TEXT,
|
||||
text_ms TEXT,
|
||||
is_public BOOLEAN NOT NULL DEFAULT TRUE,
|
||||
is_recommended BOOLEAN NOT NULL DEFAULT FALSE,
|
||||
sort_order INT NOT NULL DEFAULT 0,
|
||||
status TEXT NOT NULL DEFAULT 'draft',
|
||||
published_at TIMESTAMPTZ,
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||
view_count INT NOT NULL DEFAULT 0,
|
||||
download_count INT NOT NULL DEFAULT 0
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_posts_category ON posts(category_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_posts_status_public ON posts(status, is_public);
|
||||
CREATE INDEX IF NOT EXISTS idx_posts_published ON posts(published_at DESC NULLS LAST, id DESC);
|
||||
CREATE INDEX IF NOT EXISTS idx_posts_recommended ON posts(is_recommended) WHERE is_recommended = TRUE;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS post_attachments (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
post_id UUID NOT NULL REFERENCES posts(id) ON DELETE CASCADE,
|
||||
kind TEXT NOT NULL,
|
||||
url TEXT NOT NULL,
|
||||
mime TEXT NOT NULL DEFAULT 'application/octet-stream',
|
||||
filename TEXT NOT NULL DEFAULT '',
|
||||
size_bytes BIGINT NOT NULL DEFAULT 0,
|
||||
width INT,
|
||||
height INT,
|
||||
duration_sec INT,
|
||||
poster_url TEXT,
|
||||
thumbnail_url TEXT,
|
||||
sort_order INT NOT NULL DEFAULT 0
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_post_attachments_post ON post_attachments(post_id, sort_order ASC);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS post_tags (
|
||||
post_id UUID NOT NULL REFERENCES posts(id) ON DELETE CASCADE,
|
||||
tag_id INT NOT NULL REFERENCES tags(id) ON DELETE CASCADE,
|
||||
PRIMARY KEY (post_id, tag_id)
|
||||
);
|
||||
Reference in New Issue
Block a user