package handlers import ( "context" "github.com/jackc/pgx/v5/pgxpool" ) // EnsureCategoryI18nColumns adds per-locale category name/description columns. func EnsureCategoryI18nColumns(ctx context.Context, pool *pgxpool.Pool) error { _, err := pool.Exec(ctx, ` 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`) if err != nil { return err } _, err = pool.Exec(ctx, ` 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`) return err }