2026-05-25 00:09:44 +08:00
|
|
|
package handlers
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"context"
|
|
|
|
|
|
|
|
|
|
"github.com/jackc/pgx/v5/pgxpool"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
// EnsureResourceI18nColumns adds per-locale text columns and backfills from legacy fields.
|
|
|
|
|
func EnsureResourceI18nColumns(ctx context.Context, pool *pgxpool.Pool) error {
|
|
|
|
|
_, err := pool.Exec(ctx, `
|
2026-05-25 16:45:33 +08:00
|
|
|
ALTER TABLE resources ADD COLUMN IF NOT EXISTS title_zh TEXT;
|
|
|
|
|
ALTER TABLE resources ADD COLUMN IF NOT EXISTS title_en 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_en 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_en 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;
|
2026-05-25 00:09:44 +08:00
|
|
|
ALTER TABLE resources ADD COLUMN IF NOT EXISTS title_zh_tw TEXT;
|
|
|
|
|
ALTER TABLE resources ADD COLUMN IF NOT EXISTS title_zh_cn TEXT;
|
|
|
|
|
ALTER TABLE resources ADD COLUMN IF NOT EXISTS description_zh_tw TEXT;
|
|
|
|
|
ALTER TABLE resources ADD COLUMN IF NOT EXISTS description_zh_cn TEXT;
|
|
|
|
|
ALTER TABLE resources ADD COLUMN IF NOT EXISTS body_text_zh_tw TEXT;
|
2026-05-25 16:45:33 +08:00
|
|
|
ALTER TABLE resources ADD COLUMN IF NOT EXISTS body_text_zh_cn TEXT`)
|
2026-05-25 00:09:44 +08:00
|
|
|
if err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
_, err = pool.Exec(ctx, `
|
2026-05-25 16:45:33 +08:00
|
|
|
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_en = title WHERE language = 'en' AND COALESCE(title_en, '') = '' AND COALESCE(title, '') <> '';
|
2026-05-25 00:09:44 +08:00
|
|
|
UPDATE resources SET description_en = description WHERE language = 'en' AND description_en IS NULL;
|
|
|
|
|
UPDATE resources SET body_text_en = body_text WHERE language = 'en' AND body_text_en IS NULL;
|
2026-05-25 16:45:33 +08:00
|
|
|
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')`)
|
2026-05-25 00:09:44 +08:00
|
|
|
return err
|
|
|
|
|
}
|