@mac777/project-pinecone-models 1.1.12 → 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.js CHANGED
@@ -91,15 +91,18 @@ const orderSchema = new mongoose_1.default.Schema({
91
91
  // WHO
92
92
  userId: {
93
93
  type: mongoose_1.default.Schema.Types.ObjectId,
94
+ ref: 'User',
94
95
  required: true,
95
96
  },
96
97
  // WHAT
97
98
  eventId: {
98
99
  type: mongoose_1.default.Schema.Types.ObjectId,
100
+ ref: 'Event',
99
101
  required: true,
100
102
  },
101
103
  paymentId: {
102
104
  type: String,
105
+ ref: 'Payment',
103
106
  required: false,
104
107
  },
105
108
  tickets: [orderTicketSchema],
@@ -1,177 +1,5 @@
1
1
  import mongoose from "mongoose";
2
- declare const _default: mongoose.Model<{
3
- userId: mongoose.Types.ObjectId;
4
- 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
- tickets: mongoose.Types.DocumentArray<{
14
- quantity: number;
15
- ticketVariantId: mongoose.Types.ObjectId;
16
- variantName: string;
17
- pricePerTicket: number;
18
- subtotal: number;
19
- }, mongoose.Types.Subdocument<mongoose.mongo.BSON.ObjectId, any, {
20
- quantity: number;
21
- ticketVariantId: mongoose.Types.ObjectId;
22
- variantName: string;
23
- pricePerTicket: number;
24
- subtotal: number;
25
- }> & {
26
- quantity: number;
27
- ticketVariantId: mongoose.Types.ObjectId;
28
- variantName: string;
29
- pricePerTicket: number;
30
- subtotal: number;
31
- }>;
32
- eventId: mongoose.Types.ObjectId;
33
- expiresAt: NativeDate;
34
- requiresManualReview: boolean;
35
- paymentMethod: "card" | "bkash" | "bank_transfer" | "free";
36
- paymentStatus: "pending" | "succeeded" | "failed";
37
- ticketIds: mongoose.Types.ObjectId[];
38
- buyerEmail: string;
39
- ticketCount: number;
40
- paidAt?: NativeDate | null | undefined;
41
- refundedAt?: NativeDate | null | undefined;
42
- confirmedAt?: NativeDate | null | undefined;
43
- cancelledAt?: NativeDate | null | undefined;
44
- reminderSentAt?: NativeDate | null | undefined;
45
- buyerPhone?: string | null | undefined;
46
- ipAddress?: string | null | undefined;
47
- userAgent?: string | null | undefined;
48
- refund?: {
49
- reason: "event_cancelled" | "user_request" | "fraud";
50
- amount: number;
51
- refundedAt: NativeDate;
52
- stripeRefundId?: string | null | undefined;
53
- } | null | undefined;
54
- orderNumber?: string | null | undefined;
55
- paymentId?: string | null | undefined;
56
- manualReviewReason?: string | null | undefined;
57
- } & mongoose.DefaultTimestampProps, {}, {}, {}, mongoose.Document<unknown, {}, {
58
- userId: mongoose.Types.ObjectId;
59
- status: "pending" | "cancelled" | "confirmed" | "refunded";
60
- pricing: {
61
- currency: string;
62
- platformFee: number;
63
- subtotal: number;
64
- paymentFee: number;
65
- total: number;
66
- 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
- requiresManualReview: boolean;
90
- paymentMethod: "card" | "bkash" | "bank_transfer" | "free";
91
- paymentStatus: "pending" | "succeeded" | "failed";
92
- ticketIds: mongoose.Types.ObjectId[];
93
- buyerEmail: string;
94
- ticketCount: number;
95
- paidAt?: NativeDate | null | undefined;
96
- refundedAt?: NativeDate | null | undefined;
97
- confirmedAt?: NativeDate | null | undefined;
98
- cancelledAt?: NativeDate | null | undefined;
99
- reminderSentAt?: NativeDate | null | undefined;
100
- buyerPhone?: string | null | undefined;
101
- ipAddress?: string | null | undefined;
102
- userAgent?: string | null | undefined;
103
- refund?: {
104
- reason: "event_cancelled" | "user_request" | "fraud";
105
- amount: number;
106
- refundedAt: NativeDate;
107
- stripeRefundId?: string | null | undefined;
108
- } | null | undefined;
109
- orderNumber?: string | null | undefined;
110
- paymentId?: string | null | undefined;
111
- manualReviewReason?: string | null | undefined;
112
- } & mongoose.DefaultTimestampProps, {}, {
113
- timestamps: true;
114
- strict: true;
115
- }> & {
116
- userId: mongoose.Types.ObjectId;
117
- 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
- tickets: mongoose.Types.DocumentArray<{
127
- quantity: number;
128
- ticketVariantId: mongoose.Types.ObjectId;
129
- variantName: string;
130
- pricePerTicket: number;
131
- subtotal: number;
132
- }, mongoose.Types.Subdocument<mongoose.mongo.BSON.ObjectId, any, {
133
- quantity: number;
134
- ticketVariantId: mongoose.Types.ObjectId;
135
- variantName: string;
136
- pricePerTicket: number;
137
- subtotal: number;
138
- }> & {
139
- quantity: number;
140
- ticketVariantId: mongoose.Types.ObjectId;
141
- variantName: string;
142
- pricePerTicket: number;
143
- subtotal: number;
144
- }>;
145
- eventId: mongoose.Types.ObjectId;
146
- expiresAt: NativeDate;
147
- requiresManualReview: boolean;
148
- paymentMethod: "card" | "bkash" | "bank_transfer" | "free";
149
- paymentStatus: "pending" | "succeeded" | "failed";
150
- ticketIds: mongoose.Types.ObjectId[];
151
- buyerEmail: string;
152
- ticketCount: number;
153
- paidAt?: NativeDate | null | undefined;
154
- refundedAt?: NativeDate | null | undefined;
155
- confirmedAt?: NativeDate | null | undefined;
156
- cancelledAt?: NativeDate | null | undefined;
157
- reminderSentAt?: NativeDate | null | undefined;
158
- buyerPhone?: string | null | undefined;
159
- ipAddress?: string | null | undefined;
160
- userAgent?: string | null | undefined;
161
- refund?: {
162
- reason: "event_cancelled" | "user_request" | "fraud";
163
- amount: number;
164
- refundedAt: NativeDate;
165
- stripeRefundId?: string | null | undefined;
166
- } | null | undefined;
167
- orderNumber?: string | null | undefined;
168
- paymentId?: string | null | undefined;
169
- manualReviewReason?: string | 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>, {}, {}, {}, {}, {
2
+ declare const orderSchema: mongoose.Schema<any, mongoose.Model<any, any, any, any, any, any>, {}, {}, {}, {}, {
175
3
  timestamps: true;
176
4
  strict: true;
177
5
  }, {
@@ -346,5 +174,5 @@ declare const _default: mongoose.Model<{
346
174
  _id: mongoose.Types.ObjectId;
347
175
  } & {
348
176
  __v: number;
349
- }>>;
350
- export default _default;
177
+ }>;
178
+ export default orderSchema;
package/dist/Order.v2.js CHANGED
@@ -200,4 +200,4 @@ orderSchema.pre("save", function (next) {
200
200
  /* ----------------------------------
201
201
  * Export
202
202
  * ---------------------------------- */
203
- exports.default = mongoose_1.default.model("Order", orderSchema);
203
+ exports.default = orderSchema;
package/dist/Payment.js CHANGED
@@ -7,8 +7,8 @@ const mongoose_1 = __importDefault(require("mongoose"));
7
7
  // Payment schema for transaction logging
8
8
  const paymentSchema = new mongoose_1.default.Schema({
9
9
  // LINKS
10
- orderId: { type: mongoose_1.default.Schema.Types.ObjectId, required: true, index: true }, // Which order
11
- userId: { type: mongoose_1.default.Schema.Types.ObjectId, required: true, index: true }, // Who paid
10
+ orderId: { type: mongoose_1.default.Schema.Types.ObjectId, ref: 'Order', required: true, index: true }, // Which order
11
+ userId: { type: mongoose_1.default.Schema.Types.ObjectId, ref: 'User', required: true, index: true }, // Who paid
12
12
  paymentId: { type: String, required: true, unique: true, index: true }, // Stripe PI (unique)
13
13
  // MONEY
14
14
  amount: { type: Number, required: true },
package/dist/Payout.js CHANGED
@@ -12,10 +12,12 @@ const payoutSchema = new mongoose_1.default.Schema({
12
12
  // Ownership
13
13
  hostId: {
14
14
  type: mongoose_1.default.Schema.Types.ObjectId,
15
+ ref: 'User',
15
16
  required: true
16
17
  },
17
18
  eventId: {
18
19
  type: mongoose_1.default.Schema.Types.ObjectId,
20
+ ref: 'Event',
19
21
  required: true
20
22
  },
21
23
  // Financial Breakdown
@@ -60,12 +62,14 @@ const payoutSchema = new mongoose_1.default.Schema({
60
62
  // Admin Actions
61
63
  approvedBy: {
62
64
  type: mongoose_1.default.Schema.Types.ObjectId,
65
+ ref: 'User',
63
66
  }, // Admin who approved
64
67
  approvedAt: {
65
68
  type: Date,
66
69
  },
67
70
  rejectedBy: {
68
71
  type: mongoose_1.default.Schema.Types.ObjectId,
72
+ ref: 'User',
69
73
  },
70
74
  rejectedAt: {
71
75
  type: Date,
package/dist/Ticket.d.ts CHANGED
@@ -18,9 +18,9 @@ declare const ticketSchema: mongoose.Schema<any, mongoose.Model<any, any, any, a
18
18
  validUntil: NativeDate;
19
19
  secretHash: string;
20
20
  checkedInAt?: NativeDate | null | undefined;
21
+ transferredAt?: NativeDate | null | undefined;
21
22
  checkedInBy?: mongoose.Types.ObjectId | null | undefined;
22
23
  transferredTo?: mongoose.Types.ObjectId | null | undefined;
23
- transferredAt?: NativeDate | null | undefined;
24
24
  }, mongoose.Document<unknown, {}, mongoose.FlatRecord<{
25
25
  userId: mongoose.Types.ObjectId;
26
26
  status: "cancelled" | "refunded" | "valid" | "used" | "transferred";
@@ -40,9 +40,9 @@ declare const ticketSchema: mongoose.Schema<any, mongoose.Model<any, any, any, a
40
40
  validUntil: NativeDate;
41
41
  secretHash: string;
42
42
  checkedInAt?: NativeDate | null | undefined;
43
+ transferredAt?: NativeDate | null | undefined;
43
44
  checkedInBy?: mongoose.Types.ObjectId | null | undefined;
44
45
  transferredTo?: mongoose.Types.ObjectId | null | undefined;
45
- transferredAt?: NativeDate | null | undefined;
46
46
  }>, {}, mongoose.ResolveSchemaOptions<mongoose.DefaultSchemaOptions>> & mongoose.FlatRecord<{
47
47
  userId: mongoose.Types.ObjectId;
48
48
  status: "cancelled" | "refunded" | "valid" | "used" | "transferred";
@@ -62,9 +62,9 @@ declare const ticketSchema: mongoose.Schema<any, mongoose.Model<any, any, any, a
62
62
  validUntil: NativeDate;
63
63
  secretHash: string;
64
64
  checkedInAt?: NativeDate | null | undefined;
65
+ transferredAt?: NativeDate | null | undefined;
65
66
  checkedInBy?: mongoose.Types.ObjectId | null | undefined;
66
67
  transferredTo?: mongoose.Types.ObjectId | null | undefined;
67
- transferredAt?: NativeDate | null | undefined;
68
68
  }> & {
69
69
  _id: mongoose.Types.ObjectId;
70
70
  } & {
package/dist/Ticket.js CHANGED
@@ -8,9 +8,9 @@ const mongoose_1 = __importDefault(require("mongoose"));
8
8
  const ticketSchema = new mongoose_1.default.Schema({
9
9
  ticketNumber: { type: String, required: true, unique: true, index: true }, // Human-readable: "TKT-EVT123-A3K9-01"
10
10
  // BELONGS TO
11
- orderId: { type: mongoose_1.default.Schema.Types.ObjectId, required: true, index: true }, // Parent order
12
- eventId: { type: mongoose_1.default.Schema.Types.ObjectId, required: true, index: true }, // Which event
13
- userId: { type: mongoose_1.default.Schema.Types.ObjectId, required: true, index: true }, // Owner
11
+ orderId: { type: mongoose_1.default.Schema.Types.ObjectId, ref: 'Order', required: true, index: true }, // Parent order
12
+ eventId: { type: mongoose_1.default.Schema.Types.ObjectId, ref: 'Event', required: true, index: true }, // Which event
13
+ userId: { type: mongoose_1.default.Schema.Types.ObjectId, ref: 'User', required: true, index: true }, // Owner
14
14
  ticketVariantId: { type: mongoose_1.default.Schema.Types.ObjectId, required: true }, // Which type (VIP, GA, etc)
15
15
  // DETAILS (denormalized for speed)
16
16
  eventTitle: { type: String, required: true },
@@ -37,9 +37,9 @@ const ticketSchema = new mongoose_1.default.Schema({
37
37
  default: 'not_checked_in'
38
38
  },
39
39
  checkedInAt: Date,
40
- checkedInBy: mongoose_1.default.Schema.Types.ObjectId, // Staff/scanner user ID
40
+ checkedInBy: { type: mongoose_1.default.Schema.Types.ObjectId, ref: 'User' }, // Staff/scanner user ID
41
41
  // TRANSFER (if user transfers ticket to friend)
42
- transferredTo: mongoose_1.default.Schema.Types.ObjectId, // New owner user ID
42
+ transferredTo: { type: mongoose_1.default.Schema.Types.ObjectId, ref: 'User' }, // New owner user ID
43
43
  transferredAt: Date,
44
44
  // LIFECYCLE
45
45
  issuedAt: { type: Date, default: Date.now }, // When ticket was created
@@ -0,0 +1,172 @@
1
+ import mongoose from "mongoose";
2
+ declare const userSchema: mongoose.Schema<any, mongoose.Model<any, any, any, any, any, any>, {}, {}, {}, {}, {
3
+ timestamps: true;
4
+ strict: true;
5
+ }, {
6
+ role: "user" | "host" | "admin";
7
+ status: "deleted" | "active" | "suspended";
8
+ payout?: {
9
+ method: "bkash" | "bank_transfer";
10
+ verified: boolean;
11
+ bkash?: {
12
+ number?: string | null | undefined;
13
+ } | null | undefined;
14
+ verifiedAt?: NativeDate | null | undefined;
15
+ bank?: {
16
+ accountNumber?: string | null | undefined;
17
+ accountName?: string | null | undefined;
18
+ bankName?: string | null | undefined;
19
+ branchName?: string | null | undefined;
20
+ routingNumber?: string | null | undefined;
21
+ } | null | undefined;
22
+ } | null | undefined;
23
+ profile?: {
24
+ firstName: string;
25
+ lastName: string;
26
+ organization?: string | null | undefined;
27
+ avatar?: {
28
+ url?: string | null | undefined;
29
+ publicId?: string | null | undefined;
30
+ } | null | undefined;
31
+ } | null | undefined;
32
+ contact?: {
33
+ email: string;
34
+ emailVerified: boolean;
35
+ phoneVerified: boolean;
36
+ phone?: string | null | undefined;
37
+ emailVerification?: {
38
+ expiresAt?: NativeDate | null | undefined;
39
+ token?: string | null | undefined;
40
+ } | null | undefined;
41
+ phoneVerification?: {
42
+ expiresAt?: NativeDate | null | undefined;
43
+ token?: string | null | undefined;
44
+ } | null | undefined;
45
+ } | null | undefined;
46
+ identity?: {
47
+ nidVerified: boolean;
48
+ nidNumber?: string | null | undefined;
49
+ verifiedAt?: NativeDate | null | undefined;
50
+ } | null | undefined;
51
+ auth?: {
52
+ provider: "google" | "local";
53
+ password?: string | null | undefined;
54
+ refreshToken?: string | null | undefined;
55
+ googleId?: string | null | undefined;
56
+ } | null | undefined;
57
+ lastLoginAt?: NativeDate | null | undefined;
58
+ } & mongoose.DefaultTimestampProps, mongoose.Document<unknown, {}, mongoose.FlatRecord<{
59
+ role: "user" | "host" | "admin";
60
+ status: "deleted" | "active" | "suspended";
61
+ payout?: {
62
+ method: "bkash" | "bank_transfer";
63
+ verified: boolean;
64
+ bkash?: {
65
+ number?: string | null | undefined;
66
+ } | null | undefined;
67
+ verifiedAt?: NativeDate | null | undefined;
68
+ bank?: {
69
+ accountNumber?: string | null | undefined;
70
+ accountName?: string | null | undefined;
71
+ bankName?: string | null | undefined;
72
+ branchName?: string | null | undefined;
73
+ routingNumber?: string | null | undefined;
74
+ } | null | undefined;
75
+ } | null | undefined;
76
+ profile?: {
77
+ firstName: string;
78
+ lastName: string;
79
+ organization?: string | null | undefined;
80
+ avatar?: {
81
+ url?: string | null | undefined;
82
+ publicId?: string | null | undefined;
83
+ } | null | undefined;
84
+ } | null | undefined;
85
+ contact?: {
86
+ email: string;
87
+ emailVerified: boolean;
88
+ phoneVerified: boolean;
89
+ phone?: string | null | undefined;
90
+ emailVerification?: {
91
+ expiresAt?: NativeDate | null | undefined;
92
+ token?: string | null | undefined;
93
+ } | null | undefined;
94
+ phoneVerification?: {
95
+ expiresAt?: NativeDate | null | undefined;
96
+ token?: string | null | undefined;
97
+ } | null | undefined;
98
+ } | null | undefined;
99
+ identity?: {
100
+ nidVerified: boolean;
101
+ nidNumber?: string | null | undefined;
102
+ verifiedAt?: NativeDate | null | undefined;
103
+ } | null | undefined;
104
+ auth?: {
105
+ provider: "google" | "local";
106
+ password?: string | null | undefined;
107
+ refreshToken?: string | null | undefined;
108
+ googleId?: string | null | undefined;
109
+ } | null | undefined;
110
+ lastLoginAt?: NativeDate | null | undefined;
111
+ } & mongoose.DefaultTimestampProps>, {}, mongoose.ResolveSchemaOptions<{
112
+ timestamps: true;
113
+ strict: true;
114
+ }>> & mongoose.FlatRecord<{
115
+ role: "user" | "host" | "admin";
116
+ status: "deleted" | "active" | "suspended";
117
+ payout?: {
118
+ method: "bkash" | "bank_transfer";
119
+ verified: boolean;
120
+ bkash?: {
121
+ number?: string | null | undefined;
122
+ } | null | undefined;
123
+ verifiedAt?: NativeDate | null | undefined;
124
+ bank?: {
125
+ accountNumber?: string | null | undefined;
126
+ accountName?: string | null | undefined;
127
+ bankName?: string | null | undefined;
128
+ branchName?: string | null | undefined;
129
+ routingNumber?: string | null | undefined;
130
+ } | null | undefined;
131
+ } | null | undefined;
132
+ profile?: {
133
+ firstName: string;
134
+ lastName: string;
135
+ organization?: string | null | undefined;
136
+ avatar?: {
137
+ url?: string | null | undefined;
138
+ publicId?: string | null | undefined;
139
+ } | null | undefined;
140
+ } | null | undefined;
141
+ contact?: {
142
+ email: string;
143
+ emailVerified: boolean;
144
+ phoneVerified: boolean;
145
+ phone?: string | null | undefined;
146
+ emailVerification?: {
147
+ expiresAt?: NativeDate | null | undefined;
148
+ token?: string | null | undefined;
149
+ } | null | undefined;
150
+ phoneVerification?: {
151
+ expiresAt?: NativeDate | null | undefined;
152
+ token?: string | null | undefined;
153
+ } | null | undefined;
154
+ } | null | undefined;
155
+ identity?: {
156
+ nidVerified: boolean;
157
+ nidNumber?: string | null | undefined;
158
+ verifiedAt?: NativeDate | null | undefined;
159
+ } | null | undefined;
160
+ auth?: {
161
+ provider: "google" | "local";
162
+ password?: string | null | undefined;
163
+ refreshToken?: string | null | undefined;
164
+ googleId?: string | null | undefined;
165
+ } | null | undefined;
166
+ lastLoginAt?: NativeDate | null | undefined;
167
+ } & mongoose.DefaultTimestampProps> & {
168
+ _id: mongoose.Types.ObjectId;
169
+ } & {
170
+ __v: number;
171
+ }>;
172
+ export default userSchema;
@@ -0,0 +1,145 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const mongoose_1 = __importDefault(require("mongoose"));
7
+ /* ----------------------------------
8
+ * Subschemas
9
+ * ---------------------------------- */
10
+ const contactSchema = new mongoose_1.default.Schema({
11
+ email: {
12
+ type: String,
13
+ required: true,
14
+ lowercase: true,
15
+ trim: true,
16
+ index: true
17
+ },
18
+ emailVerified: {
19
+ type: Boolean,
20
+ default: false
21
+ },
22
+ emailVerification: {
23
+ token: String,
24
+ expiresAt: Date
25
+ },
26
+ phone: {
27
+ type: String
28
+ },
29
+ phoneVerified: {
30
+ type: Boolean,
31
+ default: false
32
+ },
33
+ phoneVerification: {
34
+ token: String,
35
+ expiresAt: Date
36
+ }
37
+ }, { _id: false });
38
+ const identitySchema = new mongoose_1.default.Schema({
39
+ nidNumber: String,
40
+ nidVerified: {
41
+ type: Boolean,
42
+ default: false
43
+ },
44
+ verifiedAt: Date
45
+ }, { _id: false });
46
+ const payoutSchema = new mongoose_1.default.Schema({
47
+ method: {
48
+ type: String,
49
+ enum: ["bkash", "bank_transfer"],
50
+ default: "bkash"
51
+ },
52
+ bkash: {
53
+ number: String
54
+ },
55
+ bank: {
56
+ bankName: String,
57
+ accountName: String,
58
+ accountNumber: String,
59
+ branchName: String,
60
+ routingNumber: String
61
+ },
62
+ verified: {
63
+ type: Boolean,
64
+ default: false
65
+ },
66
+ verifiedAt: Date
67
+ }, { _id: false });
68
+ const profileSchema = new mongoose_1.default.Schema({
69
+ firstName: {
70
+ type: String,
71
+ required: true,
72
+ trim: true
73
+ },
74
+ lastName: {
75
+ type: String,
76
+ required: true,
77
+ trim: true
78
+ },
79
+ organization: String,
80
+ avatar: {
81
+ url: String,
82
+ publicId: String // S3 / Cloudinary
83
+ }
84
+ }, { _id: false });
85
+ const authSchema = new mongoose_1.default.Schema({
86
+ provider: {
87
+ type: String,
88
+ enum: ["local", "google"],
89
+ default: "local"
90
+ },
91
+ password: {
92
+ type: String,
93
+ select: false
94
+ },
95
+ googleId: {
96
+ type: String,
97
+ index: true
98
+ },
99
+ refreshToken: {
100
+ type: String,
101
+ select: false
102
+ }
103
+ }, { _id: false });
104
+ /* ----------------------------------
105
+ * Main User Schema
106
+ * ---------------------------------- */
107
+ const userSchema = new mongoose_1.default.Schema({
108
+ profile: profileSchema,
109
+ contact: contactSchema,
110
+ identity: identitySchema,
111
+ payout: payoutSchema,
112
+ auth: authSchema,
113
+ role: {
114
+ type: String,
115
+ enum: ["user", "host", "admin"],
116
+ default: "user",
117
+ index: true
118
+ },
119
+ status: {
120
+ type: String,
121
+ enum: ["active", "suspended", "deleted"],
122
+ default: "active",
123
+ index: true
124
+ },
125
+ lastLoginAt: Date
126
+ }, {
127
+ timestamps: true,
128
+ strict: true
129
+ });
130
+ /* ----------------------------------
131
+ * Indexes
132
+ * ---------------------------------- */
133
+ userSchema.index({ "contact.email": 1 }, { unique: true });
134
+ userSchema.index({ "auth.googleId": 1 }, { sparse: true });
135
+ userSchema.index({ role: 1, status: 1 });
136
+ /* ----------------------------------
137
+ * Virtuals
138
+ * ---------------------------------- */
139
+ userSchema.virtual("fullName").get(function () {
140
+ return `${this.profile?.firstName || ""} ${this.profile?.lastName || ""}`;
141
+ });
142
+ /* ----------------------------------
143
+ * Export
144
+ * ---------------------------------- */
145
+ exports.default = userSchema;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mac777/project-pinecone-models",
3
- "version": "1.1.12",
3
+ "version": "1.1.13",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "scripts": {
package/src/Event.ts CHANGED
@@ -203,7 +203,7 @@ const historySchema = new mongoose.Schema({
203
203
  }, { _id: false });
204
204
 
205
205
  const eventSchema = new mongoose.Schema({
206
- hostId: { type: mongoose.Schema.Types.ObjectId, required: true },
206
+ hostId: { type: mongoose.Schema.Types.ObjectId, ref: 'User', required: true },
207
207
  slug: String,
208
208
 
209
209
  // STEP 1: BASICS
package/src/Media.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import mongoose from 'mongoose';
2
2
 
3
3
  const mediaSchema = new mongoose.Schema({
4
- userId: { type: mongoose.Schema.Types.ObjectId, required: true },
4
+ userId: { type: mongoose.Schema.Types.ObjectId, ref: 'User', required: true },
5
5
  type: { type: String, enum: ['event_cover', 'event_gallery', 'verification_doc'], required: true },
6
6
  provider: { type: String, enum: ['imagekit', 'backblaze'], required: true },
7
7
  status: { type: String, enum: ['temp', 'permanent', 'deleted'], required: true },
package/src/Order.ts CHANGED
@@ -91,17 +91,20 @@ const orderSchema = new mongoose.Schema({
91
91
  // WHO
92
92
  userId: {
93
93
  type: mongoose.Schema.Types.ObjectId,
94
+ ref: 'User',
94
95
  required: true,
95
96
  },
96
97
 
97
98
  // WHAT
98
99
  eventId: {
99
100
  type: mongoose.Schema.Types.ObjectId,
101
+ ref: 'Event',
100
102
  required: true,
101
103
  },
102
104
 
103
105
  paymentId: {
104
106
  type: String,
107
+ ref: 'Payment',
105
108
  required: false,
106
109
  },
107
110
 
package/src/Order.v2.ts CHANGED
@@ -249,5 +249,4 @@ orderSchema.pre("save", function (next) {
249
249
  * Export
250
250
  * ---------------------------------- */
251
251
 
252
- export default mongoose.model("Order", orderSchema);
253
-
252
+ export default orderSchema;
package/src/Payment.ts CHANGED
@@ -3,8 +3,8 @@ import mongoose from 'mongoose';
3
3
  // Payment schema for transaction logging
4
4
  const paymentSchema = new mongoose.Schema({
5
5
  // LINKS
6
- orderId: { type: mongoose.Schema.Types.ObjectId, required: true, index: true }, // Which order
7
- userId: { type: mongoose.Schema.Types.ObjectId, required: true, index: true }, // Who paid
6
+ orderId: { type: mongoose.Schema.Types.ObjectId, ref: 'Order', required: true, index: true }, // Which order
7
+ userId: { type: mongoose.Schema.Types.ObjectId, ref: 'User', required: true, index: true }, // Who paid
8
8
 
9
9
  paymentId: { type: String, required: true, unique: true, index: true }, // Stripe PI (unique)
10
10
 
package/src/Payout.ts CHANGED
@@ -9,10 +9,12 @@ const payoutSchema = new mongoose.Schema({
9
9
  // Ownership
10
10
  hostId: {
11
11
  type: mongoose.Schema.Types.ObjectId,
12
+ ref: 'User',
12
13
  required: true
13
14
  },
14
15
  eventId: {
15
16
  type: mongoose.Schema.Types.ObjectId,
17
+ ref: 'Event',
16
18
  required: true
17
19
  },
18
20
 
@@ -61,12 +63,14 @@ const payoutSchema = new mongoose.Schema({
61
63
  // Admin Actions
62
64
  approvedBy: {
63
65
  type: mongoose.Schema.Types.ObjectId,
66
+ ref: 'User',
64
67
  }, // Admin who approved
65
68
  approvedAt: {
66
69
  type: Date,
67
70
  },
68
71
  rejectedBy: {
69
72
  type: mongoose.Schema.Types.ObjectId,
73
+ ref: 'User',
70
74
  },
71
75
  rejectedAt: {
72
76
  type: Date,
package/src/Ticket.ts CHANGED
@@ -5,9 +5,9 @@ const ticketSchema = new mongoose.Schema({
5
5
  ticketNumber: { type: String, required: true, unique: true, index: true }, // Human-readable: "TKT-EVT123-A3K9-01"
6
6
 
7
7
  // BELONGS TO
8
- orderId: { type: mongoose.Schema.Types.ObjectId, required: true, index: true }, // Parent order
9
- eventId: { type: mongoose.Schema.Types.ObjectId, required: true, index: true }, // Which event
10
- userId: { type: mongoose.Schema.Types.ObjectId, required: true, index: true }, // Owner
8
+ orderId: { type: mongoose.Schema.Types.ObjectId, ref: 'Order', required: true, index: true }, // Parent order
9
+ eventId: { type: mongoose.Schema.Types.ObjectId, ref: 'Event', required: true, index: true }, // Which event
10
+ userId: { type: mongoose.Schema.Types.ObjectId, ref: 'User', required: true, index: true }, // Owner
11
11
  ticketVariantId: { type: mongoose.Schema.Types.ObjectId, required: true }, // Which type (VIP, GA, etc)
12
12
 
13
13
  // DETAILS (denormalized for speed)
@@ -38,10 +38,10 @@ const ticketSchema = new mongoose.Schema({
38
38
  default: 'not_checked_in'
39
39
  },
40
40
  checkedInAt: Date,
41
- checkedInBy: mongoose.Schema.Types.ObjectId, // Staff/scanner user ID
41
+ checkedInBy: { type: mongoose.Schema.Types.ObjectId, ref: 'User' }, // Staff/scanner user ID
42
42
 
43
43
  // TRANSFER (if user transfers ticket to friend)
44
- transferredTo: mongoose.Schema.Types.ObjectId, // New owner user ID
44
+ transferredTo: { type: mongoose.Schema.Types.ObjectId, ref: 'User' }, // New owner user ID
45
45
  transferredAt: Date,
46
46
 
47
47
  // LIFECYCLE
package/src/User.v2.ts ADDED
@@ -0,0 +1,187 @@
1
+ import mongoose from "mongoose";
2
+
3
+ /* ----------------------------------
4
+ * Subschemas
5
+ * ---------------------------------- */
6
+
7
+ const contactSchema = new mongoose.Schema(
8
+ {
9
+ email: {
10
+ type: String,
11
+ required: true,
12
+ lowercase: true,
13
+ trim: true,
14
+ index: true
15
+ },
16
+ emailVerified: {
17
+ type: Boolean,
18
+ default: false
19
+ },
20
+ emailVerification: {
21
+ token: String,
22
+ expiresAt: Date
23
+ },
24
+
25
+ phone: {
26
+ type: String
27
+ },
28
+ phoneVerified: {
29
+ type: Boolean,
30
+ default: false
31
+ },
32
+ phoneVerification: {
33
+ token: String,
34
+ expiresAt: Date
35
+ }
36
+ },
37
+ { _id: false }
38
+ );
39
+
40
+ const identitySchema = new mongoose.Schema(
41
+ {
42
+ nidNumber: String,
43
+ nidVerified: {
44
+ type: Boolean,
45
+ default: false
46
+ },
47
+ verifiedAt: Date
48
+ },
49
+ { _id: false }
50
+ );
51
+
52
+ const payoutSchema = new mongoose.Schema(
53
+ {
54
+ method: {
55
+ type: String,
56
+ enum: ["bkash", "bank_transfer"],
57
+ default: "bkash"
58
+ },
59
+
60
+ bkash: {
61
+ number: String
62
+ },
63
+
64
+ bank: {
65
+ bankName: String,
66
+ accountName: String,
67
+ accountNumber: String,
68
+ branchName: String,
69
+ routingNumber: String
70
+ },
71
+
72
+ verified: {
73
+ type: Boolean,
74
+ default: false
75
+ },
76
+ verifiedAt: Date
77
+ },
78
+ { _id: false }
79
+ );
80
+
81
+ const profileSchema = new mongoose.Schema(
82
+ {
83
+ firstName: {
84
+ type: String,
85
+ required: true,
86
+ trim: true
87
+ },
88
+ lastName: {
89
+ type: String,
90
+ required: true,
91
+ trim: true
92
+ },
93
+ organization: String,
94
+
95
+ avatar: {
96
+ url: String,
97
+ publicId: String // S3 / Cloudinary
98
+ }
99
+ },
100
+ { _id: false }
101
+ );
102
+
103
+ const authSchema = new mongoose.Schema(
104
+ {
105
+ provider: {
106
+ type: String,
107
+ enum: ["local", "google"],
108
+ default: "local"
109
+ },
110
+
111
+ password: {
112
+ type: String,
113
+ select: false
114
+ },
115
+
116
+ googleId: {
117
+ type: String,
118
+ index: true
119
+ },
120
+
121
+ refreshToken: {
122
+ type: String,
123
+ select: false
124
+ }
125
+ },
126
+ { _id: false }
127
+ );
128
+
129
+ /* ----------------------------------
130
+ * Main User Schema
131
+ * ---------------------------------- */
132
+
133
+ const userSchema = new mongoose.Schema(
134
+ {
135
+ profile: profileSchema,
136
+
137
+ contact: contactSchema,
138
+
139
+ identity: identitySchema,
140
+
141
+ payout: payoutSchema,
142
+
143
+ auth: authSchema,
144
+
145
+ role: {
146
+ type: String,
147
+ enum: ["user", "host", "admin"],
148
+ default: "user",
149
+ index: true
150
+ },
151
+
152
+ status: {
153
+ type: String,
154
+ enum: ["active", "suspended", "deleted"],
155
+ default: "active",
156
+ index: true
157
+ },
158
+
159
+ lastLoginAt: Date
160
+ },
161
+ {
162
+ timestamps: true,
163
+ strict: true
164
+ }
165
+ );
166
+
167
+ /* ----------------------------------
168
+ * Indexes
169
+ * ---------------------------------- */
170
+
171
+ userSchema.index({ "contact.email": 1 }, { unique: true });
172
+ userSchema.index({ "auth.googleId": 1 }, { sparse: true });
173
+ userSchema.index({ role: 1, status: 1 });
174
+
175
+ /* ----------------------------------
176
+ * Virtuals
177
+ * ---------------------------------- */
178
+
179
+ userSchema.virtual("fullName").get(function () {
180
+ return `${this.profile?.firstName || ""} ${this.profile?.lastName || ""}`;
181
+ });
182
+
183
+ /* ----------------------------------
184
+ * Export
185
+ * ---------------------------------- */
186
+
187
+ export default userSchema;