Skip to content

Commit b6e978e

Browse files
committed
fix: add invite code generate check to avoid duplicated invite code
1 parent 8c1c03e commit b6e978e

File tree

3 files changed

+51
-1
lines changed

3 files changed

+51
-1
lines changed

pnpm-lock.yaml

Lines changed: 29 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

server/models/group/invite.ts

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import type { Types } from 'mongoose';
1111
import { nanoid } from 'nanoid';
1212
import { User } from '../user/user';
1313
import { Group } from './group';
14+
import promiseRetry from 'promise-retry';
1415

1516
function generateCode() {
1617
return nanoid(8);
@@ -73,9 +74,27 @@ export class GroupInvite extends TimeStamps implements Base {
7374
expiredAt = undefined;
7475
}
7576

77+
const code = await promiseRetry(
78+
async () => {
79+
const code = generateCode();
80+
const exists = await this.exists({ code });
81+
82+
if (exists) {
83+
throw new Error('Cannot find unused invite code, please try again.');
84+
}
85+
86+
return code;
87+
},
88+
{
89+
minTimeout: 0,
90+
maxTimeout: 0,
91+
retries: 5,
92+
}
93+
);
94+
7695
const invite = await this.create({
7796
groupId,
78-
code: generateCode(),
97+
code,
7998
creator,
8099
expiredAt,
81100
});

server/package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@
6767
"nodemailer": "^6.7.2",
6868
"oidc-provider": "^7.10.6",
6969
"p-map": "^4.0.0",
70+
"promise-retry": "^2.0.1",
7071
"qs": "^6.10.3",
7172
"redlock": "^4.2.0",
7273
"send": "^0.18.0",
@@ -98,6 +99,7 @@
9899
"@types/node": "16.11.7",
99100
"@types/nodemailer": "^6.4.4",
100101
"@types/oidc-provider": "^7.8.1",
102+
"@types/promise-retry": "^1.1.3",
101103
"@types/send": "^0.17.1",
102104
"@types/serve-static": "^1.15.0",
103105
"@types/swagger-jsdoc": "^6.0.1",

0 commit comments

Comments
 (0)