flykup_model_development 3.1.17 → 3.1.19

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 (2) hide show
  1. package/models/order.modal.js +460 -393
  2. package/package.json +1 -1
@@ -1,356 +1,14 @@
1
- // order.model.js - CORRECTED SCHEMA STRUCTURE
2
- import mongoose from 'mongoose';
3
- import { nanoid } from 'nanoid';
4
-
5
- const orderSchema = new mongoose.Schema(
6
- {
7
- orderId: {
8
- type: String,
9
- required: true,
10
- unique: true,
11
- default: () => `FLY-ORD-${nanoid(8)}`
12
- },
13
- userId: {
14
- type: mongoose.Schema.Types.ObjectId,
15
- ref: 'users',
16
- required: true,
17
- index: true
18
- },
19
- products: [{
20
- productId: {
21
- type: mongoose.Schema.Types.ObjectId,
22
- ref: 'productlistings',
23
- required: true
24
- },
25
- sellerUserId: {
26
- type: mongoose.Schema.Types.ObjectId,
27
- ref: 'users',
28
- required: true
29
- },
30
- quantity: {
31
- type: Number,
32
- required: true,
33
- min: 1
34
- },
35
- basePrice: {
36
- type: Number,
37
- required: true
38
- },
39
- gstRate: {
40
- type: Number,
41
- required: true
42
- },
43
- gstAmount: {
44
- type: Number,
45
- required: true
46
- },
47
- gstType: {
48
- type: String,
49
- enum: ['CGST+SGST', 'IGST',"NON-GST"],
50
- required: true
51
- }
52
- }],
53
- totalBaseAmount: {
54
- type: Number,
55
- required: true
56
- },
57
- totalGstAmount: {
58
- type: Number,
59
- required: true
60
- },
61
- totalAmount: {
62
- type: Number,
63
- required: true
64
- },
65
- gstSplit: {
66
- cgst: {
67
- rate: Number,
68
- amount: Number
69
- },
70
- sgst: {
71
- rate: Number,
72
- amount: Number
73
- },
74
- igst: {
75
- rate: Number,
76
- amount: Number
77
- }
78
- },
79
- deliveryAddress: {
80
- name: { type: String, maxLength: 50, trim: true, required: true },
81
- mobile: { type: String, trim: true, maxLength: 15, required: true },
82
- alternateMobile: { type: String, trim: true, maxLength: 15, default: null },
83
- line1: { type: String, trim: true, maxLength: 100, required: true },
84
- line2: { type: String, trim: true, maxLength: 100, default: "" },
85
- city: { type: String, trim: true, maxLength: 50, required: true },
86
- state: { type: String, trim: true, maxLength: 50, required: true },
87
- pincode: { type: String, maxLength: 6, trim: true, required: true },
88
- addressType: {
89
- type: String,
90
- enum: ['home', 'work', 'other'],
91
- default: 'home'
92
- },
93
- addressModified: {
94
- type: Boolean,
95
- default: false
96
- },
97
- addressModifiedAt: {
98
- type: Date,
99
- default: null
100
- }
101
- },
102
- // CORRECT PLACEMENT - TOP LEVEL FIELDS
103
- logisticsDetails: {
104
- shipmentMethod: {
105
- type: String,
106
- enum: ['self_shipment', 'flykup_logistics'],
107
- default: 'flykup_logistics'
108
- },
109
- awbNumber: String,
110
- carrier: String,
111
- carrierId: String,
112
- trackingNumber: String,
113
- trackingUrl: String,
114
- expectedDeliveryDate: Date,
115
- shipmentBookedAt: Date,
116
- logisticsResponse: mongoose.Schema.Types.Mixed,
117
- shipmentBookingStatus: {
118
- type: String,
119
- enum: ['pending', 'booked', 'failed'],
120
- default: 'pending'
121
- },
122
- shipmentBookingError: String,
123
- multipleSellers: {
124
- type: Boolean,
125
- default: false
126
- },
127
- selectedCourier: {
128
- courierId: String,
129
- courierName: String,
130
- deliveryCharges: Number,
131
- estimatedDays: Number,
132
- deliveryDate: String
133
- }
134
- },
135
- packageDetails: {
136
- totalWeight: Number,
137
- weightUnit: {
138
- type: String,
139
- default: 'grams'
140
- },
141
- dimensions: {
142
- length: Number,
143
- width: Number,
144
- height: Number
145
- },
146
- volumetricWeight: Number
147
- },
148
- pickupAddresses: [{
149
- sellerUserId: {
150
- type: mongoose.Schema.Types.ObjectId,
151
- ref: 'users',
152
- required: true
153
- },
154
- name: String,
155
- mobile: String,
156
- addressLine1: {
157
- type: String,
158
- trim: true,
159
- maxLength: 150,
160
- },
161
- addressLine2: {
162
- type: String,
163
- trim: true,
164
- maxLength: 150,
165
- },
166
- city: {
167
- type: String,
168
- trim: true,
169
- maxLength: 50,
170
- },
171
- state: {
172
- type: String,
173
- trim: true,
174
- maxLength: 50,
175
- },
176
- pincode: {
177
- type: String,
178
- trim: true,
179
- maxLength: 6,
180
- },
181
- }],
182
- paymentMethod: {
183
- type: String,
184
- enum: ['CARD', 'UPI', 'NETBANKING', 'WALLET', 'COD', "PENDING_PAYMENT", "CASHFREE", "Online"],
185
- required: true
186
- },
187
- paymentStatus: {
188
- type: String,
189
- enum: ['PENDING', 'PAID', 'FAILED', 'REFUNDED'],
190
- default: 'PENDING',
191
- required: true
192
- },
193
- orderStatus: {
194
- type: String,
195
- enum: [
196
- 'PENDING_PAYMENT',
197
- 'ORDERED',
198
- 'PACKED',
199
- 'SHIPPED',
200
- 'OUT_FOR_DELIVERY',
201
- 'DELIVERED',
202
- 'CANCELLED',
203
- 'RETURN_REQUESTED',
204
- 'RETURN_APPROVED',
205
- 'RETURN_SHIPPED',
206
- 'RETURN_RECEIVED',
207
- 'REFUNDED',
208
- 'REPLACEMENT_SHIPPED',
209
- 'REPLACEMENT_DELIVERED'
210
- ],
211
- // default: 'ORDERED', // Default should be the initial state
212
- required: true
213
- },
214
- sourceType: {
215
- type: String,
216
- enum: ['static', 'shoppable_video', 'livestream', 'auction'],
217
- required: true
218
- },
219
- sourceRefId: String,
220
- deliveryCharge: {
221
- type: Number,
222
- default: 40
223
- },
224
- statusTimeline: {
225
- ordered: Date,
226
- paid: Date,
227
- packed: Date,
228
- shipped: Date,
229
- outForDelivery: Date,
230
- delivered: Date,
231
- cancelled: Date,
232
- returnRequested: Date,
233
- returnApproved: Date,
234
- returnShipped: Date,
235
- returnReceived: Date,
236
- refunded: Date,
237
- replacementShipped: Date,
238
- replacementDelivered: Date
239
- },
240
- courierDetails: {
241
- carrier: String,
242
- trackingNumber: String,
243
- estimatedDelivery: Date
244
- },
245
- returnDetails: {
246
- reason: String,
247
- type: {
248
- type: String,
249
- enum: ['REFUND', 'REPLACE']
250
- },
251
- items: [{
252
- productId: mongoose.Schema.Types.ObjectId,
253
- quantity: Number
254
- }]
255
- },
256
- refundDetails: {
257
- amount: Number,
258
- method: String,
259
- transactionId: String
260
- },
261
- replacementDetails: {
262
- trackingNumber: String,
263
- replacementOrderId: mongoose.Schema.Types.ObjectId
264
- },
265
- returnRequests: [{
266
- _id: { type: mongoose.Schema.Types.ObjectId, auto: true },
267
- orderItemId: { // Reference to the specific item in the order
268
- type: mongoose.Schema.Types.ObjectId,
269
- required: true
270
- },
271
- reason: String,
272
- additionalNotes: String,
273
- images: [String],
274
- status: {
275
- type: String,
276
- enum: ['PENDING',
277
- 'APPROVED',
278
- 'REJECTED',
279
- 'RETURN_SHIPPED',
280
- 'RETURN_RECEIVED',
281
- 'REFUNDED'],
282
- default: 'PENDING'
283
- },
284
- shipmentDetails: {
285
- carrier: String,
286
- trackingNumber: String,
287
- receiptImage: String, // S3 key for uploaded image
288
- shippedAt: Date
289
- },
290
- receivedAt: Date,
291
- refundProcessedAt: Date,
292
- sellerResponse: String,
293
- requestedAt: Date,
294
- processedAt: Date
295
- }],
296
- cancelReason: String,
297
- cancelSource: {
298
- type: String,
299
- enum: ['user', 'seller', 'system'],
300
- default: 'user'
301
- },
302
- payment: {
303
- type: mongoose.Schema.Types.ObjectId,
304
- ref: 'orderPayment'
305
- },
306
- invoiceKey: {
307
- type: String,
308
- default: null
309
- },
310
- invoiceStatus: {
311
- type: String,
312
- enum: ['pending', 'processing', 'completed', 'failed'],
313
- default: 'pending'
314
- },
315
- invoiceRetries: {
316
- type: Number,
317
- default: 0
318
- },
319
- invoiceError: String
320
-
321
-
322
-
323
-
324
-
325
-
326
- },
327
-
328
- { timestamps: true }
329
- );
330
-
331
-
332
- const Order = mongoose.model('Order', orderSchema);
333
- export default Order;
334
-
335
-
336
- // const Order = mongoose.models.Order || mongoose.model('Order', orderSchema);
337
- // export default Order;
338
-
339
-
340
-
341
-
342
-
343
- // // order.modal.js
1
+ // // order.model.js - CORRECTED SCHEMA STRUCTURE
344
2
  // import mongoose from 'mongoose';
345
3
  // import { nanoid } from 'nanoid';
346
4
 
347
5
  // const orderSchema = new mongoose.Schema(
348
6
  // {
349
- // orderId: {
7
+ // orderId: {
350
8
  // type: String,
351
9
  // required: true,
352
10
  // unique: true,
353
- // default: () => `ORD-${nanoid(8)}`
11
+ // default: () => `FLY-ORD-${nanoid(8)}`
354
12
  // },
355
13
  // userId: {
356
14
  // type: mongoose.Schema.Types.ObjectId,
@@ -390,15 +48,7 @@ export default Order;
390
48
  // type: String,
391
49
  // enum: ['CGST+SGST', 'IGST',"NON-GST"],
392
50
  // required: true
393
- // },
394
- // isFlashSale: {
395
- // type: Boolean,
396
- // default: false
397
- // },
398
- // flashPrice: {
399
- // type: Number,
400
- // default: null // Store the specific flash price used for this item
401
- // }
51
+ // }
402
52
  // }],
403
53
  // totalBaseAmount: {
404
54
  // type: Number,
@@ -426,30 +76,86 @@ export default Order;
426
76
  // amount: Number
427
77
  // }
428
78
  // },
429
- // deliveryAddress: {
430
- // name: { type: String, maxLength: 50, trim: true, required: true },
431
- // mobile: { type: String, trim: true, maxLength: 15, required: true },
432
- // alternateMobile: { type: String, trim: true, maxLength: 15, default: null },
433
- // line1: { type: String, trim: true, maxLength: 100, required: true },
434
- // line2: { type: String, trim: true, maxLength: 100, default: "" },
435
- // city: { type: String, trim: true, maxLength: 50, required: true },
436
- // state: { type: String, trim: true, maxLength: 50, required: true },
437
- // pincode: { type: String, maxLength: 6, trim: true, required: true },
438
- // addressType: {
439
- // type: String,
440
- // enum: ['home', 'work', 'other'],
441
- // default: 'home'
442
- // },
443
- // // --- ADD THESE FIELDS INSIDE deliveryAddress ---
444
- // addressModified: {
79
+ // deliveryAddress: {
80
+ // name: { type: String, maxLength: 50, trim: true, required: true },
81
+ // mobile: { type: String, trim: true, maxLength: 15, required: true },
82
+ // alternateMobile: { type: String, trim: true, maxLength: 15, default: null },
83
+ // line1: { type: String, trim: true, maxLength: 100, required: true },
84
+ // line2: { type: String, trim: true, maxLength: 100, default: "" },
85
+ // city: { type: String, trim: true, maxLength: 50, required: true },
86
+ // state: { type: String, trim: true, maxLength: 50, required: true },
87
+ // pincode: { type: String, maxLength: 6, trim: true, required: true },
88
+ // addressType: {
89
+ // type: String,
90
+ // enum: ['home', 'work', 'other'],
91
+ // default: 'home'
92
+ // },
93
+ // addressModified: {
445
94
  // type: Boolean,
446
95
  // default: false
447
- // },
448
- // addressModifiedAt: {
96
+ // },
97
+ // addressModifiedAt: {
449
98
  // type: Date,
450
99
  // default: null
451
- // }
452
- // },
100
+ // }
101
+ // },
102
+ // // CORRECT PLACEMENT - TOP LEVEL FIELDS
103
+ // logisticsDetails: {
104
+ // shipmentMethod: {
105
+ // type: String,
106
+ // enum: ['self_shipment', 'flykup_logistics'],
107
+ // default: 'flykup_logistics'
108
+ // },
109
+ // awbNumber: String,
110
+ // carrier: String,
111
+ // carrierId: String,
112
+ // trackingNumber: String,
113
+ // trackingUrl: String,
114
+ // expectedDeliveryDate: Date,
115
+ // shipmentBookedAt: Date,
116
+ // logisticsResponse: mongoose.Schema.Types.Mixed,
117
+ // shipmentBookingStatus: {
118
+ // type: String,
119
+ // enum: ['pending', 'booked', 'failed'],
120
+ // default: 'pending'
121
+ // },
122
+ // shipmentBookingError: String,
123
+ // multipleSellers: {
124
+ // type: Boolean,
125
+ // default: false
126
+ // },
127
+ // selectedCourier: {
128
+ // courierId: String,
129
+ // courierName: String,
130
+ // deliveryCharges: Number,
131
+ // estimatedDays: Number,
132
+ // deliveryDate: String
133
+ // },
134
+ // cancellationAttemptedAt: Date,
135
+ // cancellationResult: {
136
+ // success: Boolean,
137
+ // message: String,
138
+ // error: String,
139
+ // responseData: mongoose.Schema.Types.Mixed
140
+ // },
141
+ // cancellationEligibility: {
142
+ // eligible: Boolean,
143
+ // reason: String
144
+ // }
145
+ // },
146
+ // packageDetails: {
147
+ // totalWeight: Number,
148
+ // weightUnit: {
149
+ // type: String,
150
+ // default: 'grams'
151
+ // },
152
+ // dimensions: {
153
+ // length: Number,
154
+ // width: Number,
155
+ // height: Number
156
+ // },
157
+ // volumetricWeight: Number
158
+ // },
453
159
  // pickupAddresses: [{
454
160
  // sellerUserId: {
455
161
  // type: mongoose.Schema.Types.ObjectId,
@@ -486,7 +192,7 @@ export default Order;
486
192
  // }],
487
193
  // paymentMethod: {
488
194
  // type: String,
489
- // enum: ['CARD', 'UPI', 'NETBANKING', 'WALLET', 'COD', "PENDING_PAYMENT", "CASHFREE","RAZORPAY", "Online"],
195
+ // enum: ['CARD', 'UPI', 'NETBANKING', 'WALLET', 'COD', "PENDING_PAYMENT", "CASHFREE","RAZORPAY", "Online"],
490
196
  // required: true
491
197
  // },
492
198
  // paymentStatus: {
@@ -518,7 +224,7 @@ export default Order;
518
224
  // },
519
225
  // sourceType: {
520
226
  // type: String,
521
- // enum: ['static', 'shoppable_video', 'livestream', 'auction','flash_sale'],
227
+ // enum: ['static', 'shoppable_video', 'livestream', 'auction'],
522
228
  // required: true
523
229
  // },
524
230
  // sourceRefId: String,
@@ -604,19 +310,6 @@ export default Order;
604
310
  // enum: ['user', 'seller', 'system'],
605
311
  // default: 'user'
606
312
  // },
607
- // flashSaleItems: [{
608
- // productId: {
609
- // type: mongoose.Schema.Types.ObjectId,
610
- // ref: 'productlistings'
611
- // },
612
- // flashSaleId: {
613
- // type: mongoose.Schema.Types.ObjectId,
614
- // ref: 'FlashSale'
615
- // },
616
- // quantity: Number,
617
- // flashPrice: Number,
618
- // originalPrice: Number
619
- // }],
620
313
  // payment: {
621
314
  // type: mongoose.Schema.Types.ObjectId,
622
315
  // ref: 'orderPayment'
@@ -635,13 +328,387 @@ export default Order;
635
328
  // default: 0
636
329
  // },
637
330
  // invoiceError: String
331
+
332
+
333
+
334
+
335
+
336
+
638
337
  // },
338
+
339
+ // { timestamps: true }
340
+ // );
341
+
342
+
343
+ // const Order = mongoose.model('Order', orderSchema);
344
+ // export default Order;
345
+
346
+
347
+ // const Order = mongoose.models.Order || mongoose.model('Order', orderSchema);
348
+ // export default Order;
349
+
350
+
351
+
352
+
353
+
354
+ // order.modal.js
355
+ import mongoose from 'mongoose';
356
+ import { nanoid } from 'nanoid';
357
+
358
+ const orderSchema = new mongoose.Schema(
359
+ {
360
+ orderId: {
361
+ type: String,
362
+ required: true,
363
+ unique: true,
364
+ default: () => `ORD-${nanoid(8)}`
365
+ },
366
+ userId: {
367
+ type: mongoose.Schema.Types.ObjectId,
368
+ ref: 'users',
369
+ required: true,
370
+ index: true
371
+ },
372
+ products: [{
373
+ productId: {
374
+ type: mongoose.Schema.Types.ObjectId,
375
+ ref: 'productlistings',
376
+ required: true
377
+ },
378
+ sellerUserId: {
379
+ type: mongoose.Schema.Types.ObjectId,
380
+ ref: 'users',
381
+ required: true
382
+ },
383
+ quantity: {
384
+ type: Number,
385
+ required: true,
386
+ min: 1
387
+ },
388
+ basePrice: {
389
+ type: Number,
390
+ required: true
391
+ },
392
+ gstRate: {
393
+ type: Number,
394
+ required: true
395
+ },
396
+ gstAmount: {
397
+ type: Number,
398
+ required: true
399
+ },
400
+ gstType: {
401
+ type: String,
402
+ enum: ['CGST+SGST', 'IGST',"NON-GST"],
403
+ required: true
404
+ },
405
+ isFlashSale: {
406
+ type: Boolean,
407
+ default: false
408
+ },
409
+ flashPrice: {
410
+ type: Number,
411
+ default: null // Store the specific flash price used for this item
412
+ }
413
+ }],
414
+ totalBaseAmount: {
415
+ type: Number,
416
+ required: true
417
+ },
418
+ totalGstAmount: {
419
+ type: Number,
420
+ required: true
421
+ },
422
+ totalAmount: {
423
+ type: Number,
424
+ required: true
425
+ },
426
+ gstSplit: {
427
+ cgst: {
428
+ rate: Number,
429
+ amount: Number
430
+ },
431
+ sgst: {
432
+ rate: Number,
433
+ amount: Number
434
+ },
435
+ igst: {
436
+ rate: Number,
437
+ amount: Number
438
+ }
439
+ },
440
+ deliveryAddress: {
441
+ name: { type: String, maxLength: 50, trim: true, required: true },
442
+ mobile: { type: String, trim: true, maxLength: 15, required: true },
443
+ alternateMobile: { type: String, trim: true, maxLength: 15, default: null },
444
+ line1: { type: String, trim: true, maxLength: 100, required: true },
445
+ line2: { type: String, trim: true, maxLength: 100, default: "" },
446
+ city: { type: String, trim: true, maxLength: 50, required: true },
447
+ state: { type: String, trim: true, maxLength: 50, required: true },
448
+ pincode: { type: String, maxLength: 6, trim: true, required: true },
449
+ addressType: {
450
+ type: String,
451
+ enum: ['home', 'work', 'other'],
452
+ default: 'home'
453
+ },
454
+ // --- ADD THESE FIELDS INSIDE deliveryAddress ---
455
+ addressModified: {
456
+ type: Boolean,
457
+ default: false
458
+ },
459
+ addressModifiedAt: {
460
+ type: Date,
461
+ default: null
462
+ }
463
+ },
464
+ logisticsDetails: {
465
+ shipmentMethod: {
466
+ type: String,
467
+ enum: ['self_shipment', 'flykup_logistics'],
468
+ default: 'flykup_logistics'
469
+ },
470
+ awbNumber: String,
471
+ carrier: String,
472
+ carrierId: String,
473
+ trackingNumber: String,
474
+ trackingUrl: String,
475
+ expectedDeliveryDate: Date,
476
+ shipmentBookedAt: Date,
477
+ logisticsResponse: mongoose.Schema.Types.Mixed,
478
+ shipmentBookingStatus: {
479
+ type: String,
480
+ enum: ['pending', 'booked', 'failed'],
481
+ default: 'pending'
482
+ },
483
+ shipmentBookingError: String,
484
+ multipleSellers: {
485
+ type: Boolean,
486
+ default: false
487
+ },
488
+ selectedCourier: {
489
+ courierId: String,
490
+ courierName: String,
491
+ deliveryCharges: Number,
492
+ estimatedDays: Number,
493
+ deliveryDate: String
494
+ },
495
+ cancellationAttemptedAt: Date,
496
+ cancellationResult: {
497
+ success: Boolean,
498
+ message: String,
499
+ error: String,
500
+ responseData: mongoose.Schema.Types.Mixed
501
+ },
502
+ cancellationEligibility: {
503
+ eligible: Boolean,
504
+ reason: String
505
+ }
506
+ },
507
+ packageDetails: {
508
+ totalWeight: Number,
509
+ weightUnit: {
510
+ type: String,
511
+ default: 'grams'
512
+ },
513
+ dimensions: {
514
+ length: Number,
515
+ width: Number,
516
+ height: Number
517
+ },
518
+ volumetricWeight: Number
519
+ },
520
+ pickupAddresses: [{
521
+ sellerUserId: {
522
+ type: mongoose.Schema.Types.ObjectId,
523
+ ref: 'users',
524
+ required: true
525
+ },
526
+ name: String,
527
+ mobile: String,
528
+ addressLine1: {
529
+ type: String,
530
+ trim: true,
531
+ maxLength: 150,
532
+ },
533
+ addressLine2: {
534
+ type: String,
535
+ trim: true,
536
+ maxLength: 150,
537
+ },
538
+ city: {
539
+ type: String,
540
+ trim: true,
541
+ maxLength: 50,
542
+ },
543
+ state: {
544
+ type: String,
545
+ trim: true,
546
+ maxLength: 50,
547
+ },
548
+ pincode: {
549
+ type: String,
550
+ trim: true,
551
+ maxLength: 6,
552
+ },
553
+ }],
554
+ paymentMethod: {
555
+ type: String,
556
+ enum: ['CARD', 'UPI', 'NETBANKING', 'WALLET', 'COD', "PENDING_PAYMENT", "CASHFREE","RAZORPAY", "Online"],
557
+ required: true
558
+ },
559
+ paymentStatus: {
560
+ type: String,
561
+ enum: ['PENDING', 'PAID', 'FAILED', 'REFUNDED'],
562
+ default: 'PENDING',
563
+ required: true
564
+ },
565
+ orderStatus: {
566
+ type: String,
567
+ enum: [
568
+ 'PENDING_PAYMENT',
569
+ 'ORDERED',
570
+ 'PACKED',
571
+ 'SHIPPED',
572
+ 'OUT_FOR_DELIVERY',
573
+ 'DELIVERED',
574
+ 'CANCELLED',
575
+ 'RETURN_REQUESTED',
576
+ 'RETURN_APPROVED',
577
+ 'RETURN_SHIPPED',
578
+ 'RETURN_RECEIVED',
579
+ 'REFUNDED',
580
+ 'REPLACEMENT_SHIPPED',
581
+ 'REPLACEMENT_DELIVERED'
582
+ ],
583
+ // default: 'ORDERED', // Default should be the initial state
584
+ required: true
585
+ },
586
+ sourceType: {
587
+ type: String,
588
+ enum: ['static', 'shoppable_video', 'livestream', 'auction','flash_sale'],
589
+ required: true
590
+ },
591
+ sourceRefId: String,
592
+ deliveryCharge: {
593
+ type: Number,
594
+ default: 40
595
+ },
596
+ statusTimeline: {
597
+ ordered: Date,
598
+ paid: Date,
599
+ packed: Date,
600
+ shipped: Date,
601
+ outForDelivery: Date,
602
+ delivered: Date,
603
+ cancelled: Date,
604
+ returnRequested: Date,
605
+ returnApproved: Date,
606
+ returnShipped: Date,
607
+ returnReceived: Date,
608
+ refunded: Date,
609
+ replacementShipped: Date,
610
+ replacementDelivered: Date
611
+ },
612
+ courierDetails: {
613
+ carrier: String,
614
+ trackingNumber: String,
615
+ estimatedDelivery: Date
616
+ },
617
+ returnDetails: {
618
+ reason: String,
619
+ type: {
620
+ type: String,
621
+ enum: ['REFUND', 'REPLACE']
622
+ },
623
+ items: [{
624
+ productId: mongoose.Schema.Types.ObjectId,
625
+ quantity: Number
626
+ }]
627
+ },
628
+ refundDetails: {
629
+ amount: Number,
630
+ method: String,
631
+ transactionId: String
632
+ },
633
+ replacementDetails: {
634
+ trackingNumber: String,
635
+ replacementOrderId: mongoose.Schema.Types.ObjectId
636
+ },
637
+ returnRequests: [{
638
+ _id: { type: mongoose.Schema.Types.ObjectId, auto: true },
639
+ orderItemId: { // Reference to the specific item in the order
640
+ type: mongoose.Schema.Types.ObjectId,
641
+ required: true
642
+ },
643
+ reason: String,
644
+ additionalNotes: String,
645
+ images: [String],
646
+ status: {
647
+ type: String,
648
+ enum: ['PENDING',
649
+ 'APPROVED',
650
+ 'REJECTED',
651
+ 'RETURN_SHIPPED',
652
+ 'RETURN_RECEIVED',
653
+ 'REFUNDED'],
654
+ default: 'PENDING'
655
+ },
656
+ shipmentDetails: {
657
+ carrier: String,
658
+ trackingNumber: String,
659
+ receiptImage: String, // S3 key for uploaded image
660
+ shippedAt: Date
661
+ },
662
+ receivedAt: Date,
663
+ refundProcessedAt: Date,
664
+ sellerResponse: String,
665
+ requestedAt: Date,
666
+ processedAt: Date
667
+ }],
668
+ cancelReason: String,
669
+ cancelSource: {
670
+ type: String,
671
+ enum: ['user', 'seller', 'system'],
672
+ default: 'user'
673
+ },
674
+ flashSaleItems: [{
675
+ productId: {
676
+ type: mongoose.Schema.Types.ObjectId,
677
+ ref: 'productlistings'
678
+ },
679
+ flashSaleId: {
680
+ type: mongoose.Schema.Types.ObjectId,
681
+ ref: 'FlashSale'
682
+ },
683
+ quantity: Number,
684
+ flashPrice: Number,
685
+ originalPrice: Number
686
+ }],
687
+ payment: {
688
+ type: mongoose.Schema.Types.ObjectId,
689
+ ref: 'orderPayment'
690
+ },
691
+ invoiceKey: {
692
+ type: String,
693
+ default: null
694
+ },
695
+ invoiceStatus: {
696
+ type: String,
697
+ enum: ['pending', 'processing', 'completed', 'failed'],
698
+ default: 'pending'
699
+ },
700
+ invoiceRetries: {
701
+ type: Number,
702
+ default: 0
703
+ },
704
+ invoiceError: String
705
+ },
639
706
 
640
- // { timestamps: true }
641
- // );
707
+ { timestamps: true }
708
+ );
642
709
 
643
710
 
644
711
 
645
712
 
646
- // const Order = mongoose.models.Order || mongoose.model('Order', orderSchema);
647
- // export default Order;
713
+ const Order = mongoose.models.Order || mongoose.model('Order', orderSchema);
714
+ export default Order;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "flykup_model_development",
3
- "version": "3.1.17",
3
+ "version": "3.1.19",
4
4
  "main": "index.js",
5
5
  "type": "module",
6
6
  "private": false,