Skip to content

Commit 36d926b

Browse files
Dobrunia Kostrigincursoragent
andcommitted
refactor(billing): simplify promo code payment flow
Co-authored-by: Cursor <cursoragent@cursor.com>
1 parent ca8ff46 commit 36d926b

32 files changed

Lines changed: 1362 additions & 3491 deletions
Lines changed: 27 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,40 @@
11
/**
2-
* @file Migration to add indexes for promoCodes and promoCodeUsages collections
2+
* @file Indexes required by promo code validation and reservation flow
33
*/
44
module.exports = {
55
async up(db) {
66
const promoCodes = db.collection('promoCodes');
7-
const promoCodeUsages = db.collection('promoCodeUsages');
7+
const usages = db.collection('promoCodeUsages');
88

99
await promoCodes.createIndex({ value: 1 }, { unique: true });
10-
11-
await promoCodeUsages.createIndex({ promoCodeId: 1 });
12-
await promoCodeUsages.createIndex({ promoCodeId: 1, userId: 1 }, { unique: true });
13-
await promoCodeUsages.createIndex({ promoCodeId: 1, workspaceId: 1 }, { unique: true });
14-
await promoCodeUsages.createIndex({ workspaceId: 1 });
15-
await promoCodeUsages.createIndex({ userId: 1 });
10+
await usages.createIndex({ promoCodeId: 1, userId: 1 }, { unique: true });
11+
await usages.createIndex({ promoCodeId: 1, workspaceId: 1 }, { unique: true });
12+
await usages.createIndex(
13+
{ transactionId: 1 },
14+
{
15+
unique: true,
16+
partialFilterExpression: { transactionId: { $type: 'string' } },
17+
}
18+
);
19+
await usages.createIndex(
20+
{ promoCodeId: 1, ordinal: 1 },
21+
{
22+
unique: true,
23+
partialFilterExpression: { ordinal: { $type: 'number' } },
24+
}
25+
);
26+
await usages.createIndex({ reservationExpiresAt: 1 }, { expireAfterSeconds: 0 });
1627
},
1728

1829
async down(db) {
19-
const promoCodes = db.collection('promoCodes');
20-
const promoCodeUsages = db.collection('promoCodeUsages');
30+
await db.collection('promoCodes').dropIndex('value_1');
31+
32+
const usages = db.collection('promoCodeUsages');
2133

22-
await promoCodes.dropIndex('value_1');
23-
await promoCodeUsages.dropIndex('promoCodeId_1');
24-
await promoCodeUsages.dropIndex('promoCodeId_1_userId_1');
25-
await promoCodeUsages.dropIndex('promoCodeId_1_workspaceId_1');
26-
await promoCodeUsages.dropIndex('workspaceId_1');
27-
await promoCodeUsages.dropIndex('userId_1');
34+
await usages.dropIndex('promoCodeId_1_userId_1');
35+
await usages.dropIndex('promoCodeId_1_workspaceId_1');
36+
await usages.dropIndex('transactionId_1');
37+
await usages.dropIndex('promoCodeId_1_ordinal_1');
38+
await usages.dropIndex('reservationExpiresAt_1');
2839
},
2940
};

‎package.json‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "hawk.api",
3-
"version": "1.6.0",
3+
"version": "1.5.13",
44
"main": "index.ts",
55
"license": "BUSL-1.1",
66
"scripts": {
@@ -42,7 +42,7 @@
4242
"@graphql-tools/schema": "^8.5.1",
4343
"@graphql-tools/utils": "^8.9.0",
4444
"@hawk.so/nodejs": "^3.3.2",
45-
"@hawk.so/types": "^0.6.3",
45+
"@hawk.so/types": "^0.5.9",
4646
"@n1ru4l/json-patch-plus": "^0.2.0",
4747
"@node-saml/node-saml": "^5.0.1",
4848
"@octokit/oauth-methods": "^4.0.0",

0 commit comments

Comments
 (0)