From 1f42409826d7ea1d2c7e6107970fd4dc964262d0 Mon Sep 17 00:00:00 2001 From: Owen Schwartz Date: Mon, 14 Oct 2024 22:31:47 -0400 Subject: [PATCH] Check unique org niceId --- server/db/names.ts | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) 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)]