feat(migrate): ensureSpace helper

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
root
2026-06-04 22:18:44 +10:00
parent 681b091e4a
commit 1a10bfea0d
2 changed files with 26 additions and 0 deletions

12
migrate/spaces.js Normal file
View File

@@ -0,0 +1,12 @@
import { pool } from '../lib/db/pool.js';
import * as spaces from '../lib/db/repos/spaces.js';
const SYS = { kind: 'system', id: null };
// Returns the id of the space with `slug`, creating it if absent. Idempotent.
export async function ensureSpace(slug, name) {
const { rows: [r] } = await pool.query(`SELECT id FROM spaces WHERE slug=$1`, [slug]);
if (r) return r.id;
const created = await spaces.create({ slug, name }, SYS);
return created.id;
}

View File

@@ -0,0 +1,14 @@
import { describe, it, expect, beforeAll } from 'vitest';
import { resetDb } from '../helpers/db.js';
import { migrateUp } from '../../lib/db/migrate.js';
import { ensureSpace } from '../../migrate/spaces.js';
beforeAll(async () => { await resetDb(); await migrateUp(); });
describe('ensureSpace', () => {
it('creates a space once and reuses it by slug', async () => {
const a = await ensureSpace('void1', 'Void 1');
const b = await ensureSpace('void1', 'Void 1');
expect(a).toBe(b);
});
});