mirror of
https://gitlab.com/PronounsPage/PronounsPage.git
synced 2025-09-28 15:31:11 -04:00
[perf] optimise defaultUsername
This commit is contained in:
parent
d5724bdfcc
commit
29cf160270
@ -65,16 +65,20 @@ const invalidateAuthenticator = async (db, id) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const defaultUsername = async (db, email) => {
|
const defaultUsername = async (db, email) => {
|
||||||
const base = email.substring(0, email.includes('@') ? email.indexOf('@') : email.length)
|
const base = normalise(
|
||||||
.padEnd(4, '0')
|
email.substring(0, email.includes('@') ? email.indexOf('@') : email.length)
|
||||||
.substring(0, 14)
|
.padEnd(4, '0')
|
||||||
.replace(new RegExp(`[^${USERNAME_CHARS}]`, 'g'), '_');
|
.substring(0, 14)
|
||||||
|
.replace(new RegExp(`[^${USERNAME_CHARS}]`, 'g'), '_')
|
||||||
|
);
|
||||||
|
|
||||||
|
const conflicts = (await db.all(SQL`SELECT usernameNorm FROM users WHERE usernameNorm LIKE ${normalise(base) + '%'}`))
|
||||||
|
.map(({usernameNorm}) => usernameNorm);
|
||||||
|
|
||||||
let c = 0;
|
let c = 0;
|
||||||
while (true) {
|
while (true) {
|
||||||
let proposal = base + (c || '');
|
let proposal = base + (c || '');
|
||||||
let dbUser = await db.get(SQL`SELECT id FROM users WHERE usernameNorm = ${normalise(proposal)}`);
|
if (!conflicts.includes(proposal)) {
|
||||||
if (!dbUser) {
|
|
||||||
return proposal;
|
return proposal;
|
||||||
}
|
}
|
||||||
c++;
|
c++;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user