@messenger-box/platform-server 10.0.3-alpha.6 → 10.0.3-alpha.62

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 (144) hide show
  1. package/lib/containers/containers.js +3 -1
  2. package/lib/containers/containers.js.map +1 -1
  3. package/lib/containers/context-services-from-container.d.ts +2 -2
  4. package/lib/containers/context-services-from-container.js +2 -1
  5. package/lib/containers/context-services-from-container.js.map +1 -1
  6. package/lib/graphql/resolvers/channel-member.d.ts +3 -3
  7. package/lib/graphql/resolvers/channel-member.js +30 -5
  8. package/lib/graphql/resolvers/channel-member.js.map +1 -1
  9. package/lib/graphql/resolvers/channel.d.ts +3 -3
  10. package/lib/graphql/resolvers/channel.js +275 -53
  11. package/lib/graphql/resolvers/channel.js.map +1 -1
  12. package/lib/graphql/resolvers/extended-token-account.d.ts +3 -32
  13. package/lib/graphql/resolvers/extended-token-account.js +90 -23
  14. package/lib/graphql/resolvers/extended-token-account.js.map +1 -1
  15. package/lib/graphql/resolvers/index.d.ts +1 -31
  16. package/lib/graphql/resolvers/post-thread.d.ts +2 -3
  17. package/lib/graphql/resolvers/post-thread.js +294 -132
  18. package/lib/graphql/resolvers/post-thread.js.map +1 -1
  19. package/lib/graphql/resolvers/post.d.ts +2 -3
  20. package/lib/graphql/resolvers/post.js +697 -234
  21. package/lib/graphql/resolvers/post.js.map +1 -1
  22. package/lib/graphql/resolvers/reaction.d.ts +3 -3
  23. package/lib/graphql/resolvers/reaction.js +96 -14
  24. package/lib/graphql/resolvers/reaction.js.map +1 -1
  25. package/lib/graphql/schema/channel-member.graphql +110 -21
  26. package/lib/graphql/schema/channel-member.graphql.js +1 -1
  27. package/lib/graphql/schema/channel.graphql +331 -38
  28. package/lib/graphql/schema/channel.graphql.js +1 -1
  29. package/lib/graphql/schema/post-thread.graphql +166 -21
  30. package/lib/graphql/schema/post-thread.graphql.js +1 -1
  31. package/lib/graphql/schema/post.graphql +280 -40
  32. package/lib/graphql/schema/post.graphql.js +1 -1
  33. package/lib/graphql/schema/reaction.graphql +71 -13
  34. package/lib/graphql/schema/reaction.graphql.js +1 -1
  35. package/lib/graphql/schema/services.graphql +2 -0
  36. package/lib/graphql/schema/users.graphql +76 -13
  37. package/lib/graphql/schema/users.graphql.js +1 -1
  38. package/lib/index.js +1 -1
  39. package/lib/index.js.map +1 -1
  40. package/lib/interfaces/index.d.ts +0 -1
  41. package/lib/interfaces/services.d.ts +1 -2
  42. package/lib/migrations/dbMigrations/AddPostsConfigurationsMigration.d.ts +17 -0
  43. package/lib/migrations/dbMigrations/AddPostsConfigurationsMigration.js +44 -0
  44. package/lib/migrations/dbMigrations/AddPostsConfigurationsMigration.js.map +1 -0
  45. package/lib/migrations/dbMigrations/index.d.ts +1 -0
  46. package/lib/migrations/index.d.ts +1 -0
  47. package/lib/migrations/mail-template-migration.js +1 -1
  48. package/lib/migrations/message-notification-template-migration.d.ts +1 -1
  49. package/lib/migrations/message-notification-template-migration.js +1 -1
  50. package/lib/plugins/channel-moleculer-service.d.ts +21 -1
  51. package/lib/plugins/channel-moleculer-service.js +417 -115
  52. package/lib/plugins/channel-moleculer-service.js.map +1 -1
  53. package/lib/plugins/extended-token-account-moleculer-service.d.ts +25 -1
  54. package/lib/plugins/extended-token-account-moleculer-service.js +348 -22
  55. package/lib/plugins/extended-token-account-moleculer-service.js.map +1 -1
  56. package/lib/plugins/messenger-notification-moleculer-service.d.ts +27 -3
  57. package/lib/plugins/messenger-notification-moleculer-service.js +404 -58
  58. package/lib/plugins/messenger-notification-moleculer-service.js.map +1 -1
  59. package/lib/plugins/post-moleculer-service.d.ts +85 -21
  60. package/lib/plugins/post-moleculer-service.js +986 -256
  61. package/lib/plugins/post-moleculer-service.js.map +1 -1
  62. package/lib/plugins/post-thread-moleculer-service.d.ts +33 -1
  63. package/lib/plugins/post-thread-moleculer-service.js +326 -8
  64. package/lib/plugins/post-thread-moleculer-service.js.map +1 -1
  65. package/lib/plugins/reaction-moleculer-service.js +1 -1
  66. package/lib/plugins/reaction-moleculer-service.js.map +1 -1
  67. package/lib/preferences/settings/post-settings.d.ts +2 -0
  68. package/lib/preferences/settings/post-settings.js +47 -9
  69. package/lib/preferences/settings/post-settings.js.map +1 -1
  70. package/lib/services/channel-service.d.ts +178 -33
  71. package/lib/services/channel-service.js +735 -276
  72. package/lib/services/channel-service.js.map +1 -1
  73. package/lib/services/extended-token-account-service.d.ts +130 -14
  74. package/lib/services/extended-token-account-service.js +462 -52
  75. package/lib/services/extended-token-account-service.js.map +1 -1
  76. package/lib/services/messenger-notification-service.d.ts +106 -13
  77. package/lib/services/messenger-notification-service.js +824 -442
  78. package/lib/services/messenger-notification-service.js.map +1 -1
  79. package/lib/services/post-service.d.ts +172 -16
  80. package/lib/services/post-service.js +580 -113
  81. package/lib/services/post-service.js.map +1 -1
  82. package/lib/services/post-thread-service.d.ts +114 -5
  83. package/lib/services/post-thread-service.js +400 -13
  84. package/lib/services/post-thread-service.js.map +1 -1
  85. package/lib/services/proxy-services/channel-microservice.d.ts +5 -3
  86. package/lib/services/proxy-services/channel-microservice.js +19 -10
  87. package/lib/services/proxy-services/channel-microservice.js.map +1 -1
  88. package/lib/services/proxy-services/messenger-notification-microservice.d.ts +128 -8
  89. package/lib/services/proxy-services/messenger-notification-microservice.js +324 -29
  90. package/lib/services/proxy-services/messenger-notification-microservice.js.map +1 -1
  91. package/lib/services/proxy-services/post-microservice.d.ts +186 -12
  92. package/lib/services/proxy-services/post-microservice.js +543 -54
  93. package/lib/services/proxy-services/post-microservice.js.map +1 -1
  94. package/lib/services/proxy-services/post-thread-microservice.d.ts +134 -3
  95. package/lib/services/proxy-services/post-thread-microservice.js +388 -6
  96. package/lib/services/proxy-services/post-thread-microservice.js.map +1 -1
  97. package/lib/services/proxy-services/reaction-microservice.d.ts +161 -3
  98. package/lib/services/proxy-services/reaction-microservice.js +474 -2
  99. package/lib/services/proxy-services/reaction-microservice.js.map +1 -1
  100. package/lib/services/reaction-service.d.ts +124 -4
  101. package/lib/services/reaction-service.js +415 -3
  102. package/lib/services/reaction-service.js.map +1 -1
  103. package/lib/store/models/account-token-store.d.ts +1 -1
  104. package/lib/store/models/account-token-store.js.map +1 -1
  105. package/lib/store/models/channel.d.ts +2 -3
  106. package/lib/store/models/channel.js +180 -71
  107. package/lib/store/models/channel.js.map +1 -1
  108. package/lib/store/models/post-thread.d.ts +3 -3
  109. package/lib/store/models/post-thread.js +96 -14
  110. package/lib/store/models/post-thread.js.map +1 -1
  111. package/lib/store/models/post.d.ts +2 -3
  112. package/lib/store/models/post.js +143 -23
  113. package/lib/store/models/post.js.map +1 -1
  114. package/lib/store/models/reaction.d.ts +2 -3
  115. package/lib/store/models/reaction.js +67 -8
  116. package/lib/store/models/reaction.js.map +1 -1
  117. package/lib/store/repositories/__tests__/__fixtures__/team-repository.d.ts +3 -3
  118. package/lib/store/repositories/channel-repository.d.ts +6 -6
  119. package/lib/store/repositories/channel-repository.js +5 -2
  120. package/lib/store/repositories/channel-repository.js.map +1 -1
  121. package/lib/store/repositories/post-repository.d.ts +6 -6
  122. package/lib/store/repositories/post-repository.js +5 -2
  123. package/lib/store/repositories/post-repository.js.map +1 -1
  124. package/lib/store/repositories/post-thread-repository.d.ts +6 -6
  125. package/lib/store/repositories/post-thread-repository.js +5 -2
  126. package/lib/store/repositories/post-thread-repository.js.map +1 -1
  127. package/lib/store/repositories/reaction-repository.d.ts +6 -6
  128. package/lib/store/repositories/reaction-repository.js +5 -2
  129. package/lib/store/repositories/reaction-repository.js.map +1 -1
  130. package/lib/templates/constants/SERVER_TYPES.ts.template +0 -3
  131. package/lib/templates/repositories/ChannelRepository.ts.template +3 -3
  132. package/lib/templates/repositories/PostRepository.ts.template +3 -3
  133. package/lib/templates/repositories/PostThreadRepository.ts.template +3 -3
  134. package/lib/templates/repositories/ReactionRepository.ts.template +3 -4
  135. package/lib/templates/services/ChannelService.ts.template +278 -39
  136. package/lib/templates/services/ExtendedTokenAccountService.ts.template +107 -3
  137. package/lib/templates/services/MessengerNotificationService.ts.template +94 -19
  138. package/lib/templates/services/PostService.ts.template +184 -20
  139. package/lib/templates/services/PostThreadService.ts.template +151 -6
  140. package/lib/templates/services/ReactionService.ts.template +129 -3
  141. package/package.json +4 -4
  142. package/lib/interfaces/context.d.ts +0 -14
  143. package/lib/store/models/common-options.js +0 -20
  144. package/lib/store/models/common-options.js.map +0 -1
@@ -1,38 +1,48 @@
1
- import {Schema}from'mongoose';import {RoomType}from'common';import {commonModeSchemaOptions,addIdVirtualFields}from'./common-options.js';const channelModelSchema = new Schema({
1
+ import {Schema}from'mongoose';import {DB_COLL_NAMES,RoomType}from'common/server';const ChannelSchema = new Schema({
2
2
  type: {
3
3
  type: Schema.Types.String,
4
- enum: [RoomType.Channel, RoomType.Direct, RoomType.Group, RoomType.Private, RoomType.Public, RoomType.Visitor, RoomType.Service],
5
- required: true
4
+ enum: Object.values(RoomType),
5
+ required: true,
6
+ index: true
6
7
  },
7
8
  orgName: {
8
9
  type: Schema.Types.String,
9
10
  required: function () {
10
11
  return ![RoomType.Direct, RoomType.Public, RoomType.Service].includes(this.type);
11
- }
12
+ },
13
+ index: true
12
14
  },
13
15
  members: {
14
- type: [new Schema({
16
+ type: [{
15
17
  user: {
16
18
  type: Schema.Types.ObjectId,
17
- ref: 'accounts'
19
+ ref: DB_COLL_NAMES.Accounts,
20
+ required: true,
21
+ index: true
18
22
  },
19
23
  roles: {
20
- type: Schema.Types.String
24
+ type: Schema.Types.String,
25
+ default: 'member'
21
26
  },
22
27
  msgCount: {
23
- type: Schema.Types.Number
28
+ type: Schema.Types.Number,
29
+ default: 0
24
30
  },
25
31
  mentionCount: {
26
- type: Schema.Types.Number
32
+ type: Schema.Types.Number,
33
+ default: 0
27
34
  },
28
35
  mentionCountRoot: {
29
- type: Schema.Types.Number
36
+ type: Schema.Types.Number,
37
+ default: 0
30
38
  },
31
39
  msgCountRoot: {
32
- type: Schema.Types.Number
40
+ type: Schema.Types.Number,
41
+ default: 0
33
42
  },
34
43
  notifyProps: {
35
- type: Schema.Types.Mixed
44
+ type: Schema.Types.Mixed,
45
+ default: {}
36
46
  },
37
47
  explicitRoles: {
38
48
  type: Schema.Types.String
@@ -41,16 +51,25 @@ import {Schema}from'mongoose';import {RoomType}from'common';import {commonModeSc
41
51
  type: Schema.Types.String
42
52
  },
43
53
  lastViewedAt: {
44
- type: Schema.Types.Date
54
+ type: Schema.Types.Date,
55
+ default: Date.now
56
+ },
57
+ createdAt: {
58
+ type: Schema.Types.Date,
59
+ default: Date.now
60
+ },
61
+ updatedAt: {
62
+ type: Schema.Types.Date,
63
+ default: Date.now
45
64
  },
46
65
  deletedAt: {
47
66
  type: Schema.Types.Date
48
67
  }
49
- }, commonModeSchemaOptions)],
68
+ }],
50
69
  required: true,
51
70
  validate: {
52
- message: 'Channel already exists',
53
- validator: async function (members, type) {
71
+ message: 'Channel validation failed',
72
+ validator: async function (members) {
54
73
  // Extract the IDs of the users in the members array
55
74
  const userIds = members.map(member => member.user.toString());
56
75
  // Check if there are any duplicate user IDs
@@ -58,76 +77,166 @@ import {Schema}from'mongoose';import {RoomType}from'common';import {commonModeSc
58
77
  if (uniqueUserIds.length !== userIds.length) {
59
78
  return false;
60
79
  }
61
- if (this.type !== RoomType.Direct || members?.length > 2) {
80
+ // For non-direct channels, allow any number of members
81
+ if (this.type !== RoomType.Direct) {
62
82
  return true;
63
83
  }
64
- // Check if any of the user IDs already exist in other direct channels
65
- const orgName = this.orgName;
66
- if (this.type === RoomType.Direct && members?.length < 2) {
67
- const filter = {
68
- type: RoomType.Direct,
69
- orgName: orgName,
70
- 'members.user': {
71
- $all: members.map(m => m.user)
72
- },
73
- members: {
74
- $size: 1
75
- }
76
- };
77
- const directChannels = await this.constructor.findOne(filter);
78
- if (directChannels && Object.keys(directChannels).length > 0) return false;
79
- } else {
80
- const filter = {
81
- type: RoomType.Direct,
82
- orgName: orgName,
83
- 'members.user': {
84
- $all: members.map(m => m.user)
85
- },
86
- members: {
87
- $size: 2
88
- }
89
- };
90
- const directChannels = await this.constructor.findOne(filter);
91
- return !directChannels;
84
+ // Direct channel validation
85
+ if (members?.length > 2) {
86
+ return false; // Direct channels can't have more than 2 members
92
87
  }
88
+ const orgName = this.orgName;
89
+ const expectedSize = members.length;
90
+ // Check if a direct channel with the same members already exists
91
+ const filter = {
92
+ type: RoomType.Direct,
93
+ orgName: orgName,
94
+ 'members.user': {
95
+ $all: members.map(m => m.user)
96
+ },
97
+ members: {
98
+ $size: expectedSize
99
+ }
100
+ };
101
+ const ChannelModel = this.constructor;
102
+ const existingChannel = await ChannelModel.findOne(filter);
103
+ return !existingChannel;
93
104
  }
94
105
  }
95
106
  },
96
- deletedAt: {
97
- type: Schema.Types.Date
98
- },
99
- lastPostAt: {
100
- type: Schema.Types.Date
101
- },
102
- totalMsgCount: {
103
- type: Schema.Types.Number
104
- },
105
- totalMsgCountRoot: {
106
- type: Schema.Types.Number
107
- },
108
107
  team: {
109
108
  type: Schema.Types.ObjectId,
110
- ref: 'team'
109
+ ref: DB_COLL_NAMES.Teams,
110
+ index: true
111
+ },
112
+ creator: {
113
+ type: Schema.Types.ObjectId,
114
+ ref: DB_COLL_NAMES.Accounts,
115
+ required: true,
116
+ index: true
111
117
  },
112
118
  title: {
113
- type: Schema.Types.String
119
+ type: Schema.Types.String,
120
+ trim: true,
121
+ index: true
114
122
  },
115
123
  displayName: {
116
- type: Schema.Types.String
124
+ type: Schema.Types.String,
125
+ trim: true,
126
+ index: true
117
127
  },
118
128
  description: {
119
- type: Schema.Types.String
120
- },
121
- props: {
122
- type: Schema.Types.Mixed
129
+ type: Schema.Types.String,
130
+ trim: true
123
131
  },
124
132
  purpose: {
125
- type: Schema.Types.String
133
+ type: Schema.Types.String,
134
+ trim: true
126
135
  },
127
- creator: {
128
- type: Schema.Types.ObjectId,
129
- ref: 'accounts'
136
+ topic: {
137
+ type: Schema.Types.String,
138
+ trim: true
139
+ },
140
+ lastPostAt: {
141
+ type: Schema.Types.Date,
142
+ index: true
143
+ },
144
+ totalMsgCount: {
145
+ type: Schema.Types.Number,
146
+ default: 0,
147
+ min: 0
148
+ },
149
+ totalMsgCountRoot: {
150
+ type: Schema.Types.Number,
151
+ default: 0,
152
+ min: 0
153
+ },
154
+ createdAt: {
155
+ type: Schema.Types.Date,
156
+ default: Date.now,
157
+ index: true
158
+ },
159
+ updatedAt: {
160
+ type: Schema.Types.Date,
161
+ default: Date.now
162
+ },
163
+ deletedAt: {
164
+ type: Schema.Types.Date,
165
+ index: true
166
+ }
167
+ }, {
168
+ timestamps: true,
169
+ collection: 'channels',
170
+ toJSON: {
171
+ virtuals: true
172
+ },
173
+ toObject: {
174
+ virtuals: true
175
+ }
176
+ });
177
+ // Virtual fields
178
+ ChannelSchema.virtual('id').get(function () {
179
+ return this._id.toHexString();
180
+ });
181
+ // Add virtual id getter for each member
182
+ const memberSchema = ChannelSchema.path('members').schema;
183
+ memberSchema.virtual('id').get(function () {
184
+ return this._id.toHexString();
185
+ });
186
+ // ChannelSchema.virtual('members', {
187
+ // ref: 'users',
188
+ // localField: 'members',
189
+ // foreignField: 'id',
190
+ // justOne: false,
191
+ // });
192
+ // Add compound indexes for better query performance
193
+ ChannelSchema.index({
194
+ orgName: 1,
195
+ type: 1
196
+ });
197
+ ChannelSchema.index({
198
+ orgName: 1,
199
+ 'members.user': 1
200
+ });
201
+ ChannelSchema.index({
202
+ type: 1,
203
+ deletedAt: 1
204
+ });
205
+ ChannelSchema.index({
206
+ team: 1,
207
+ type: 1
208
+ });
209
+ ChannelSchema.index({
210
+ creator: 1,
211
+ createdAt: -1
212
+ });
213
+ ChannelSchema.index({
214
+ lastPostAt: -1
215
+ });
216
+ // For direct channels, ensure uniqueness
217
+ ChannelSchema.index({
218
+ type: 1,
219
+ orgName: 1,
220
+ 'members.user': 1
221
+ }, {
222
+ unique: true,
223
+ partialFilterExpression: {
224
+ type: RoomType.Direct,
225
+ deletedAt: {
226
+ $exists: false
227
+ }
130
228
  }
131
- }, commonModeSchemaOptions);
132
- addIdVirtualFields(channelModelSchema);
133
- const ChannelModelFunc = db => db.model('channel', channelModelSchema);export{ChannelModelFunc};//# sourceMappingURL=channel.js.map
229
+ });
230
+ // Pre-save middleware to update timestamps
231
+ ChannelSchema.pre('save', function (next) {
232
+ this.updatedAt = new Date();
233
+ next();
234
+ });
235
+ // Pre-update middleware
236
+ ChannelSchema.pre(['updateOne', 'findOneAndUpdate'], function (next) {
237
+ this.set({
238
+ updatedAt: new Date()
239
+ });
240
+ next();
241
+ });
242
+ const ChannelModelFunc = db => db.model('channels', ChannelSchema);export{ChannelModelFunc};//# sourceMappingURL=channel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"channel.js","sources":["../../../src/store/models/channel.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"channel.js","sources":["../../../src/store/models/channel.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import { Document, Model, Connection } from 'mongoose';
2
- import { IPostThread } from 'common';
3
- export type IThreadsModel = Document<IPostThread>;
1
+ import { Model, Connection } from 'mongoose';
2
+ import { IPostThreadModel } from 'common/server';
3
+ export type IThreadsModel = IPostThreadModel;
4
4
  export type PostThreadModelType = Model<IThreadsModel>;
5
5
  export declare const PostThreadModelFunc: (db: Connection) => PostThreadModelType;
@@ -1,37 +1,119 @@
1
- import {Schema}from'mongoose';import {commonModeSchemaOptions,addIdVirtualFields}from'./common-options.js';const postThreadModelSchema = new Schema({
1
+ import {Schema}from'mongoose';import {DB_COLL_NAMES}from'common/server';const postThreadModelSchema = new Schema({
2
2
  post: {
3
3
  type: Schema.Types.ObjectId,
4
- ref: 'posts'
4
+ ref: 'posts',
5
+ required: true,
6
+ index: true
5
7
  },
6
8
  channel: {
7
9
  type: Schema.Types.ObjectId,
8
- ref: 'channels'
10
+ ref: 'channels',
11
+ required: true,
12
+ index: true
9
13
  },
10
14
  replyCount: {
11
- type: Schema.Types.Number
15
+ type: Schema.Types.Number,
16
+ default: 0,
17
+ min: 0
12
18
  },
13
19
  lastReplyAt: {
14
- type: Schema.Types.Date
20
+ type: Schema.Types.Date,
21
+ index: true
15
22
  },
16
23
  participants: {
17
- type: [new Schema({
24
+ type: [{
18
25
  user: {
19
26
  type: Schema.Types.ObjectId,
20
- ref: 'accounts'
27
+ ref: DB_COLL_NAMES.Accounts,
28
+ required: true,
29
+ index: true
21
30
  },
22
31
  roles: {
23
- type: Schema.Types.String
32
+ type: Schema.Types.String,
33
+ default: 'participant'
24
34
  },
25
35
  orgName: {
26
- type: Schema.Types.String
36
+ type: Schema.Types.String,
37
+ trim: true
38
+ },
39
+ createdAt: {
40
+ type: Schema.Types.Date,
41
+ default: Date.now
42
+ },
43
+ updatedAt: {
44
+ type: Schema.Types.Date,
45
+ default: Date.now
27
46
  },
28
47
  deletedAt: {
29
48
  type: Schema.Types.Date
30
49
  }
31
- }, commonModeSchemaOptions)]
50
+ }],
51
+ validate: {
52
+ message: 'Participants validation failed',
53
+ validator: function (participants) {
54
+ // Extract the IDs of the users in the participants array
55
+ const userIds = participants.map(participant => participant.user.toString());
56
+ // Check if there are any duplicate user IDs
57
+ const uniqueUserIds = [...new Set(userIds)];
58
+ return uniqueUserIds.length === userIds.length;
59
+ }
60
+ }
61
+ },
62
+ createdAt: {
63
+ type: Schema.Types.Date,
64
+ default: Date.now,
65
+ index: true
66
+ },
67
+ updatedAt: {
68
+ type: Schema.Types.Date,
69
+ default: Date.now
70
+ },
71
+ deletedAt: {
72
+ type: Schema.Types.Date,
73
+ index: true
74
+ }
75
+ }, {
76
+ timestamps: true,
77
+ collection: 'post-threads',
78
+ toJSON: {
79
+ virtuals: true
80
+ },
81
+ toObject: {
82
+ virtuals: true
32
83
  }
33
- // participants: [{ type: Schema.Types.ObjectId, ref: 'accounts' }],
34
- // orgName: { type: Schema.Types.String },
35
- }, commonModeSchemaOptions);
36
- addIdVirtualFields(postThreadModelSchema);
84
+ });
85
+ // Virtual fields
86
+ postThreadModelSchema.virtual('id').get(function () {
87
+ return this._id.toHexString();
88
+ });
89
+ // Add compound indexes for better query performance
90
+ postThreadModelSchema.index({
91
+ post: 1,
92
+ channel: 1
93
+ });
94
+ postThreadModelSchema.index({
95
+ channel: 1,
96
+ lastReplyAt: -1
97
+ });
98
+ postThreadModelSchema.index({
99
+ 'participants.user': 1
100
+ });
101
+ postThreadModelSchema.index({
102
+ createdAt: -1
103
+ });
104
+ postThreadModelSchema.index({
105
+ deletedAt: 1
106
+ });
107
+ // Pre-save middleware to update timestamps
108
+ postThreadModelSchema.pre('save', function (next) {
109
+ this.updatedAt = new Date();
110
+ next();
111
+ });
112
+ // Pre-update middleware
113
+ postThreadModelSchema.pre(['updateOne', 'findOneAndUpdate'], function (next) {
114
+ this.set({
115
+ updatedAt: new Date()
116
+ });
117
+ next();
118
+ });
37
119
  const PostThreadModelFunc = db => db.model('post-threads', postThreadModelSchema);export{PostThreadModelFunc};//# sourceMappingURL=post-thread.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"post-thread.js","sources":["../../../src/store/models/post-thread.ts"],"sourcesContent":[null],"names":[],"mappings":"2GAMA,MAAM,qBAAqB,GAAG,IAAI,MAAM,CACpC;AACI,EAAA,IAAA,EAAI;AACJ,IAAA,IAAA,EAAA,MAAe,CAAA,KAAQ,CAAA,QAAM;IAC7B,GAAU,EAAA;;AAEV,EAAA,OAAA,EAAA;AACI,IAAA,IAAA,EAAA,MAAM,CAAA,KAAA,CAAA,QAAA;AACF,IAAA,GAAA,EAAA;AAEQ,GAAA;;gBAEA,CAAO,KAAA,CAAA;;AAEV,EAAA,WAAA,EACD;AAEP,IAAA,IAAA,EAAA,MAAA,CAAA,KAAA,CAAA;AACJ,GAAA;cACmE,EAAA;IACpE,IAA0C,EAAA,CAAA,IAAA,MAAA,CAAA;MAE9C,IAAA,EAAA;AAGJ,QAAkB,IAAA,EAAA,MAAsB,CAAA,KAAA,CAAA,QAAA;AAGxC,QAAa,GAAA,EAAA;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"post-thread.js","sources":["../../../src/store/models/post-thread.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -1,5 +1,4 @@
1
- import { Document, Model, Connection } from 'mongoose';
2
- import { IPost } from 'common';
3
- export type IPostModel = Document<IPost>;
1
+ import { Connection, Model } from 'mongoose';
2
+ import { IPostModel } from 'common/server';
4
3
  export type PostModelType = Model<IPostModel>;
5
4
  export declare const PostModelFunc: (db: Connection) => PostModelType;