38 lines
825 B
TypeScript
38 lines
825 B
TypeScript
import { slug } from '@/utils/slug';
|
|
|
|
import { db } from '@mixan/db';
|
|
|
|
export { db } from '@mixan/db';
|
|
|
|
export async function getId(tableName: 'project' | 'dashboard', name: string) {
|
|
const newId = slug(name);
|
|
if (!db[tableName]) {
|
|
throw new Error('Table does not exists');
|
|
}
|
|
|
|
if (!('findUnique' in db[tableName])) {
|
|
throw new Error('findUnique does not exists');
|
|
}
|
|
|
|
// @ts-expect-error
|
|
const existingProject = await db[tableName]!.findUnique({
|
|
where: {
|
|
id: newId,
|
|
},
|
|
});
|
|
|
|
function random(str: string) {
|
|
const numbers = Math.floor(1000 + Math.random() * 9000);
|
|
if (str.match(/-\d{4}$/g)) {
|
|
return str.replace(/-\d{4}$/g, `-${numbers}`);
|
|
}
|
|
return `${str}-${numbers}`;
|
|
}
|
|
|
|
if (existingProject) {
|
|
return getId(tableName, random(name));
|
|
}
|
|
|
|
return newId;
|
|
}
|