From 3c8029625355c29d090596a3e401e9cc2a8f545e Mon Sep 17 00:00:00 2001 From: Stuart Long Chay Boon Date: Mon, 24 Oct 2022 21:27:40 +0800 Subject: [PATCH 1/2] [offers][refactor] refactor random name generator code --- .../router/offers/offers-profile-router.ts | 17 +------------ .../src/utils/offers/randomNameGenerator.ts | 24 +++++++++++++++++-- 2 files changed, 23 insertions(+), 18 deletions(-) diff --git a/apps/portal/src/server/router/offers/offers-profile-router.ts b/apps/portal/src/server/router/offers/offers-profile-router.ts index 506b961b..c29dfde5 100644 --- a/apps/portal/src/server/router/offers/offers-profile-router.ts +++ b/apps/portal/src/server/router/offers/offers-profile-router.ts @@ -268,22 +268,7 @@ export const offersProfileRouter = createRouter() .digest('hex'); // Generate random name until unique - let uniqueName: string = generateRandomName(); - - let sameNameProfiles = await ctx.prisma.offersProfile.findMany({ - where: { - profileName: uniqueName - } - }) - - while (sameNameProfiles.length !== 0) { - uniqueName = generateRandomName(); - sameNameProfiles = await ctx.prisma.offersProfile.findMany({ - where: { - profileName: uniqueName - } - }) - } + const uniqueName: string = await generateRandomName(); const profile = await ctx.prisma.offersProfile.create({ data: { diff --git a/apps/portal/src/utils/offers/randomNameGenerator.ts b/apps/portal/src/utils/offers/randomNameGenerator.ts index ba286197..ff02e503 100644 --- a/apps/portal/src/utils/offers/randomNameGenerator.ts +++ b/apps/portal/src/utils/offers/randomNameGenerator.ts @@ -1,5 +1,8 @@ import type { Config } from 'unique-names-generator'; import { adjectives, animals,colors, uniqueNamesGenerator } from 'unique-names-generator'; +import { PrismaClient } from '@prisma/client'; + +const prisma = new PrismaClient() const customConfig: Config = { dictionaries: [adjectives, colors, animals], @@ -8,6 +11,23 @@ const customConfig: Config = { }; -export default function generateRandomName(): string { - return uniqueNamesGenerator(customConfig) +export default async function generateRandomName(): Promise { + let uniqueName: string = uniqueNamesGenerator(customConfig); + + let sameNameProfiles = await prisma.offersProfile.findMany({ + where: { + profileName: uniqueName + } + }) + + while (sameNameProfiles.length !== 0) { + uniqueName = uniqueNamesGenerator(customConfig); + sameNameProfiles = await prisma.offersProfile.findMany({ + where: { + profileName: uniqueName + } + }) + } + + return uniqueName } \ No newline at end of file From c188405de03da34a93346a8a26bdb8e6ff2fedfa Mon Sep 17 00:00:00 2001 From: Stuart Long Chay Boon Date: Mon, 24 Oct 2022 21:39:49 +0800 Subject: [PATCH 2/2] [offers][chore] create random string generator for token --- .../router/offers/offers-profile-router.ts | 4 ++-- ...andomNameGenerator.ts => randomGenerator.ts} | 17 ++++++++++++++--- 2 files changed, 16 insertions(+), 5 deletions(-) rename apps/portal/src/utils/offers/{randomNameGenerator.ts => randomGenerator.ts} (62%) diff --git a/apps/portal/src/server/router/offers/offers-profile-router.ts b/apps/portal/src/server/router/offers/offers-profile-router.ts index c29dfde5..9cac7feb 100644 --- a/apps/portal/src/server/router/offers/offers-profile-router.ts +++ b/apps/portal/src/server/router/offers/offers-profile-router.ts @@ -10,7 +10,7 @@ import { } from '~/mappers/offers-mappers'; import { baseCurrencyString } from '~/utils/offers/currency'; import { convert } from '~/utils/offers/currency/currencyExchange'; -import generateRandomName from '~/utils/offers/randomNameGenerator'; +import { generateRandomName, generateRandomStringForToken } from '~/utils/offers/randomGenerator'; import { createValidationRegex } from '~/utils/offers/zodRegex'; import { createRouter } from '../context'; @@ -264,7 +264,7 @@ export const offersProfileRouter = createRouter() // TODO: add more const token = crypto .createHash('sha256') - .update(Date.now().toString()) + .update(Date.now().toString() + generateRandomStringForToken()) .digest('hex'); // Generate random name until unique diff --git a/apps/portal/src/utils/offers/randomNameGenerator.ts b/apps/portal/src/utils/offers/randomGenerator.ts similarity index 62% rename from apps/portal/src/utils/offers/randomNameGenerator.ts rename to apps/portal/src/utils/offers/randomGenerator.ts index ff02e503..c0a05ac9 100644 --- a/apps/portal/src/utils/offers/randomNameGenerator.ts +++ b/apps/portal/src/utils/offers/randomGenerator.ts @@ -1,4 +1,5 @@ -import type { Config } from 'unique-names-generator'; +import type { Config} from 'unique-names-generator'; +import { countries, names } from 'unique-names-generator'; import { adjectives, animals,colors, uniqueNamesGenerator } from 'unique-names-generator'; import { PrismaClient } from '@prisma/client'; @@ -10,8 +11,7 @@ const customConfig: Config = { separator: '-', }; - -export default async function generateRandomName(): Promise { +export async function generateRandomName(): Promise { let uniqueName: string = uniqueNamesGenerator(customConfig); let sameNameProfiles = await prisma.offersProfile.findMany({ @@ -30,4 +30,15 @@ export default async function generateRandomName(): Promise { } return uniqueName +} + +const tokenConfig: Config = { + dictionaries: [adjectives, colors, animals, countries, names] + .sort((_a, _b) => 0.5 - Math.random()), + length: 5, + separator: '-', +}; + +export function generateRandomStringForToken(): string { + return uniqueNamesGenerator(tokenConfig) } \ No newline at end of file