Initial commit (unpacked platform)

This commit is contained in:
Sven (AAMOS AI)
2026-08-05 19:21:11 +07:00
commit ac5340195a
314 changed files with 57584 additions and 0 deletions
+60
View File
@@ -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);
});