@mac777/project-pinecone-models 1.1.11 → 1.1.13

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.
package/dist/Event.js CHANGED
@@ -183,7 +183,7 @@ const historySchema = new mongoose_1.default.Schema({
183
183
  changes: mongoose_1.default.Schema.Types.Mixed,
184
184
  }, { _id: false });
185
185
  const eventSchema = new mongoose_1.default.Schema({
186
- hostId: { type: mongoose_1.default.Schema.Types.ObjectId, required: true },
186
+ hostId: { type: mongoose_1.default.Schema.Types.ObjectId, ref: 'User', required: true },
187
187
  slug: String,
188
188
  // STEP 1: BASICS
189
189
  title: { type: String, required: true, minlength: 10, maxlength: 100 },
package/dist/Media.js CHANGED
@@ -5,7 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const mongoose_1 = __importDefault(require("mongoose"));
7
7
  const mediaSchema = new mongoose_1.default.Schema({
8
- userId: { type: mongoose_1.default.Schema.Types.ObjectId, required: true },
8
+ userId: { type: mongoose_1.default.Schema.Types.ObjectId, ref: 'User', required: true },
9
9
  type: { type: String, enum: ['event_cover', 'event_gallery', 'verification_doc'], required: true },
10
10
  provider: { type: String, enum: ['imagekit', 'backblaze'], required: true },
11
11
  status: { type: String, enum: ['temp', 'permanent', 'deleted'], required: true },
package/dist/Order.d.ts CHANGED
@@ -1,15 +1,8 @@
1
- import mongoose from "mongoose";
2
- declare const _default: mongoose.Model<{
1
+ import mongoose from 'mongoose';
2
+ declare const orderSchema: mongoose.Schema<any, mongoose.Model<any, any, any, any, any, any>, {}, {}, {}, {}, mongoose.DefaultSchemaOptions, {
3
3
  userId: mongoose.Types.ObjectId;
4
+ createdAt: NativeDate;
4
5
  status: "pending" | "cancelled" | "confirmed" | "refunded";
5
- pricing: {
6
- currency: string;
7
- platformFee: number;
8
- subtotal: number;
9
- paymentFee: number;
10
- total: number;
11
- hostPayout: number;
12
- };
13
6
  tickets: mongoose.Types.DocumentArray<{
14
7
  quantity: number;
15
8
  ticketVariantId: mongoose.Types.ObjectId;
@@ -31,98 +24,40 @@ declare const _default: mongoose.Model<{
31
24
  }>;
32
25
  eventId: mongoose.Types.ObjectId;
33
26
  expiresAt: NativeDate;
34
- ticketCount: number;
35
- ticketIds: mongoose.Types.ObjectId[];
27
+ orderNumber: string;
28
+ requiresManualReview: boolean;
29
+ manualReviewReason: string;
36
30
  paymentMethod: "card" | "bkash" | "bank_transfer" | "free";
37
31
  paymentStatus: "pending" | "succeeded" | "failed";
38
- requiresManualReview: boolean;
32
+ ticketIds: mongoose.Types.ObjectId[];
39
33
  buyerEmail: string;
40
34
  paidAt?: NativeDate | null | undefined;
41
- refundedAt?: NativeDate | null | undefined;
42
- paymentId?: string | null | undefined;
43
- manualReviewReason?: string | null | undefined;
44
- confirmedAt?: NativeDate | null | undefined;
45
- cancelledAt?: NativeDate | null | undefined;
46
- reminderSentAt?: NativeDate | null | undefined;
47
- buyerPhone?: string | null | undefined;
48
- ipAddress?: string | null | undefined;
49
- userAgent?: string | null | undefined;
50
- orderNumber?: string | null | undefined;
51
- refund?: {
52
- reason: "event_cancelled" | "user_request" | "fraud";
53
- amount: number;
54
- refundedAt: NativeDate;
55
- stripeRefundId?: string | null | undefined;
56
- } | null | undefined;
57
- } & mongoose.DefaultTimestampProps, {}, {}, {}, mongoose.Document<unknown, {}, {
58
- userId: mongoose.Types.ObjectId;
59
- status: "pending" | "cancelled" | "confirmed" | "refunded";
60
- pricing: {
35
+ pricing?: {
61
36
  currency: string;
62
37
  platformFee: number;
63
38
  subtotal: number;
64
39
  paymentFee: number;
65
40
  total: number;
66
41
  hostPayout: number;
67
- };
68
- tickets: mongoose.Types.DocumentArray<{
69
- quantity: number;
70
- ticketVariantId: mongoose.Types.ObjectId;
71
- variantName: string;
72
- pricePerTicket: number;
73
- subtotal: number;
74
- }, mongoose.Types.Subdocument<mongoose.mongo.BSON.ObjectId, any, {
75
- quantity: number;
76
- ticketVariantId: mongoose.Types.ObjectId;
77
- variantName: string;
78
- pricePerTicket: number;
79
- subtotal: number;
80
- }> & {
81
- quantity: number;
82
- ticketVariantId: mongoose.Types.ObjectId;
83
- variantName: string;
84
- pricePerTicket: number;
85
- subtotal: number;
86
- }>;
87
- eventId: mongoose.Types.ObjectId;
88
- expiresAt: NativeDate;
89
- ticketCount: number;
90
- ticketIds: mongoose.Types.ObjectId[];
91
- paymentMethod: "card" | "bkash" | "bank_transfer" | "free";
92
- paymentStatus: "pending" | "succeeded" | "failed";
93
- requiresManualReview: boolean;
94
- buyerEmail: string;
95
- paidAt?: NativeDate | null | undefined;
42
+ } | null | undefined;
96
43
  refundedAt?: NativeDate | null | undefined;
97
- paymentId?: string | null | undefined;
98
- manualReviewReason?: string | null | undefined;
99
44
  confirmedAt?: NativeDate | null | undefined;
100
45
  cancelledAt?: NativeDate | null | undefined;
101
46
  reminderSentAt?: NativeDate | null | undefined;
102
47
  buyerPhone?: string | null | undefined;
103
48
  ipAddress?: string | null | undefined;
104
49
  userAgent?: string | null | undefined;
105
- orderNumber?: string | null | undefined;
106
50
  refund?: {
107
51
  reason: "event_cancelled" | "user_request" | "fraud";
108
52
  amount: number;
109
53
  refundedAt: NativeDate;
110
54
  stripeRefundId?: string | null | undefined;
111
55
  } | null | undefined;
112
- } & mongoose.DefaultTimestampProps, {}, {
113
- timestamps: true;
114
- strict: true;
115
- }> & {
56
+ paymentId?: string | null | undefined;
57
+ }, mongoose.Document<unknown, {}, mongoose.FlatRecord<{
116
58
  userId: mongoose.Types.ObjectId;
59
+ createdAt: NativeDate;
117
60
  status: "pending" | "cancelled" | "confirmed" | "refunded";
118
- pricing: {
119
- currency: string;
120
- platformFee: number;
121
- subtotal: number;
122
- paymentFee: number;
123
- total: number;
124
- hostPayout: number;
125
- };
126
61
  tickets: mongoose.Types.DocumentArray<{
127
62
  quantity: number;
128
63
  ticketVariantId: mongoose.Types.ObjectId;
@@ -144,102 +79,40 @@ declare const _default: mongoose.Model<{
144
79
  }>;
145
80
  eventId: mongoose.Types.ObjectId;
146
81
  expiresAt: NativeDate;
147
- ticketCount: number;
148
- ticketIds: mongoose.Types.ObjectId[];
82
+ orderNumber: string;
83
+ requiresManualReview: boolean;
84
+ manualReviewReason: string;
149
85
  paymentMethod: "card" | "bkash" | "bank_transfer" | "free";
150
86
  paymentStatus: "pending" | "succeeded" | "failed";
151
- requiresManualReview: boolean;
87
+ ticketIds: mongoose.Types.ObjectId[];
152
88
  buyerEmail: string;
153
89
  paidAt?: NativeDate | null | undefined;
154
- refundedAt?: NativeDate | null | undefined;
155
- paymentId?: string | null | undefined;
156
- manualReviewReason?: string | null | undefined;
157
- confirmedAt?: NativeDate | null | undefined;
158
- cancelledAt?: NativeDate | null | undefined;
159
- reminderSentAt?: NativeDate | null | undefined;
160
- buyerPhone?: string | null | undefined;
161
- ipAddress?: string | null | undefined;
162
- userAgent?: string | null | undefined;
163
- orderNumber?: string | null | undefined;
164
- refund?: {
165
- reason: "event_cancelled" | "user_request" | "fraud";
166
- amount: number;
167
- refundedAt: NativeDate;
168
- stripeRefundId?: string | null | undefined;
169
- } | null | undefined;
170
- } & mongoose.DefaultTimestampProps & {
171
- _id: mongoose.Types.ObjectId;
172
- } & {
173
- __v: number;
174
- }, mongoose.Schema<any, mongoose.Model<any, any, any, any, any, any>, {}, {}, {}, {}, {
175
- timestamps: true;
176
- strict: true;
177
- }, {
178
- userId: mongoose.Types.ObjectId;
179
- status: "pending" | "cancelled" | "confirmed" | "refunded";
180
- pricing: {
90
+ pricing?: {
181
91
  currency: string;
182
92
  platformFee: number;
183
93
  subtotal: number;
184
94
  paymentFee: number;
185
95
  total: number;
186
96
  hostPayout: number;
187
- };
188
- tickets: mongoose.Types.DocumentArray<{
189
- quantity: number;
190
- ticketVariantId: mongoose.Types.ObjectId;
191
- variantName: string;
192
- pricePerTicket: number;
193
- subtotal: number;
194
- }, mongoose.Types.Subdocument<mongoose.mongo.BSON.ObjectId, any, {
195
- quantity: number;
196
- ticketVariantId: mongoose.Types.ObjectId;
197
- variantName: string;
198
- pricePerTicket: number;
199
- subtotal: number;
200
- }> & {
201
- quantity: number;
202
- ticketVariantId: mongoose.Types.ObjectId;
203
- variantName: string;
204
- pricePerTicket: number;
205
- subtotal: number;
206
- }>;
207
- eventId: mongoose.Types.ObjectId;
208
- expiresAt: NativeDate;
209
- ticketCount: number;
210
- ticketIds: mongoose.Types.ObjectId[];
211
- paymentMethod: "card" | "bkash" | "bank_transfer" | "free";
212
- paymentStatus: "pending" | "succeeded" | "failed";
213
- requiresManualReview: boolean;
214
- buyerEmail: string;
215
- paidAt?: NativeDate | null | undefined;
97
+ } | null | undefined;
216
98
  refundedAt?: NativeDate | null | undefined;
217
- paymentId?: string | null | undefined;
218
- manualReviewReason?: string | null | undefined;
219
99
  confirmedAt?: NativeDate | null | undefined;
220
100
  cancelledAt?: NativeDate | null | undefined;
221
101
  reminderSentAt?: NativeDate | null | undefined;
222
102
  buyerPhone?: string | null | undefined;
223
103
  ipAddress?: string | null | undefined;
224
104
  userAgent?: string | null | undefined;
225
- orderNumber?: string | null | undefined;
226
105
  refund?: {
227
106
  reason: "event_cancelled" | "user_request" | "fraud";
228
107
  amount: number;
229
108
  refundedAt: NativeDate;
230
109
  stripeRefundId?: string | null | undefined;
231
110
  } | null | undefined;
232
- } & mongoose.DefaultTimestampProps, mongoose.Document<unknown, {}, mongoose.FlatRecord<{
111
+ paymentId?: string | null | undefined;
112
+ }>, {}, mongoose.ResolveSchemaOptions<mongoose.DefaultSchemaOptions>> & mongoose.FlatRecord<{
233
113
  userId: mongoose.Types.ObjectId;
114
+ createdAt: NativeDate;
234
115
  status: "pending" | "cancelled" | "confirmed" | "refunded";
235
- pricing: {
236
- currency: string;
237
- platformFee: number;
238
- subtotal: number;
239
- paymentFee: number;
240
- total: number;
241
- hostPayout: number;
242
- };
243
116
  tickets: mongoose.Types.DocumentArray<{
244
117
  quantity: number;
245
118
  ticketVariantId: mongoose.Types.ObjectId;
@@ -261,90 +134,39 @@ declare const _default: mongoose.Model<{
261
134
  }>;
262
135
  eventId: mongoose.Types.ObjectId;
263
136
  expiresAt: NativeDate;
264
- ticketCount: number;
265
- ticketIds: mongoose.Types.ObjectId[];
137
+ orderNumber: string;
138
+ requiresManualReview: boolean;
139
+ manualReviewReason: string;
266
140
  paymentMethod: "card" | "bkash" | "bank_transfer" | "free";
267
141
  paymentStatus: "pending" | "succeeded" | "failed";
268
- requiresManualReview: boolean;
142
+ ticketIds: mongoose.Types.ObjectId[];
269
143
  buyerEmail: string;
270
144
  paidAt?: NativeDate | null | undefined;
271
- refundedAt?: NativeDate | null | undefined;
272
- paymentId?: string | null | undefined;
273
- manualReviewReason?: string | null | undefined;
274
- confirmedAt?: NativeDate | null | undefined;
275
- cancelledAt?: NativeDate | null | undefined;
276
- reminderSentAt?: NativeDate | null | undefined;
277
- buyerPhone?: string | null | undefined;
278
- ipAddress?: string | null | undefined;
279
- userAgent?: string | null | undefined;
280
- orderNumber?: string | null | undefined;
281
- refund?: {
282
- reason: "event_cancelled" | "user_request" | "fraud";
283
- amount: number;
284
- refundedAt: NativeDate;
285
- stripeRefundId?: string | null | undefined;
286
- } | null | undefined;
287
- } & mongoose.DefaultTimestampProps>, {}, mongoose.ResolveSchemaOptions<{
288
- timestamps: true;
289
- strict: true;
290
- }>> & mongoose.FlatRecord<{
291
- userId: mongoose.Types.ObjectId;
292
- status: "pending" | "cancelled" | "confirmed" | "refunded";
293
- pricing: {
145
+ pricing?: {
294
146
  currency: string;
295
147
  platformFee: number;
296
148
  subtotal: number;
297
149
  paymentFee: number;
298
150
  total: number;
299
151
  hostPayout: number;
300
- };
301
- tickets: mongoose.Types.DocumentArray<{
302
- quantity: number;
303
- ticketVariantId: mongoose.Types.ObjectId;
304
- variantName: string;
305
- pricePerTicket: number;
306
- subtotal: number;
307
- }, mongoose.Types.Subdocument<mongoose.mongo.BSON.ObjectId, any, {
308
- quantity: number;
309
- ticketVariantId: mongoose.Types.ObjectId;
310
- variantName: string;
311
- pricePerTicket: number;
312
- subtotal: number;
313
- }> & {
314
- quantity: number;
315
- ticketVariantId: mongoose.Types.ObjectId;
316
- variantName: string;
317
- pricePerTicket: number;
318
- subtotal: number;
319
- }>;
320
- eventId: mongoose.Types.ObjectId;
321
- expiresAt: NativeDate;
322
- ticketCount: number;
323
- ticketIds: mongoose.Types.ObjectId[];
324
- paymentMethod: "card" | "bkash" | "bank_transfer" | "free";
325
- paymentStatus: "pending" | "succeeded" | "failed";
326
- requiresManualReview: boolean;
327
- buyerEmail: string;
328
- paidAt?: NativeDate | null | undefined;
152
+ } | null | undefined;
329
153
  refundedAt?: NativeDate | null | undefined;
330
- paymentId?: string | null | undefined;
331
- manualReviewReason?: string | null | undefined;
332
154
  confirmedAt?: NativeDate | null | undefined;
333
155
  cancelledAt?: NativeDate | null | undefined;
334
156
  reminderSentAt?: NativeDate | null | undefined;
335
157
  buyerPhone?: string | null | undefined;
336
158
  ipAddress?: string | null | undefined;
337
159
  userAgent?: string | null | undefined;
338
- orderNumber?: string | null | undefined;
339
160
  refund?: {
340
161
  reason: "event_cancelled" | "user_request" | "fraud";
341
162
  amount: number;
342
163
  refundedAt: NativeDate;
343
164
  stripeRefundId?: string | null | undefined;
344
165
  } | null | undefined;
345
- } & mongoose.DefaultTimestampProps> & {
166
+ paymentId?: string | null | undefined;
167
+ }> & {
346
168
  _id: mongoose.Types.ObjectId;
347
169
  } & {
348
170
  __v: number;
349
- }>>;
350
- export default _default;
171
+ }>;
172
+ export default orderSchema;
package/dist/Order.js CHANGED
@@ -4,19 +4,15 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const mongoose_1 = __importDefault(require("mongoose"));
7
- /* ----------------------------------
8
- * Embedded Schemas
9
- * ---------------------------------- */
7
+ // Order Ticket Schema
10
8
  const orderTicketSchema = new mongoose_1.default.Schema({
11
9
  ticketVariantId: {
12
10
  type: mongoose_1.default.Schema.Types.ObjectId,
13
- required: true,
14
- ref: "TicketVariant"
11
+ required: true
15
12
  },
16
13
  variantName: {
17
14
  type: String,
18
- required: true,
19
- trim: true
15
+ required: true
20
16
  },
21
17
  quantity: {
22
18
  type: Number,
@@ -34,19 +30,45 @@ const orderTicketSchema = new mongoose_1.default.Schema({
34
30
  min: 0
35
31
  }
36
32
  }, { _id: false });
33
+ // Pricing Schema
37
34
  const pricingSchema = new mongoose_1.default.Schema({
38
- subtotal: { type: Number, required: true, min: 0 },
39
- platformFee: { type: Number, required: true, min: 0 },
40
- paymentFee: { type: Number, required: true, min: 0 },
41
- total: { type: Number, required: true, min: 0 },
42
- currency: { type: String, default: "BDT" },
43
- hostPayout: { type: Number, required: true, min: 0 }
35
+ subtotal: {
36
+ type: Number,
37
+ required: true,
38
+ min: 0
39
+ },
40
+ platformFee: {
41
+ type: Number,
42
+ required: true,
43
+ min: 0
44
+ },
45
+ paymentFee: {
46
+ type: Number,
47
+ required: true,
48
+ min: 0
49
+ },
50
+ total: {
51
+ type: Number,
52
+ required: true,
53
+ min: 0
54
+ },
55
+ currency: {
56
+ type: String,
57
+ required: true,
58
+ default: 'BDT'
59
+ },
60
+ hostPayout: {
61
+ type: Number,
62
+ required: true,
63
+ min: 0
64
+ }
44
65
  }, { _id: false });
66
+ // Refund Schema
45
67
  const refundSchema = new mongoose_1.default.Schema({
46
68
  reason: {
47
69
  type: String,
48
- enum: ["event_cancelled", "user_request", "fraud"],
49
- required: true
70
+ required: true,
71
+ enum: ['event_cancelled', 'user_request', 'fraud']
50
72
  },
51
73
  amount: {
52
74
  type: Number,
@@ -59,145 +81,107 @@ const refundSchema = new mongoose_1.default.Schema({
59
81
  },
60
82
  stripeRefundId: String
61
83
  }, { _id: false });
62
- /* ----------------------------------
63
- * Main Order Schema
64
- * ---------------------------------- */
84
+ // Main Order Schema
65
85
  const orderSchema = new mongoose_1.default.Schema({
66
- /* ---------- Identity ---------- */
67
86
  orderNumber: {
68
87
  type: String,
88
+ required: true,
69
89
  unique: true,
70
- index: true
71
90
  },
91
+ // WHO
72
92
  userId: {
73
93
  type: mongoose_1.default.Schema.Types.ObjectId,
74
- ref: "User",
94
+ ref: 'User',
75
95
  required: true,
76
- index: true
77
96
  },
97
+ // WHAT
78
98
  eventId: {
79
99
  type: mongoose_1.default.Schema.Types.ObjectId,
80
- ref: "Event",
100
+ ref: 'Event',
81
101
  required: true,
82
- index: true
83
102
  },
84
- /* ---------- Tickets ---------- */
85
- tickets: {
86
- type: [orderTicketSchema],
87
- validate: (v) => v.length > 0
103
+ paymentId: {
104
+ type: String,
105
+ ref: 'Payment',
106
+ required: false,
88
107
  },
89
- ticketCount: {
90
- type: Number,
108
+ tickets: [orderTicketSchema],
109
+ // MONEY
110
+ pricing: pricingSchema,
111
+ // STATUS
112
+ status: {
113
+ type: String,
91
114
  required: true,
92
- min: 1
115
+ enum: ['pending', 'confirmed', 'cancelled', 'refunded'],
116
+ default: 'pending'
93
117
  },
94
- ticketIds: [{
95
- type: mongoose_1.default.Schema.Types.ObjectId,
96
- ref: "Ticket"
97
- }],
98
- /* ---------- Pricing ---------- */
99
- pricing: {
100
- type: pricingSchema,
101
- required: true
118
+ requiresManualReview: {
119
+ type: Boolean,
120
+ default: false
121
+ },
122
+ manualReviewReason: {
123
+ type: String,
124
+ default: null
102
125
  },
103
- /* ---------- Payment ---------- */
104
- paymentId: String,
105
126
  paymentMethod: {
106
127
  type: String,
107
- enum: ["card", "bkash", "bank_transfer", "free"],
108
- required: true
128
+ required: true,
129
+ enum: ['card', 'bkash', 'bank_transfer', 'free']
109
130
  },
110
131
  paymentStatus: {
111
132
  type: String,
112
- enum: ["pending", "succeeded", "failed"],
113
- default: "pending",
114
- index: true
133
+ required: true,
134
+ enum: ['pending', 'succeeded', 'failed'],
135
+ default: 'pending'
115
136
  },
116
137
  paidAt: Date,
117
- /* ---------- Order Lifecycle ---------- */
118
- status: {
119
- type: String,
120
- enum: ["pending", "confirmed", "cancelled", "refunded"],
121
- default: "pending",
138
+ // TICKETS ISSUED
139
+ ticketIds: [{
140
+ type: mongoose_1.default.Schema.Types.ObjectId,
141
+ ref: 'Ticket'
142
+ }],
143
+ // LIFECYCLE
144
+ createdAt: {
145
+ type: Date,
146
+ default: Date.now,
122
147
  index: true
123
148
  },
124
- requiresManualReview: {
125
- type: Boolean,
126
- default: false
149
+ expiresAt: {
150
+ type: Date,
151
+ required: true
127
152
  },
128
- manualReviewReason: String,
129
153
  confirmedAt: Date,
130
154
  cancelledAt: Date,
131
155
  refundedAt: Date,
132
- expiresAt: {
133
- type: Date,
134
- required: true,
135
- index: true
136
- },
137
156
  reminderSentAt: Date,
138
- /* ---------- Buyer ---------- */
157
+ // CONTACT
139
158
  buyerEmail: {
140
159
  type: String,
141
- required: true,
142
- lowercase: true,
143
- trim: true,
144
- index: true
160
+ required: true
145
161
  },
146
162
  buyerPhone: String,
147
- /* ---------- Refund ---------- */
148
- refund: {
149
- type: refundSchema,
150
- validate: {
151
- validator(refund) {
152
- return !refund || refund.amount <= this.pricing.total;
153
- },
154
- message: "Refund amount exceeds order total"
155
- }
156
- },
157
- /* ---------- Audit ---------- */
163
+ // AUDIT
158
164
  ipAddress: String,
159
- userAgent: String
160
- }, {
161
- timestamps: true,
162
- strict: true
163
- });
164
- /* ----------------------------------
165
- * Indexes
166
- * ---------------------------------- */
167
- orderSchema.index({ status: 1, createdAt: -1 });
168
- orderSchema.index({ eventId: 1, status: 1, createdAt: -1 });
169
- orderSchema.index({ paymentStatus: 1, createdAt: -1 });
170
- orderSchema.index({ expiresAt: 1 }, {
171
- expireAfterSeconds: 0,
172
- partialFilterExpression: { status: "pending" }
165
+ userAgent: String,
166
+ // REFUND (if applicable)
167
+ refund: refundSchema
173
168
  });
174
- /* ----------------------------------
175
- * Hooks
176
- * ---------------------------------- */
177
- // Generate order number
178
- orderSchema.pre("save", function (next) {
169
+ // Indexes for performance
170
+ orderSchema.index({ userId: 1, createdAt: -1 });
171
+ orderSchema.index({ eventId: 1, status: 1 });
172
+ orderSchema.index({ status: 1, expiresAt: 1 });
173
+ // Auto-generate order number
174
+ orderSchema.pre('save', function (next) {
179
175
  if (this.isNew && !this.orderNumber) {
180
- const ts = Date.now().toString().slice(-6);
181
- const rand = Math.random().toString(36).substring(2, 8).toUpperCase();
182
- this.orderNumber = `ORD-${ts}-${rand}`;
176
+ const timestamp = Date.now().toString().slice(-6);
177
+ const random = Math.random().toString(36).substring(2, 8).toUpperCase();
178
+ this.orderNumber = `ORD-${timestamp}-${random}`;
183
179
  }
184
180
  next();
185
181
  });
186
- // Compute ticket count
187
- orderSchema.pre("validate", function (next) {
188
- if (this.tickets?.length) {
189
- this.ticketCount = this.tickets.reduce((sum, t) => sum + t.quantity, 0);
190
- }
191
- next();
192
- });
193
- // Pricing immutability after confirmation
194
- orderSchema.pre("save", function (next) {
195
- if (!this.isNew && this.isModified("pricing") && this.status !== "pending") {
196
- return next(new Error("Pricing cannot be modified after confirmation"));
197
- }
182
+ // Update updatedAt on save
183
+ orderSchema.pre('save', function (next) {
184
+ // Note: We don't have updatedAt field, but could add if needed
198
185
  next();
199
186
  });
200
- /* ----------------------------------
201
- * Export
202
- * ---------------------------------- */
203
- exports.default = mongoose_1.default.model("Order", orderSchema);
187
+ exports.default = orderSchema;