diff --git a/src/lib/dataaccess.ts b/src/lib/dataaccess.ts index 0172946..50b0cd6 100644 --- a/src/lib/dataaccess.ts +++ b/src/lib/dataaccess.ts @@ -1,5 +1,6 @@ import * as crypto from "crypto"; import * as status from "http-status"; +import * as sqz from "sequelize"; import {Sequelize} from "sequelize-typescript"; import {ChatNotFoundError} from "./errors/ChatNotFoundError"; import {EmailAlreadyRegisteredError} from "./errors/EmailAlreadyRegisteredError"; @@ -16,8 +17,14 @@ import * as models from "./models"; * Generates a new handle from the username and a base64 string of the current time. * @param username */ -function generateHandle(username: string) { - return `${username}.${Buffer.from(Date.now().toString()).toString("base64")}`; +async function generateHandle(username: string) { + username = username.toLowerCase(); + const count = await models.User.count({where: {handle: {[sqz.Op.like]: `%${username}%`}}}); + if (count > 0) { + return `${username}${count}`; + } else { + return username; + } } /** @@ -99,7 +106,7 @@ namespace dataaccess { hash.update(password); password = hash.digest("hex"); const existResult = !!(await models.User.findOne({where: {username, email, password}})); - const handle = generateHandle(username); + const handle = await generateHandle(username); if (!existResult) { return models.User.create({username, email, password, handle}); } else {