Initial commit (unpacked platform)
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
import { config as loadDotenv } from "dotenv";
|
||||
import { existsSync } from "node:fs";
|
||||
import path from "node:path";
|
||||
|
||||
// Ladda .env från paketet ELLER monorepo-roten (pnpm --filter sätter cwd till paketet).
|
||||
for (const candidate of [".env", "../.env", "../../.env"]) {
|
||||
const p = path.resolve(process.cwd(), candidate);
|
||||
if (existsSync(p)) {
|
||||
loadDotenv({ path: p });
|
||||
break;
|
||||
}
|
||||
}
|
||||
import { fileURLToPath } from "node:url";
|
||||
import { migrate } from "drizzle-orm/node-postgres/migrator";
|
||||
import { createDatabase } from "./client.js";
|
||||
|
||||
/**
|
||||
* Kör alla väntande SQL-migrationer från infrastructure/migrations.
|
||||
* Används i dev, CI och deploy (spec §63: migration + rollback + kontroll).
|
||||
*/
|
||||
const migrationsFolder = path.resolve(
|
||||
path.dirname(fileURLToPath(import.meta.url)),
|
||||
"../../../infrastructure/migrations",
|
||||
);
|
||||
|
||||
async function main() {
|
||||
const { db, pool } = createDatabase();
|
||||
console.log(`[migrate] Kör migrationer från ${migrationsFolder}`);
|
||||
await migrate(db, { migrationsFolder });
|
||||
|
||||
// i18n M7: accentokänslig + fuzzy sök. Extensions kräver rättigheter –
|
||||
// i produktion skapas de av create-database.sql (master); här är de idempotenta
|
||||
// och hoppas över med varning om rättighet saknas.
|
||||
try {
|
||||
await pool.query("CREATE EXTENSION IF NOT EXISTS unaccent");
|
||||
await pool.query("CREATE EXTENSION IF NOT EXISTS pg_trgm");
|
||||
await pool.query(
|
||||
"CREATE INDEX IF NOT EXISTS canonical_ingredients_name_trgm_idx ON canonical_ingredients USING gin (name_sv gin_trgm_ops)",
|
||||
);
|
||||
await pool.query(
|
||||
"CREATE INDEX IF NOT EXISTS ingredient_translations_name_trgm_idx ON ingredient_translations USING gin (name gin_trgm_ops)",
|
||||
);
|
||||
await pool.query(
|
||||
"CREATE INDEX IF NOT EXISTS recipes_title_trgm_idx ON recipes USING gin (title_sv gin_trgm_ops)",
|
||||
);
|
||||
console.log("[migrate] Sök-extensions + trigramindex på plats (i18n M7).");
|
||||
} catch (err) {
|
||||
console.warn(
|
||||
"[migrate] VARNING: kunde inte skapa sök-extensions/index (kör create-database.sql som master först):",
|
||||
(err as Error).message,
|
||||
);
|
||||
}
|
||||
console.log("[migrate] Klart.");
|
||||
await pool.end();
|
||||
}
|
||||
|
||||
main().catch((err) => {
|
||||
console.error("[migrate] MISSLYCKADES:", err);
|
||||
process.exit(1);
|
||||
});
|
||||
Reference in New Issue
Block a user