|
1 | 1 | /** |
2 | | - * @file Migration to add indexes for promoCodes and promoCodeUsages collections |
| 2 | + * @file Indexes required by promo code validation and reservation flow |
3 | 3 | */ |
4 | 4 | module.exports = { |
5 | 5 | async up(db) { |
6 | 6 | const promoCodes = db.collection('promoCodes'); |
7 | | - const promoCodeUsages = db.collection('promoCodeUsages'); |
| 7 | + const usages = db.collection('promoCodeUsages'); |
8 | 8 |
|
9 | 9 | 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 }); |
16 | 27 | }, |
17 | 28 |
|
18 | 29 | 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'); |
21 | 33 |
|
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'); |
28 | 39 | }, |
29 | 40 | }; |
0 commit comments