2024-10-25 00:05:43 -04:00
|
|
|
import { join } from "path";
|
|
|
|
import { readFileSync } from "fs";
|
|
|
|
import { db } from "@server/db";
|
|
|
|
import { sites } from "./schema";
|
|
|
|
import { eq, and } from "drizzle-orm";
|
|
|
|
import { __DIRNAME } from "@server/config";
|
2024-10-14 21:59:35 -04:00
|
|
|
|
|
|
|
// Load the names from the names.json file
|
2024-10-25 00:05:43 -04:00
|
|
|
const file = join(__DIRNAME, "names.json");
|
|
|
|
export const names = JSON.parse(readFileSync(file, "utf-8"));
|
2024-10-14 21:59:35 -04:00
|
|
|
|
2024-10-14 22:31:47 -04:00
|
|
|
export async function getUniqueName(orgId: string): Promise<string> {
|
|
|
|
let loops = 0;
|
|
|
|
while (true) {
|
|
|
|
if (loops > 100) {
|
2024-10-25 00:05:43 -04:00
|
|
|
throw new Error("Could not generate a unique name");
|
2024-10-14 22:31:47 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
const name = generateName();
|
2024-10-25 00:05:43 -04:00
|
|
|
const count = await db
|
|
|
|
.select({ niceId: sites.niceId, orgId: sites.orgId })
|
|
|
|
.from(sites)
|
|
|
|
.where(and(eq(sites.niceId, name), eq(sites.orgId, orgId)));
|
2024-10-14 22:31:47 -04:00
|
|
|
if (count.length === 0) {
|
|
|
|
return name;
|
|
|
|
}
|
|
|
|
loops++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
export function generateName(): string {
|
2024-10-14 21:59:35 -04:00
|
|
|
return (
|
2024-10-25 00:05:43 -04:00
|
|
|
names.descriptors[
|
|
|
|
Math.floor(Math.random() * names.descriptors.length)
|
|
|
|
] +
|
|
|
|
"-" +
|
2024-10-14 22:26:32 -04:00
|
|
|
names.animals[Math.floor(Math.random() * names.animals.length)]
|
2024-10-25 00:05:43 -04:00
|
|
|
)
|
|
|
|
.toLowerCase()
|
|
|
|
.replace(/\s/g, "-");
|
|
|
|
}
|