flykup_model_production 1.0.16 → 1.0.17

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 (40) hide show
  1. package/.gitattributes +2 -0
  2. package/.github/workflows/publish.yml +31 -0
  3. package/auth.js +14 -14
  4. package/config.js +1 -1
  5. package/db_connection.js +23 -23
  6. package/index.js +140 -140
  7. package/models/AadhaarVerification.js +131 -131
  8. package/models/AdminEmail.model.js +38 -38
  9. package/models/BankVerification.js +92 -92
  10. package/models/GSTVerification.js +89 -89
  11. package/models/LiveStreamInteraction.model.js +101 -101
  12. package/models/ProductInteraction.model.js +108 -108
  13. package/models/Review.model.js +121 -121
  14. package/models/SearchAnalytics.js +23 -23
  15. package/models/ShoppableInteraction.model.js +106 -106
  16. package/models/Wishlist.model.js +29 -29
  17. package/models/admin.model.js +42 -42
  18. package/models/appUpdate.model.js +19 -19
  19. package/models/assets.model.js +32 -32
  20. package/models/blockedRegion.models.js +27 -27
  21. package/models/chat.model.js +511 -511
  22. package/models/coHostInvitation.model.js +60 -60
  23. package/models/follow.model.js +38 -38
  24. package/models/loginlogs.model.js +26 -26
  25. package/models/notification.model.js +130 -129
  26. package/models/order.modal.js +385 -385
  27. package/models/orderPayment.model.js +218 -218
  28. package/models/productListing.model.js +322 -322
  29. package/models/profileInteractions.model.js +44 -44
  30. package/models/registerShow.model.js +29 -29
  31. package/models/sellerDraft.model.js +27 -27
  32. package/models/shipper.model.js +126 -126
  33. package/models/shoppableVideo.model.js +237 -237
  34. package/models/shoppableVideoComment.model.js +57 -57
  35. package/models/shoppableVideoLike.model.js +29 -29
  36. package/models/shoppableVideoSave.model.js +27 -27
  37. package/models/shows.model.js +603 -603
  38. package/models/stock.model.js +105 -105
  39. package/models/ticket.model.js +115 -115
  40. package/package.json +18 -18
@@ -1,44 +1,44 @@
1
- import mongoose, { Schema, model } from 'mongoose';
2
-
3
- const profileInteractionSchema = new mongoose.Schema({
4
- profile: {
5
- type: mongoose.Schema.Types.ObjectId,
6
- ref: 'users',
7
- required: true,
8
- index: true
9
- },
10
- viewer: {
11
- type: mongoose.Schema.Types.ObjectId,
12
- ref: 'users',
13
- index: true
14
- },
15
- location: {
16
- city: String,
17
- region: String,
18
- country: String
19
- },
20
- platform: {
21
- type: String,
22
- enum: ['web', 'mobile', 'unknown'],
23
- default: 'mobile'
24
- },
25
- device: {
26
- type: String,
27
- enum: ['mobile', 'desktop', 'tablet', 'other']
28
- },
29
- browser: String,
30
- os: String,
31
- ip: { type: String, required: true },
32
- viewedAt: { type: Date, default: Date.now }
33
- }, { timestamps: true });
34
-
35
- // Ensures a user's view is counted only once per profile
36
- profileInteractionSchema.index({ profile: 1, viewer: 1 }, {
37
- unique: true,
38
- partialFilterExpression: { viewer: { $exists: true } }
39
- });
40
-
41
- profileInteractionSchema.index({ viewedAt: -1 });
42
- // Safe export to prevent OverwriteModelError
43
- const ProfileInteraction = mongoose.models.ProfileInteraction || mongoose.model('ProfileInteraction', profileInteractionSchema);
44
- export default ProfileInteraction;
1
+ import mongoose, { Schema, model } from 'mongoose';
2
+
3
+ const profileInteractionSchema = new mongoose.Schema({
4
+ profile: {
5
+ type: mongoose.Schema.Types.ObjectId,
6
+ ref: 'users',
7
+ required: true,
8
+ index: true
9
+ },
10
+ viewer: {
11
+ type: mongoose.Schema.Types.ObjectId,
12
+ ref: 'users',
13
+ index: true
14
+ },
15
+ location: {
16
+ city: String,
17
+ region: String,
18
+ country: String
19
+ },
20
+ platform: {
21
+ type: String,
22
+ enum: ['web', 'mobile', 'unknown'],
23
+ default: 'mobile'
24
+ },
25
+ device: {
26
+ type: String,
27
+ enum: ['mobile', 'desktop', 'tablet', 'other']
28
+ },
29
+ browser: String,
30
+ os: String,
31
+ ip: { type: String, required: true },
32
+ viewedAt: { type: Date, default: Date.now }
33
+ }, { timestamps: true });
34
+
35
+ // Ensures a user's view is counted only once per profile
36
+ profileInteractionSchema.index({ profile: 1, viewer: 1 }, {
37
+ unique: true,
38
+ partialFilterExpression: { viewer: { $exists: true } }
39
+ });
40
+
41
+ profileInteractionSchema.index({ viewedAt: -1 });
42
+ // Safe export to prevent OverwriteModelError
43
+ const ProfileInteraction = mongoose.models.ProfileInteraction || mongoose.model('ProfileInteraction', profileInteractionSchema);
44
+ export default ProfileInteraction;
@@ -1,29 +1,29 @@
1
- import mongoose, { Schema, model } from 'mongoose';
2
-
3
- const registerShowSchema = new mongoose.Schema(
4
- {
5
- showId: {
6
- type: mongoose.Schema.Types.ObjectId,
7
- ref: "shows", // Changed back to "Shows" to match your actual model name
8
- required: true,
9
- },
10
- userId: {
11
- type: mongoose.Schema.Types.ObjectId,
12
- ref: "users", // Make sure this matches your User model name
13
- required: true,
14
- },
15
- registeredAt: {
16
- type: Date,
17
- default: Date.now,
18
- },
19
- },
20
- { timestamps: true }
21
- );
22
-
23
- // Add compound index to prevent duplicate registrations
24
- registerShowSchema.index({ showId: 1, userId: 1 }, { unique: true });
25
-
26
- // Safe export to prevent OverwriteModelError
27
- const RegisterShow = mongoose.models.RegisterShow || mongoose.model("RegisterShow", registerShowSchema);
28
- export default RegisterShow;
29
-
1
+ import mongoose, { Schema, model } from 'mongoose';
2
+
3
+ const registerShowSchema = new mongoose.Schema(
4
+ {
5
+ showId: {
6
+ type: mongoose.Schema.Types.ObjectId,
7
+ ref: "shows", // Changed back to "Shows" to match your actual model name
8
+ required: true,
9
+ },
10
+ userId: {
11
+ type: mongoose.Schema.Types.ObjectId,
12
+ ref: "users", // Make sure this matches your User model name
13
+ required: true,
14
+ },
15
+ registeredAt: {
16
+ type: Date,
17
+ default: Date.now,
18
+ },
19
+ },
20
+ { timestamps: true }
21
+ );
22
+
23
+ // Add compound index to prevent duplicate registrations
24
+ registerShowSchema.index({ showId: 1, userId: 1 }, { unique: true });
25
+
26
+ // Safe export to prevent OverwriteModelError
27
+ const RegisterShow = mongoose.models.RegisterShow || mongoose.model("RegisterShow", registerShowSchema);
28
+ export default RegisterShow;
29
+
@@ -1,28 +1,28 @@
1
- import mongoose from "mongoose";
2
- const { Schema } = mongoose;
3
-
4
- const SellerDraftSchema = new Schema(
5
- {
6
- userInfo: {
7
- type: mongoose.Schema.Types.ObjectId,
8
- ref: "users",
9
- required: true,
10
- unique: true, // A user can only have one draft
11
- index: true,
12
- },
13
- formData: {
14
- type: mongoose.Schema.Types.Mixed, // Allows storing a flexible, partially-filled form object
15
- required: true,
16
- },
17
- // The 'createdAt' and 'updatedAt' fields are automatically managed by timestamps: true
18
- },
19
- { timestamps: true }
20
- );
21
-
22
- // TTL Index: Automatically delete documents 30 days after they were last updated.
23
- // This keeps your collection clean from abandoned drafts.
24
- SellerDraftSchema.index({ updatedAt: 1 }, { expireAfterSeconds: 2592000 }); // 30 days in seconds
25
-
26
- const SellerDraft = mongoose.models.sellerDrafts || mongoose.model("sellerDrafts", SellerDraftSchema);
27
-
1
+ import mongoose from "mongoose";
2
+ const { Schema } = mongoose;
3
+
4
+ const SellerDraftSchema = new Schema(
5
+ {
6
+ userInfo: {
7
+ type: mongoose.Schema.Types.ObjectId,
8
+ ref: "users",
9
+ required: true,
10
+ unique: true, // A user can only have one draft
11
+ index: true,
12
+ },
13
+ formData: {
14
+ type: mongoose.Schema.Types.Mixed, // Allows storing a flexible, partially-filled form object
15
+ required: true,
16
+ },
17
+ // The 'createdAt' and 'updatedAt' fields are automatically managed by timestamps: true
18
+ },
19
+ { timestamps: true }
20
+ );
21
+
22
+ // TTL Index: Automatically delete documents 30 days after they were last updated.
23
+ // This keeps your collection clean from abandoned drafts.
24
+ SellerDraftSchema.index({ updatedAt: 1 }, { expireAfterSeconds: 2592000 }); // 30 days in seconds
25
+
26
+ const SellerDraft = mongoose.models.sellerDrafts || mongoose.model("sellerDrafts", SellerDraftSchema);
27
+
28
28
  export default SellerDraft;
@@ -1,126 +1,126 @@
1
- import mongoose from "mongoose";
2
- const { Schema } = mongoose;
3
-
4
- const dropshipperConnectionSchema = new Schema({
5
- _id: false,
6
- sellerId: {
7
- type: mongoose.Schema.Types.ObjectId,
8
- ref: "sellers",
9
- required: true,
10
- },
11
- status: {
12
- type: String,
13
- enum: [
14
- "pending",
15
- "approved",
16
- "rejected",
17
- "revoked_by_seller",
18
- "revoked_by_dropshipper",
19
- ],
20
- required: true,
21
- default: "pending",
22
- },
23
- commissionRate: {
24
- type: Number, // Store as percentage, e.g., 15 for 15%
25
- min: 0,
26
- max: 100,
27
- default: null, // Or a platform default? Needs discussion
28
- },
29
- agreementDetails: {
30
- type: String,
31
- maxLength: 500,
32
- default: null,
33
- },
34
- requestedAt: {
35
- type: Date,
36
- default: Date.now,
37
- },
38
- respondedAt: {
39
- type: Date,
40
- default: null,
41
- },
42
- });
43
-
44
- const DropshipperSchema = new Schema(
45
- {
46
- userInfo: {
47
- type: mongoose.Schema.Types.ObjectId,
48
- ref: "users",
49
- required: true,
50
- unique: true, // Ensure one user is only one dropshipper
51
- index: true,
52
- },
53
- // Dropshipper specific info (can mirror Seller or be simpler)
54
- businessName: {
55
- // Optional: If they operate under a different name
56
- type: String,
57
- maxLength: 60,
58
- trim: true,
59
- },
60
- mobileNumber: {
61
- // May differ from user's primary mobile
62
- type: String,
63
- maxLength: 15,
64
- trim: true,
65
- },
66
- email: {
67
- // May differ from user's primary email
68
- type: String,
69
- trim: true,
70
- maxLength: 60,
71
- },
72
- // Connections managed by the Dropshipper
73
- connectedSellers: [dropshipperConnectionSchema],
74
-
75
- // Address might be needed for correspondence or legal reasons
76
- address: {
77
- addressLine1: { type: String, trim: true, maxLength: 150 },
78
- addressLine2: { type: String, trim: true, maxLength: 150 },
79
- city: { type: String, trim: true, maxLength: 50 },
80
- state: { type: String, trim: true, maxLength: 50 },
81
- pincode: { type: String, trim: true, maxLength: 6 },
82
- },
83
-
84
- // Payout information (CRUCIAL for dropshippers)
85
- bankDetails: {
86
- accountHolderName: { type: String, trim: true },
87
- accountNumber: { type: String, trim: true },
88
- ifscCode: { type: String, trim: true },
89
- bankName: { type: String, trim: true },
90
- // Add UPI details if needed
91
- },
92
-
93
- // Admin approval status for the dropshipper account itself
94
- approvalStatus: {
95
- type: String,
96
- enum: ["pending", "approved", "rejected", "suspended"],
97
- default: "pending",
98
- },
99
- rejectedReason: {
100
- type: String,
101
- maxLength: 200,
102
- default: null,
103
- },
104
- // Add other relevant fields like readiness for live selling etc.
105
- // e.g., experience, social media links if relevant
106
- },
107
- { timestamps: true, strict: true } // Use strict: true to prevent undefined fields
108
- );
109
-
110
- // Pre-hook (Example): Ensure user role is updated when dropshipper is created/approved
111
- // This logic might be better placed in the controller after successful creation/approval
112
- // DropshipperSchema.pre('save', async function (next) {
113
- // if (this.isNew || this.isModified('approvalStatus')) {
114
- // try {
115
- // const User = mongoose.model('users'); // Avoid circular dependency if possible
116
- // await User.findByIdAndUpdate(this.userInfo, {
117
- // $set: { role: this.approvalStatus === 'approved' ? 'dropshipper' : 'user' } // Adjust logic as needed
118
- // });
119
- // } catch (error) {
120
- // return next(error);
121
- // }
122
- // }
123
- // next();
124
- // });
125
- const Dropshipper = mongoose.models.dropshippers || mongoose.model("dropshippers", DropshipperSchema);
126
- export default Dropshipper;
1
+ import mongoose from "mongoose";
2
+ const { Schema } = mongoose;
3
+
4
+ const dropshipperConnectionSchema = new Schema({
5
+ _id: false,
6
+ sellerId: {
7
+ type: mongoose.Schema.Types.ObjectId,
8
+ ref: "sellers",
9
+ required: true,
10
+ },
11
+ status: {
12
+ type: String,
13
+ enum: [
14
+ "pending",
15
+ "approved",
16
+ "rejected",
17
+ "revoked_by_seller",
18
+ "revoked_by_dropshipper",
19
+ ],
20
+ required: true,
21
+ default: "pending",
22
+ },
23
+ commissionRate: {
24
+ type: Number, // Store as percentage, e.g., 15 for 15%
25
+ min: 0,
26
+ max: 100,
27
+ default: null, // Or a platform default? Needs discussion
28
+ },
29
+ agreementDetails: {
30
+ type: String,
31
+ maxLength: 500,
32
+ default: null,
33
+ },
34
+ requestedAt: {
35
+ type: Date,
36
+ default: Date.now,
37
+ },
38
+ respondedAt: {
39
+ type: Date,
40
+ default: null,
41
+ },
42
+ });
43
+
44
+ const DropshipperSchema = new Schema(
45
+ {
46
+ userInfo: {
47
+ type: mongoose.Schema.Types.ObjectId,
48
+ ref: "users",
49
+ required: true,
50
+ unique: true, // Ensure one user is only one dropshipper
51
+ index: true,
52
+ },
53
+ // Dropshipper specific info (can mirror Seller or be simpler)
54
+ businessName: {
55
+ // Optional: If they operate under a different name
56
+ type: String,
57
+ maxLength: 60,
58
+ trim: true,
59
+ },
60
+ mobileNumber: {
61
+ // May differ from user's primary mobile
62
+ type: String,
63
+ maxLength: 15,
64
+ trim: true,
65
+ },
66
+ email: {
67
+ // May differ from user's primary email
68
+ type: String,
69
+ trim: true,
70
+ maxLength: 60,
71
+ },
72
+ // Connections managed by the Dropshipper
73
+ connectedSellers: [dropshipperConnectionSchema],
74
+
75
+ // Address might be needed for correspondence or legal reasons
76
+ address: {
77
+ addressLine1: { type: String, trim: true, maxLength: 150 },
78
+ addressLine2: { type: String, trim: true, maxLength: 150 },
79
+ city: { type: String, trim: true, maxLength: 50 },
80
+ state: { type: String, trim: true, maxLength: 50 },
81
+ pincode: { type: String, trim: true, maxLength: 6 },
82
+ },
83
+
84
+ // Payout information (CRUCIAL for dropshippers)
85
+ bankDetails: {
86
+ accountHolderName: { type: String, trim: true },
87
+ accountNumber: { type: String, trim: true },
88
+ ifscCode: { type: String, trim: true },
89
+ bankName: { type: String, trim: true },
90
+ // Add UPI details if needed
91
+ },
92
+
93
+ // Admin approval status for the dropshipper account itself
94
+ approvalStatus: {
95
+ type: String,
96
+ enum: ["pending", "approved", "rejected", "suspended"],
97
+ default: "pending",
98
+ },
99
+ rejectedReason: {
100
+ type: String,
101
+ maxLength: 200,
102
+ default: null,
103
+ },
104
+ // Add other relevant fields like readiness for live selling etc.
105
+ // e.g., experience, social media links if relevant
106
+ },
107
+ { timestamps: true, strict: true } // Use strict: true to prevent undefined fields
108
+ );
109
+
110
+ // Pre-hook (Example): Ensure user role is updated when dropshipper is created/approved
111
+ // This logic might be better placed in the controller after successful creation/approval
112
+ // DropshipperSchema.pre('save', async function (next) {
113
+ // if (this.isNew || this.isModified('approvalStatus')) {
114
+ // try {
115
+ // const User = mongoose.model('users'); // Avoid circular dependency if possible
116
+ // await User.findByIdAndUpdate(this.userInfo, {
117
+ // $set: { role: this.approvalStatus === 'approved' ? 'dropshipper' : 'user' } // Adjust logic as needed
118
+ // });
119
+ // } catch (error) {
120
+ // return next(error);
121
+ // }
122
+ // }
123
+ // next();
124
+ // });
125
+ const Dropshipper = mongoose.models.dropshippers || mongoose.model("dropshippers", DropshipperSchema);
126
+ export default Dropshipper;