/** * Publicera AI-receptöversättningar som klarat den inbyggda verifieringen * (verification.ok = true). Endast PUBLICERADE översättningar visas för * användare. Utkast som föll på verifieringen lämnas kvar för manuell * granskning i admin (så inget felöversatt går live automatiskt). * * Kör EFTER att translate-recipes.ts-kön har tömts: * pnpm --filter @app/worker exec tsx scripts/publish-translations.ts es * pnpm --filter @app/worker exec tsx scripts/publish-translations.ts all * * Kräver DATABASE_URL i miljön. */ import { config as loadDotenv } from "dotenv"; import { existsSync } from "node:fs"; import path from "node:path"; import { and, eq, sql } from "drizzle-orm"; import { createDatabase, schema } from "@app/database"; // Ladda .env (samma sökning som worker/seed) så DATABASE_URL finns även när // skriptet körs fristående via `pnpm exec tsx`. for (const candidate of [".env", "../.env", "../../.env"]) { const p = path.resolve(process.cwd(), candidate); if (existsSync(p)) { loadDotenv({ path: p }); break; } } async function main() { if (!process.env.DATABASE_URL) throw new Error("Sätt DATABASE_URL."); const arg = (process.argv[2] ?? "all").toLowerCase(); const { db, pool } = createDatabase(process.env.DATABASE_URL); const cond = [ eq(schema.recipeTranslations.status, "draft_ai"), sql`${schema.recipeTranslations.verification}->>'ok' = 'true'`, ]; if (arg !== "all") cond.push(eq(schema.recipeTranslations.languageTag, arg)); const published = await db .update(schema.recipeTranslations) .set({ status: "published", updatedAt: new Date() }) .where(and(...cond)) .returning({ id: schema.recipeTranslations.id }); const [remaining] = await db .select({ n: sql`count(*)::int` }) .from(schema.recipeTranslations) .where(eq(schema.recipeTranslations.status, "draft_ai")); console.log(`Publicerade ${published.length} verifierade översättningar (${arg}).`); console.log( `Kvar som utkast (föll på verifieringen – granska i admin vid behov): ${remaining?.n ?? 0}.`, ); await pool.end(); } main().then( () => process.exit(0), (e) => { console.error(e); process.exit(1); }, );