codebase-models 1.0.6 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (145) hide show
  1. package/.github/workflows/npm-publish.yml +33 -0
  2. package/dist/index.d.ts +5 -4
  3. package/dist/index.js +20 -11
  4. package/dist/src/models/Announcement.d.ts +6 -5
  5. package/dist/src/models/Announcement.js +29 -9
  6. package/dist/src/models/Audience.d.ts +2 -1
  7. package/dist/src/models/Audience.js +6 -1
  8. package/dist/src/models/{Experiments.d.ts → BqPreCompiledData.d.ts} +12 -30
  9. package/dist/src/models/{ClientExperiment.js → BqPreCompiledData.js} +26 -46
  10. package/dist/src/models/CVRReport.d.ts +1 -0
  11. package/dist/src/models/CVRReport.js +13 -0
  12. package/dist/src/models/Client.d.ts +3 -1
  13. package/dist/src/models/Client.js +31 -45
  14. package/dist/src/models/ClientAdditionalRevenue.d.ts +1 -1
  15. package/dist/src/models/ClientAdditionalRevenue.js +3 -2
  16. package/dist/src/models/ClientLearning.d.ts +1 -1
  17. package/dist/src/models/ClientLearning.js +10 -6
  18. package/dist/src/models/ClientLinks.d.ts +1 -1
  19. package/dist/src/models/ClientLinks.js +15 -6
  20. package/dist/src/models/ClientNextSteps.d.ts +1 -1
  21. package/dist/src/models/ClientNextSteps.js +3 -2
  22. package/dist/src/models/ClientNote.d.ts +1 -1
  23. package/dist/src/models/ClientNote.js +3 -2
  24. package/dist/src/models/ClientReportsTemp.d.ts +1 -1
  25. package/dist/src/models/ClientReportsTemp.js +20 -2
  26. package/dist/src/models/ClientRetention.d.ts +1 -0
  27. package/dist/src/models/ClientRetention.js +25 -0
  28. package/dist/src/models/ClientScript.d.ts +1 -1
  29. package/dist/src/models/ClientScript.js +24 -8
  30. package/dist/src/models/ClientStrategy.d.ts +1 -1
  31. package/dist/src/models/ClientStrategy.js +3 -2
  32. package/dist/src/models/ClientSurvay.d.ts +1 -0
  33. package/dist/src/models/ClientSurvay.js +5 -0
  34. package/dist/src/models/Environment.d.ts +2 -0
  35. package/dist/src/models/Environment.js +26 -2
  36. package/dist/src/models/Faqs.d.ts +1 -0
  37. package/dist/src/models/Faqs.js +5 -0
  38. package/dist/src/models/Feedback.d.ts +1 -1
  39. package/dist/src/models/Feedback.js +3 -2
  40. package/dist/src/models/Goal.d.ts +2 -1
  41. package/dist/src/models/Goal.js +33 -11
  42. package/dist/src/models/Hypothesis.d.ts +2 -0
  43. package/dist/src/models/Hypothesis.js +49 -9
  44. package/dist/src/models/HypothesisSheet.d.ts +1 -1
  45. package/dist/src/models/HypothesisSheet.js +26 -2
  46. package/dist/src/models/LandingPages.d.ts +3 -0
  47. package/dist/src/models/LandingPages.js +29 -0
  48. package/dist/src/models/NewIdeas.d.ts +1 -1
  49. package/dist/src/models/NewIdeas.js +3 -2
  50. package/dist/src/models/Notification.d.ts +1 -0
  51. package/dist/src/models/Notification.js +29 -1
  52. package/dist/src/models/{ClientExperiment.d.ts → Organization.d.ts} +18 -29
  53. package/dist/src/models/{Experiments.js → Organization.js} +36 -54
  54. package/dist/src/models/Page.d.ts +3 -1
  55. package/dist/src/models/Page.js +56 -4
  56. package/dist/src/models/PageElement.d.ts +3 -0
  57. package/dist/src/models/PageElement.js +59 -7
  58. package/dist/src/models/PageTestType.d.ts +2 -0
  59. package/dist/src/models/PageTestType.js +41 -5
  60. package/dist/src/models/Portfolio.d.ts +1 -0
  61. package/dist/src/models/Portfolio.js +5 -0
  62. package/dist/src/models/PrecalculationFilters.d.ts +36 -0
  63. package/dist/src/models/PrecalculationFilters.js +77 -0
  64. package/dist/src/models/QueryLog.d.ts +1 -1
  65. package/dist/src/models/QueryLog.js +3 -2
  66. package/dist/src/models/ReadNotification.d.ts +1 -0
  67. package/dist/src/models/ReadNotification.js +29 -1
  68. package/dist/src/models/Report.d.ts +2 -0
  69. package/dist/src/models/Report.js +35 -47
  70. package/dist/src/models/Role.d.ts +3 -0
  71. package/dist/src/models/Role.js +50 -7
  72. package/dist/src/models/SavedSegment.d.ts +1 -0
  73. package/dist/src/models/SavedSegment.js +5 -0
  74. package/dist/src/models/Segment.d.ts +1 -0
  75. package/dist/src/models/Segment.js +5 -0
  76. package/dist/src/models/SegmentCombination.d.ts +1 -0
  77. package/dist/src/models/SegmentCombination.js +5 -0
  78. package/dist/src/models/Snippet.d.ts +2 -1
  79. package/dist/src/models/Snippet.js +28 -3
  80. package/dist/src/models/StageInCustomerJourney.d.ts +3 -1
  81. package/dist/src/models/StageInCustomerJourney.js +56 -4
  82. package/dist/src/models/Tag.d.ts +1 -0
  83. package/dist/src/models/Tag.js +29 -1
  84. package/dist/src/models/Temp.d.ts +1 -0
  85. package/dist/src/models/Temp.js +29 -1
  86. package/dist/src/models/Test.d.ts +18 -17
  87. package/dist/src/models/Test.js +82 -185
  88. package/dist/src/models/TestSequentialValue.d.ts +1 -0
  89. package/dist/src/models/TestSequentialValue.js +5 -0
  90. package/dist/src/models/Tier.d.ts +1 -0
  91. package/dist/src/models/Tier.js +29 -1
  92. package/dist/src/models/Trigger.d.ts +1 -0
  93. package/dist/src/models/Trigger.js +29 -1
  94. package/dist/src/models/User.d.ts +1 -0
  95. package/dist/src/models/User.js +9 -10
  96. package/index.ts +6 -4
  97. package/package.json +1 -1
  98. package/src/models/Announcement.ts +50 -27
  99. package/src/models/Audience.ts +6 -0
  100. package/src/models/BqPreCompiledData.ts +62 -0
  101. package/src/models/CVRReport.ts +17 -0
  102. package/src/models/Client.ts +39 -59
  103. package/src/models/ClientAdditionalRevenue.ts +4 -3
  104. package/src/models/ClientLearning.ts +11 -7
  105. package/src/models/ClientLinks.ts +18 -7
  106. package/src/models/ClientNextSteps.ts +4 -3
  107. package/src/models/ClientNote.ts +4 -3
  108. package/src/models/ClientReportsTemp.ts +24 -3
  109. package/src/models/ClientRetention.ts +27 -1
  110. package/src/models/ClientScript.ts +26 -9
  111. package/src/models/ClientStrategy.ts +4 -3
  112. package/src/models/ClientSurvay.ts +6 -0
  113. package/src/models/Environment.ts +31 -3
  114. package/src/models/Faqs.ts +6 -0
  115. package/src/models/Feedback.ts +4 -3
  116. package/src/models/Goal.ts +36 -12
  117. package/src/models/Hypothesis.ts +29 -8
  118. package/src/models/HypothesisSheet.ts +3 -2
  119. package/src/models/LandingPages.ts +34 -0
  120. package/src/models/NewIdeas.ts +4 -3
  121. package/src/models/Notification.ts +6 -0
  122. package/src/models/Organization.ts +86 -0
  123. package/src/models/Page.ts +62 -5
  124. package/src/models/PageElement.ts +38 -7
  125. package/src/models/PageTestType.ts +21 -4
  126. package/src/models/Portfolio.ts +6 -0
  127. package/src/models/PrecalculationFilters.ts +67 -0
  128. package/src/models/QueryLog.ts +4 -3
  129. package/src/models/ReadNotification.ts +6 -0
  130. package/src/models/Report.ts +54 -66
  131. package/src/models/Role.ts +31 -6
  132. package/src/models/SavedSegment.ts +6 -0
  133. package/src/models/Segment.ts +6 -0
  134. package/src/models/SegmentCombination.ts +6 -0
  135. package/src/models/Snippet.ts +32 -4
  136. package/src/models/StageInCustomerJourney.ts +33 -5
  137. package/src/models/Tag.ts +6 -0
  138. package/src/models/Temp.ts +6 -0
  139. package/src/models/Test.ts +155 -243
  140. package/src/models/TestSequentialValue.ts +6 -0
  141. package/src/models/Tier.ts +6 -0
  142. package/src/models/Trigger.ts +6 -0
  143. package/src/models/User.ts +11 -10
  144. package/src/models/ClientExperiment.ts +0 -113
  145. package/src/models/Experiments.ts +0 -118
@@ -3,8 +3,8 @@ import mongoose, { Document, Schema, model } from "mongoose";
3
3
  export interface IVariations extends Document {
4
4
  name: string;
5
5
  css_code: string;
6
- baseline: Boolean;
7
- traffic_allocation: Number;
6
+ baseline: boolean;
7
+ traffic_allocation: number;
8
8
  metadata_1: mongoose.Schema.Types.Mixed;
9
9
  metadata_2: mongoose.Schema.Types.Mixed;
10
10
  metadata_3: mongoose.Schema.Types.Mixed;
@@ -13,51 +13,61 @@ export interface IVariations extends Document {
13
13
  csscode: string;
14
14
  changesets: string;
15
15
  }
16
+
16
17
  export interface ITest extends Document {
17
- organisationId?: string;
18
+ // Core test properties
19
+ organizationId?: mongoose.Schema.Types.ObjectId;
18
20
  status: string;
19
21
  name: string;
20
- traffic_allocation: Number;
22
+ traffic_allocation: number;
21
23
  audiences_match_type: string;
24
+
25
+ // Metadata fields
22
26
  metadata_1: mongoose.Schema.Types.Mixed;
23
27
  metadata_2: mongoose.Schema.Types.Mixed;
24
28
  metadata_3: mongoose.Schema.Types.Mixed;
25
29
  integrations_run_mode: mongoose.Schema.Types.Mixed;
30
+
31
+ // Code fields
26
32
  jscode: string;
27
33
  reset_js: string;
28
34
  csscode: string;
35
+ htmlcode: string;
36
+
37
+ // References
29
38
  audiences?: mongoose.Schema.Types.ObjectId[];
30
39
  variations: IVariations[];
31
- environments?: mongoose.Schema.Types.Array;
40
+ environments?: mongoose.Schema.Types.ObjectId[];
32
41
  pages?: mongoose.Schema.Types.ObjectId[];
33
- // OLD SCHEMA VARIABLES
34
42
  pageelement?: mongoose.Schema.Types.ObjectId[];
35
43
  client?: mongoose.Schema.Types.ObjectId;
44
+ goal?: mongoose.Schema.Types.ObjectId[];
45
+ pagetesttype?: mongoose.Schema.Types.ObjectId[];
46
+ tags?: mongoose.Schema.Types.ObjectId[];
47
+ hypothesis?: mongoose.Schema.Types.ObjectId;
48
+ trigger?: mongoose.Schema.Types.ObjectId[];
49
+ stageincustomerjourney?: mongoose.Schema.Types.ObjectId;
50
+
51
+ // Test configuration
36
52
  property?: mongoose.Schema.Types.Mixed;
37
53
  platform: string;
38
54
  viewId: string;
39
- goal?: mongoose.Schema.Types.ObjectId[];
40
- pagetesttype?: mongoose.Schema.Types.ObjectId[];
41
55
  controlimage: string;
42
56
  variationimage: string;
43
- tags?: mongoose.Schema.Types.ObjectId[];
44
- hypothesis?: mongoose.Schema.Types.ObjectId;
45
- urltargeting?: [];
57
+ urltargeting: any[];
46
58
  pageaudience: string;
47
59
  targetaudience: string;
48
60
  page: string;
49
61
  pageNotContains: string;
50
62
  eventparameter: string;
51
- htmlcode: string;
52
63
  testid: string;
53
64
  testtool: string;
65
+ personalization: boolean;
54
66
  kameleoontestdetails: mongoose.Schema.Types.Mixed;
55
67
  vwotestdetails: mongoose.Schema.Types.Mixed;
56
- trigger?: mongoose.Schema.Types.ObjectId[];
57
- triggerevents?: [];
58
- stageincustomerjourney?: mongoose.Schema.Types.ObjectId;
68
+ triggerevents: any[];
59
69
  selectedevent: string;
60
- revenue?: [];
70
+ revenue: any[];
61
71
  significance: string;
62
72
  recommendedsamplesize: number;
63
73
  livedate: Date;
@@ -66,246 +76,148 @@ export interface ITest extends Document {
66
76
  }
67
77
 
68
78
  const VariationsSchema = new Schema<IVariations>({
69
- name: {
70
- type: String,
71
- },
72
- css_code: {
73
- type: String,
74
- },
75
- baseline: {
76
- type: Boolean,
77
- },
78
- traffic_allocation: {
79
- type: Number,
80
- },
81
- metadata_1: {
82
- type: mongoose.Schema.Types.Mixed,
83
- },
84
- metadata_2: {
85
- type: mongoose.Schema.Types.Mixed,
86
- },
87
- metadata_3: {
88
- type: mongoose.Schema.Types.Mixed,
89
- },
90
- jscode: {
91
- type: String,
92
- },
93
- reset_js: {
94
- type: String,
95
- },
96
- csscode: {
97
- type: String,
98
- },
99
- changesets: {
100
- type: String,
101
- default: "[]",
102
- },
79
+ name: { type: String, required: true },
80
+ css_code: { type: String, default: "" },
81
+ baseline: { type: Boolean, default: false },
82
+ traffic_allocation: { type: Number, default: 0 },
83
+ metadata_1: { type: mongoose.Schema.Types.Mixed, default: null },
84
+ metadata_2: { type: mongoose.Schema.Types.Mixed, default: null },
85
+ metadata_3: { type: mongoose.Schema.Types.Mixed, default: null },
86
+ jscode: { type: String, default: "" },
87
+ reset_js: { type: String, default: "" },
88
+ csscode: { type: String, default: "" },
89
+ changesets: { type: String, default: "[]" }
103
90
  });
104
91
 
105
92
  const TestSchema = new Schema<ITest>(
106
93
  {
107
- organisationId: {
108
- type: String,
109
- default: null,
94
+ organizationId: {
95
+ type: mongoose.Schema.Types.ObjectId,
96
+ ref: "organization",
97
+ default: null
110
98
  },
111
- status: {
112
- type: String,
99
+ status: {
100
+ type: String,
113
101
  default: "draft",
114
- enum: ["live", "draft", "ended", "paused", "preview"], // running is live
115
- },
116
- name: {
117
- type: String,
118
- required: true,
119
- },
120
- traffic_allocation: {
121
- type: Number,
122
- default: 100,
123
- },
124
- audiences_match_type: {
125
- type: String,
126
- default: "all",
127
- },
128
- metadata_1: {
129
- type: mongoose.Schema.Types.Mixed,
130
- },
131
- metadata_2: {
132
- type: mongoose.Schema.Types.Mixed,
133
- },
134
- metadata_3: {
135
- type: mongoose.Schema.Types.Mixed,
136
- },
137
- integrations_run_mode: {
138
- type: mongoose.Schema.Types.Mixed,
139
- },
140
- jscode: {
141
- type: String,
142
- default: "",
143
- },
144
- reset_js: {
145
- type: String,
146
- },
147
- csscode: {
148
- type: String,
149
- },
150
- audiences: {
151
- type: [mongoose.Schema.Types.ObjectId],
152
- ref: "audience",
153
- default: [],
154
- },
155
- pages: {
156
- type: [mongoose.Schema.Types.ObjectId],
157
- ref: "page",
158
- default: [],
102
+ enum: ["live", "draft", "ended", "paused", "preview", "running"]
103
+ },
104
+ name: { type: String, required: true },
105
+ traffic_allocation: { type: Number, default: 100 },
106
+ audiences_match_type: { type: String, default: "all" },
107
+
108
+ // Metadata fields
109
+ metadata_1: { type: mongoose.Schema.Types.Mixed, default: null },
110
+ metadata_2: { type: mongoose.Schema.Types.Mixed, default: null },
111
+ metadata_3: { type: mongoose.Schema.Types.Mixed, default: null },
112
+ integrations_run_mode: { type: mongoose.Schema.Types.Mixed, default: null },
113
+
114
+ // Code fields
115
+ jscode: { type: String, default: "" },
116
+ reset_js: { type: String, default: "" },
117
+ csscode: { type: String, default: "" },
118
+ htmlcode: { type: String, default: "" },
119
+
120
+ // References with proper refs and defaults
121
+ audiences: {
122
+ type: [mongoose.Schema.Types.ObjectId],
123
+ ref: "audience",
124
+ default: []
125
+ },
126
+ pages: {
127
+ type: [mongoose.Schema.Types.ObjectId],
128
+ ref: "page",
129
+ default: []
159
130
  },
160
131
  variations: [VariationsSchema],
161
- environments: {
162
- type: [mongoose.Schema.Types.ObjectId],
163
- ref: "environment",
164
- default: [],
165
- },
166
- pageelement: {
167
- type: [mongoose.Schema.Types.ObjectId],
168
- ref: "pageelement",
169
- default: [],
170
- },
171
- client: {
172
- type: mongoose.Schema.Types.ObjectId,
173
- ref: "client",
174
- },
175
- property: {
176
- type: mongoose.Schema.Types.Mixed,
177
- },
178
- platform: {
179
- type: String,
180
- default: "BQ",
181
- },
182
- viewId: {
183
- type: String,
184
- },
185
- goal: {
186
- type: [mongoose.Schema.Types.ObjectId],
187
- ref: "goal",
188
- default: [],
189
- },
190
- pagetesttype: {
191
- type: [mongoose.Schema.Types.ObjectId],
192
- ref: "pagetesttype",
193
- default: [],
194
- },
195
- controlimage: {
196
- type: String,
197
- default: null,
198
- },
199
- variationimage: {
200
- type: String,
201
- default: null,
202
- },
203
- tags: {
204
- type: [mongoose.Schema.Types.ObjectId],
205
- ref: "tag",
206
- default: [],
207
- },
208
- hypothesis: {
209
- type: mongoose.Schema.Types.ObjectId,
210
- ref: "hypos",
211
- default: null,
212
- },
213
- // Action , Posibility, Hypothesis
214
- // Check if we need anymore
215
- urltargeting: {
216
- type: [],
217
- default: [],
218
- },
219
- // Check if we need anymore
220
- pageaudience: {
221
- type: String,
222
- default: null,
223
- },
224
- targetaudience: {
225
- type: String,
226
- default: null,
227
- },
228
- page: {
229
- type: String,
230
- default: null,
231
- },
232
- pageNotContains: {
233
- type: String,
234
- default: null,
235
- },
236
- eventparameter: {
237
- type: String,
238
- default: null,
239
- },
240
- htmlcode: {
241
- type: String,
242
- default: "",
243
- },
244
- testid: {
245
- type: String,
246
- default: null,
247
- },
248
- testtool: {
249
- type: String,
250
- default: "",
251
- },
252
- kameleoontestdetails: {
253
- type: mongoose.Schema.Types.Mixed,
254
- default: null,
255
- },
256
- vwotestdetails: {
257
- type: mongoose.Schema.Types.Mixed,
258
- default: null,
259
- },
260
- trigger: {
261
- type: [mongoose.Schema.Types.ObjectId],
262
- ref: "trigger",
263
- default: [],
264
- },
265
- triggerevents: {
266
- type: [],
267
- default: [],
268
- },
269
- stageincustomerjourney: {
270
- type: mongoose.Schema.Types.ObjectId,
271
- ref: "stageincustomerjourney",
272
- default: null,
273
- },
274
- selectedevent: {
275
- type: String,
276
- default: null,
277
- },
278
- revenue: {
279
- type: [],
280
- default: [],
281
- },
282
- significance: {
283
- type: String,
284
- default: "",
285
- },
286
- recommendedsamplesize: {
287
- type: Number,
288
- default: null,
289
- },
290
- livedate: {
291
- type: Date,
292
- default: null,
293
- },
294
- defaultControl: {
295
- type: String,
296
- default: null,
297
- },
298
- enddate: {
299
- type: Date,
300
- default: null,
301
- },
132
+ environments: {
133
+ type: [mongoose.Schema.Types.ObjectId],
134
+ ref: "environment",
135
+ default: []
136
+ },
137
+ pageelement: {
138
+ type: [mongoose.Schema.Types.ObjectId],
139
+ ref: "pageelement",
140
+ default: []
141
+ },
142
+ client: {
143
+ type: mongoose.Schema.Types.ObjectId,
144
+ ref: "client"
145
+ },
146
+ goal: {
147
+ type: [mongoose.Schema.Types.ObjectId],
148
+ ref: "goal",
149
+ default: []
150
+ },
151
+ pagetesttype: {
152
+ type: [mongoose.Schema.Types.ObjectId],
153
+ ref: "pagetesttype",
154
+ default: []
155
+ },
156
+ tags: {
157
+ type: [mongoose.Schema.Types.ObjectId],
158
+ ref: "tag",
159
+ default: []
160
+ },
161
+ hypothesis: {
162
+ type: mongoose.Schema.Types.ObjectId,
163
+ ref: "hypos"
164
+ },
165
+ trigger: {
166
+ type: [mongoose.Schema.Types.ObjectId],
167
+ ref: "trigger",
168
+ default: []
169
+ },
170
+ stageincustomerjourney: {
171
+ type: mongoose.Schema.Types.ObjectId,
172
+ ref: "stageincustomerjourney"
173
+ },
174
+
175
+ // Test configuration
176
+ property: { type: mongoose.Schema.Types.Mixed, default: null },
177
+ platform: { type: String, default: "BQ" },
178
+ viewId: { type: String, default: "" },
179
+ controlimage: { type: String, default: null },
180
+ variationimage: { type: String, default: null },
181
+ urltargeting: { type: [], default: [] },
182
+ pageaudience: { type: String, default: null },
183
+ targetaudience: { type: String, default: null },
184
+ page: { type: String, default: null },
185
+ pageNotContains: { type: String, default: null },
186
+ eventparameter: { type: String, default: null },
187
+ testid: { type: String, default: null },
188
+ testtool: { type: String, default: "" },
189
+ personalization: { type: Boolean, default: false },
190
+ kameleoontestdetails: { type: mongoose.Schema.Types.Mixed, default: null },
191
+ vwotestdetails: { type: mongoose.Schema.Types.Mixed, default: null },
192
+ triggerevents: { type: [], default: [] },
193
+ selectedevent: { type: String, default: null },
194
+ revenue: { type: [], default: [] },
195
+ significance: { type: String, default: "" },
196
+ recommendedsamplesize: { type: Number, default: null },
197
+ livedate: { type: Date, default: null },
198
+ defaultControl: { type: String, default: null },
199
+ enddate: { type: Date, default: null }
302
200
  },
303
201
  {
304
- timestamps: true,
202
+ timestamps: true
305
203
  }
306
204
  );
307
-
205
+ // Add compound indexes for better query performance
308
206
  TestSchema.index({ client: 1, status: 1 });
207
+ TestSchema.index({ client: 1, status: 1, livedate: 1 });
208
+ TestSchema.index({ client: 1, status: 1, enddate: 1 });
209
+ TestSchema.index({ client: 1, testtool: 1, status: 1 });
210
+ TestSchema.index({ name: 1 }, { collation: { locale: 'en', strength: 2 } }); // Case-insensitive search
211
+ TestSchema.index({ "variations._id": 1 });
212
+ TestSchema.index({ status: 1, livedate: 1 });
213
+ TestSchema.index({ status: 1, enddate: 1 });
214
+
215
+ // Add partial indexes for better performance
216
+ TestSchema.index({ status: 1 }, { partialFilterExpression: { status: { $in: ['live', 'running', 'draft', 'paused', 'preview', 'ended'] } } });
217
+ TestSchema.index({ client: 1, status: 1 }, { partialFilterExpression: { status: { $in: ['live', 'running', 'draft', 'paused', 'preview', 'ended'] } } });
218
+
219
+ // Add TTL index for automatic cleanup of ended tests after 1 year
220
+ TestSchema.index({ enddate: 1 }, { expireAfterSeconds: 31536000 });
309
221
 
310
222
  const Test = model<ITest>("test", TestSchema);
311
223
 
@@ -8,10 +8,16 @@ export interface ITestSequentialValue extends Document {
8
8
  nMax: number;
9
9
  createdAt?: Date;
10
10
  updatedAt?: Date;
11
+ organizationId?: mongoose.Schema.Types.ObjectId;
11
12
  }
12
13
 
13
14
  const TestSequentialValueSchema = new Schema<ITestSequentialValue>(
14
15
  {
16
+ organizationId: {
17
+ type: mongoose.Schema.Types.ObjectId,
18
+ ref: "organization",
19
+ default: null,
20
+ },
15
21
  test: {
16
22
  type: mongoose.Schema.Types.ObjectId,
17
23
  ref: "test",
@@ -6,9 +6,15 @@ export interface ITier extends Document {
6
6
  colorSwatch?: string;
7
7
  createdAt?: Date;
8
8
  updatedAt?: Date;
9
+ organizationId?: mongoose.Schema.Types.ObjectId;
9
10
  }
10
11
 
11
12
  const TierSchema = new Schema<ITier>({
13
+ organizationId: {
14
+ type: mongoose.Schema.Types.ObjectId,
15
+ ref: "organization",
16
+ default: null,
17
+ },
12
18
  name: {
13
19
  type: String,
14
20
  unique: true,
@@ -6,9 +6,15 @@ export interface ITrigger extends Document {
6
6
  slug?: string;
7
7
  createdAt?: Date;
8
8
  updatedAt?: Date;
9
+ organizationId?: mongoose.Schema.Types.ObjectId;
9
10
  }
10
11
 
11
12
  const TriggerSchema = new Schema<ITrigger>({
13
+ organizationId: {
14
+ type: mongoose.Schema.Types.ObjectId,
15
+ ref: "organization",
16
+ default: null,
17
+ },
12
18
  name: {
13
19
  type: String,
14
20
  },
@@ -12,6 +12,7 @@ export interface IUser extends Document {
12
12
  createdAt: Date;
13
13
  updatedAt: Date;
14
14
  resetLink: string;
15
+ organizationId?: mongoose.Schema.Types.ObjectId;
15
16
  }
16
17
 
17
18
  const UserSchema = new Schema<IUser>({
@@ -43,19 +44,19 @@ const UserSchema = new Schema<IUser>({
43
44
  type: Boolean,
44
45
  default: false,
45
46
  },
46
- createdAt: {
47
- type: Date,
48
- default: new Date(),
49
- },
50
- updatedAt: {
51
- type: Date,
52
- default: new Date(),
53
- },
54
- resetLink: {
55
- type: String,
47
+ organizationId: {
48
+ type: mongoose.Schema.Types.ObjectId,
49
+ ref: "organization",
56
50
  default: null,
57
51
  },
52
+ }, {
53
+ timestamps: true
58
54
  });
59
55
 
56
+ // Add compound indexes for common query patterns
57
+ UserSchema.index({ organizationId: 1, role: 1 });
58
+ UserSchema.index({ organizationId: 1, client: 1 });
59
+ UserSchema.index({ email: 1 }, { unique: true });
60
+
60
61
  const User = model<IUser>("user", UserSchema);
61
62
  export default User;
@@ -1,113 +0,0 @@
1
- import mongoose, { Document, Schema, model } from "mongoose";
2
-
3
- export interface IPageTargeting extends Document {
4
- condition: string;
5
- routes: mongoose.Schema.Types.Mixed;
6
- }
7
-
8
- export interface IAudienceTargeting extends Document {
9
- javascript: string;
10
- }
11
-
12
- export interface IVariants extends Document {
13
- name: string;
14
- javascript?: string;
15
- css?: string;
16
- traffic_allocation?: string;
17
- slug?: string;
18
- }
19
-
20
- export interface IClientExperiment extends Document {
21
- organisationId?: string;
22
- client?: mongoose.Schema.Types.ObjectId;
23
- viewId?: string;
24
- javascript: string;
25
- css: string;
26
- name?: string;
27
- status?: string;
28
- experimentUrl: string;
29
- pageTargeting: IPageTargeting;
30
- audienceTargeting: IAudienceTargeting;
31
- variants: IVariants;
32
- createdAt?: Date;
33
- updatedAt?: Date;
34
- }
35
-
36
- const PageTargetingSchema = new Schema<IPageTargeting>({
37
- condition: {
38
- type: String,
39
- default: null,
40
- },
41
- routes: {
42
- type: mongoose.Schema.Types.Mixed,
43
- },
44
- });
45
-
46
- const AudienceTargetingSchema = new Schema<IAudienceTargeting>({
47
- javascript: {
48
- type: String,
49
- default: "return true",
50
- },
51
- });
52
-
53
- const VariantsSchema = new Schema<IVariants>({
54
- name: {
55
- type: String,
56
- default: null,
57
- },
58
- traffic_allocation: {
59
- type: Number,
60
- default: null,
61
- },
62
- javascript: {
63
- type: String,
64
- default: null,
65
- },
66
- css: {
67
- type: String,
68
- default: null,
69
- },
70
- slug: {
71
- type: String,
72
- default: null,
73
- },
74
- });
75
-
76
- const ClientExperimentSchema = new Schema<IClientExperiment>(
77
- {
78
- organisationId: {
79
- type: String,
80
- default: null,
81
- },
82
- name: String,
83
- status: {
84
- type: String,
85
- default: "draft",
86
- },
87
- experimentUrl: String,
88
- client: {
89
- type: mongoose.Schema.Types.ObjectId,
90
- ref: "client",
91
- },
92
- viewId: {
93
- type: String,
94
- },
95
- pageTargeting: [PageTargetingSchema],
96
- audienceTargeting: AudienceTargetingSchema,
97
- variants: [VariantsSchema],
98
- },
99
- {
100
- timestamps: true,
101
- }
102
- );
103
-
104
- ClientExperimentSchema.index({
105
- client: 1,
106
- });
107
-
108
- const ClientExperiment = model<IClientExperiment>(
109
- "clientexperiment",
110
- ClientExperimentSchema
111
- );
112
-
113
- export default ClientExperiment;