diff --git a/server/db/names.ts b/server/db/names.ts index 06982432..d4fe6bbe 100644 --- a/server/db/names.ts +++ b/server/db/names.ts @@ -1,6 +1,9 @@ import { fileURLToPath } from 'url'; import { dirname, join } from 'path'; import { readFileSync } from 'fs'; +import { db } from '@server/db'; +import { sites } from './schema'; +import { eq, and } from 'drizzle-orm'; // Get the directory name of the current module const __filename = fileURLToPath(import.meta.url); @@ -10,7 +13,23 @@ const __dirname = dirname(__filename); const file = join(__dirname, 'names.json'); export const names = JSON.parse(readFileSync(file, 'utf-8')); -export function getUniqueName(): string { +export async function getUniqueName(orgId: string): Promise { + let loops = 0; + while (true) { + if (loops > 100) { + throw new Error('Could not generate a unique name'); + } + + const name = generateName(); + const count = await db.select({niceId: sites.niceId, orgId: sites.orgId}).from(sites).where(and(eq(sites.niceId, name), eq(sites.orgId, orgId))); + if (count.length === 0) { + return name; + } + loops++; + } +} + +export function generateName(): string { return ( names.descriptors[Math.floor(Math.random() * names.descriptors.length)] + "-" + names.animals[Math.floor(Math.random() * names.animals.length)]