@messenger-box/platform-server 10.0.3-alpha.7 → 10.0.3-alpha.72

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 (149) hide show
  1. package/lib/containers/containers.js +4 -1
  2. package/lib/containers/containers.js.map +1 -1
  3. package/lib/containers/context-services-from-container.d.ts +1 -1
  4. package/lib/containers/context-services-from-container.js +1 -1
  5. package/lib/containers/context-services-from-container.js.map +1 -1
  6. package/lib/graphql/resolvers/channel-member.d.ts +3 -2
  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 -2
  10. package/lib/graphql/resolvers/channel.js +279 -53
  11. package/lib/graphql/resolvers/channel.js.map +1 -1
  12. package/lib/graphql/resolvers/extended-token-account.d.ts +3 -2
  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 -1
  16. package/lib/graphql/resolvers/post-thread.d.ts +1 -1
  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 +696 -234
  21. package/lib/graphql/resolvers/post.js.map +1 -1
  22. package/lib/graphql/resolvers/reaction.d.ts +3 -2
  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 +337 -38
  28. package/lib/graphql/schema/channel.graphql.js +1 -1
  29. package/lib/graphql/schema/post-thread.graphql +167 -21
  30. package/lib/graphql/schema/post-thread.graphql.js +1 -1
  31. package/lib/graphql/schema/post.graphql +284 -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 -1
  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 +179 -33
  71. package/lib/services/channel-service.js +821 -274
  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/index.d.ts +1 -0
  77. package/lib/services/messenger-notification-service.d.ts +106 -13
  78. package/lib/services/messenger-notification-service.js +824 -442
  79. package/lib/services/messenger-notification-service.js.map +1 -1
  80. package/lib/services/post-service.d.ts +182 -16
  81. package/lib/services/post-service.js +731 -115
  82. package/lib/services/post-service.js.map +1 -1
  83. package/lib/services/post-thread-service.d.ts +114 -5
  84. package/lib/services/post-thread-service.js +400 -13
  85. package/lib/services/post-thread-service.js.map +1 -1
  86. package/lib/services/proxy-services/channel-microservice.d.ts +5 -3
  87. package/lib/services/proxy-services/channel-microservice.js +19 -10
  88. package/lib/services/proxy-services/channel-microservice.js.map +1 -1
  89. package/lib/services/proxy-services/messenger-notification-microservice.d.ts +128 -8
  90. package/lib/services/proxy-services/messenger-notification-microservice.js +324 -29
  91. package/lib/services/proxy-services/messenger-notification-microservice.js.map +1 -1
  92. package/lib/services/proxy-services/post-microservice.d.ts +186 -12
  93. package/lib/services/proxy-services/post-microservice.js +543 -54
  94. package/lib/services/proxy-services/post-microservice.js.map +1 -1
  95. package/lib/services/proxy-services/post-thread-microservice.d.ts +134 -3
  96. package/lib/services/proxy-services/post-thread-microservice.js +388 -6
  97. package/lib/services/proxy-services/post-thread-microservice.js.map +1 -1
  98. package/lib/services/proxy-services/reaction-microservice.d.ts +161 -3
  99. package/lib/services/proxy-services/reaction-microservice.js +474 -2
  100. package/lib/services/proxy-services/reaction-microservice.js.map +1 -1
  101. package/lib/services/reaction-service.d.ts +124 -4
  102. package/lib/services/reaction-service.js +415 -3
  103. package/lib/services/reaction-service.js.map +1 -1
  104. package/lib/services/redis-cache-manager.d.ts +18 -0
  105. package/lib/services/redis-cache-manager.js +83 -0
  106. package/lib/services/redis-cache-manager.js.map +1 -0
  107. package/lib/store/models/account-token-store.d.ts +1 -1
  108. package/lib/store/models/account-token-store.js.map +1 -1
  109. package/lib/store/models/channel.d.ts +2 -3
  110. package/lib/store/models/channel.js +181 -72
  111. package/lib/store/models/channel.js.map +1 -1
  112. package/lib/store/models/post-thread.d.ts +3 -3
  113. package/lib/store/models/post-thread.js +96 -14
  114. package/lib/store/models/post-thread.js.map +1 -1
  115. package/lib/store/models/post.d.ts +2 -3
  116. package/lib/store/models/post.js +143 -23
  117. package/lib/store/models/post.js.map +1 -1
  118. package/lib/store/models/reaction.d.ts +2 -3
  119. package/lib/store/models/reaction.js +67 -8
  120. package/lib/store/models/reaction.js.map +1 -1
  121. package/lib/store/repositories/__tests__/__fixtures__/team-repository.d.ts +3 -3
  122. package/lib/store/repositories/channel-repository.d.ts +6 -6
  123. package/lib/store/repositories/channel-repository.js +5 -2
  124. package/lib/store/repositories/channel-repository.js.map +1 -1
  125. package/lib/store/repositories/post-repository.d.ts +6 -6
  126. package/lib/store/repositories/post-repository.js +5 -2
  127. package/lib/store/repositories/post-repository.js.map +1 -1
  128. package/lib/store/repositories/post-thread-repository.d.ts +6 -6
  129. package/lib/store/repositories/post-thread-repository.js +5 -2
  130. package/lib/store/repositories/post-thread-repository.js.map +1 -1
  131. package/lib/store/repositories/reaction-repository.d.ts +6 -6
  132. package/lib/store/repositories/reaction-repository.js +5 -2
  133. package/lib/store/repositories/reaction-repository.js.map +1 -1
  134. package/lib/templates/constants/SERVER_TYPES.ts.template +0 -3
  135. package/lib/templates/repositories/ChannelRepository.ts.template +3 -3
  136. package/lib/templates/repositories/PostRepository.ts.template +3 -3
  137. package/lib/templates/repositories/PostThreadRepository.ts.template +3 -3
  138. package/lib/templates/repositories/ReactionRepository.ts.template +3 -4
  139. package/lib/templates/services/ChannelService.ts.template +280 -39
  140. package/lib/templates/services/ExtendedTokenAccountService.ts.template +104 -9
  141. package/lib/templates/services/MessengerNotificationService.ts.template +94 -19
  142. package/lib/templates/services/PostService.ts.template +184 -20
  143. package/lib/templates/services/PostThreadService.ts.template +151 -6
  144. package/lib/templates/services/ReactionService.ts.template +129 -3
  145. package/lib/templates/services/RedisCacheManager.ts.template +22 -0
  146. package/package.json +6 -5
  147. package/lib/interfaces/context.d.ts +0 -14
  148. package/lib/store/models/common-options.js +0 -20
  149. package/lib/store/models/common-options.js.map +0 -1
@@ -1,5 +1,24 @@
1
- import {__decorate,__param,__metadata}from'tslib';import {injectable,inject}from'inversify';import {ServiceBroker}from'moleculer';import {CommonType}from'@common-stack/core';import {MoleculerTopics,PostServiceCommands}from'common';import {BaseProxyService}from'@common-stack/store-mongo';import'@cdm-logger/core';let PostProxyService = class PostProxyService extends BaseProxyService {
1
+ import {__decorate,__param,__metadata}from'tslib';import {injectable,inject}from'inversify';import {ServiceBroker}from'moleculer';import {CommonType}from'@common-stack/core';import {MoleculerTopics,PostServiceCommands}from'common/server';import {BaseProxyService}from'@common-stack/store-mongo';import'@cdm-logger/core';import {DisposableCollection}from'@adminide-stack/core';/**
2
+ * Post Microservice Implementation
3
+ *
4
+ * This microservice handles comprehensive post management within the messenger platform,
5
+ * providing operations for creating, updating, managing posts and their associated
6
+ * content including file attachments, notifications, threading, and real-time
7
+ * message delivery across channels and organizations through service broker delegation.
8
+ *
9
+ * Key capabilities:
10
+ * - Post lifecycle management (creation, updates, deletion)
11
+ * - File attachment handling and upload management
12
+ * - Real-time message delivery and notifications
13
+ * - Post threading and conversation management
14
+ * - Message status tracking (read, delivered)
15
+ * - Channel integration and message counting
16
+ * - Expo push notification integration
17
+ * - File upload link generation and management
18
+ */
19
+ let PostProxyService = class PostProxyService extends BaseProxyService {
2
20
  logger;
21
+ toDispose = new DisposableCollection();
3
22
  topic = MoleculerTopics.PostService;
4
23
  constructor(broker, logger) {
5
24
  super(broker, logger.child({
@@ -7,58 +26,528 @@ import {__decorate,__param,__metadata}from'tslib';import {injectable,inject}from
7
26
  }));
8
27
  this.logger = logger;
9
28
  }
10
- attachUploadedFile(postId, file, createdBy) {
11
- return this.callAction(PostServiceCommands.AttachUploadedFile, {
12
- file,
13
- createdBy,
14
- postId
15
- });
16
- }
17
- createFileUploadLink(postId, filename, userId) {
18
- return this.callAction(PostServiceCommands.CreateFileUploadLink, {
19
- filename,
20
- userId,
21
- postId
22
- });
23
- }
24
- attachUploadedFiles(postId, files, createdBy) {
25
- return this.callAction(PostServiceCommands.AttachUploadedFiles, {
26
- files,
27
- createdBy,
28
- postId
29
- });
30
- }
31
- createFilesUploadLink(postId, filenames, userId) {
32
- return this.callAction(PostServiceCommands.CreateFilesUploadLink, {
33
- filenames,
34
- userId,
35
- postId
36
- });
37
- }
38
- deleteFile(url) {
39
- return this.callAction(PostServiceCommands.DeleteFile, {
40
- url
41
- });
42
- }
43
- readMessage(messageId, user) {
44
- return this.callAction(PostServiceCommands.ReadMessage, {
45
- ...messageId,
46
- user
47
- });
48
- }
49
- deliverMessage(messageId, user) {
50
- return this.callAction(PostServiceCommands.DeliverMessage, {
51
- ...messageId,
52
- user
53
- });
54
- }
55
- createWithoutSubscription(data) {
56
- return this.callAction(PostServiceCommands.CreateWithoutSubscription, {
57
- data
58
- });
59
- }
60
- createPostWithPostThread(data) {
61
- return this.callAction(PostServiceCommands.CreatePostWithPostThread, data);
29
+ /**
30
+ * Disposes of resources used by the service
31
+ */
32
+ dispose() {
33
+ this.toDispose.dispose();
34
+ }
35
+ /**
36
+ * Creates a file upload link for a post
37
+ *
38
+ * @description Generates a secure upload URL for attaching files to posts
39
+ *
40
+ * @param {string} postId - The post identifier
41
+ * @param {string} filename - The name of the file to upload
42
+ * @param {string} userId - The user performing the upload
43
+ * @returns {Promise<string | Error>} - Upload URL or error
44
+ */
45
+ async createFileUploadLink(postId, filename, userId) {
46
+ try {
47
+ this.logger.debug('Creating file upload link via microservice', {
48
+ postId,
49
+ filename,
50
+ userId
51
+ });
52
+ const result = await this.callAction(PostServiceCommands.CreateFileUploadLink, {
53
+ filename,
54
+ userId,
55
+ postId
56
+ });
57
+ if (!result) {
58
+ return new Error('Failed to create file upload link');
59
+ }
60
+ this.logger.debug('File upload link created successfully via microservice', {
61
+ postId,
62
+ filename,
63
+ userId
64
+ });
65
+ return result;
66
+ } catch (error) {
67
+ this.logger.error('Error creating file upload link via microservice: %o', error);
68
+ return error instanceof Error ? error : new Error('Unknown error occurred while creating upload link');
69
+ }
70
+ }
71
+ /**
72
+ * Attaches an uploaded file to a post
73
+ *
74
+ * @description Processes and attaches a completed file upload to a post
75
+ *
76
+ * @param {string} postId - The post identifier
77
+ * @param {IUploadedFileInput} file - The uploaded file information
78
+ * @param {string} createdBy - The user who uploaded the file
79
+ * @returns {Promise<IFileInfo | Error>} - File information or error
80
+ */
81
+ async attachUploadedFile(postId, file, createdBy) {
82
+ try {
83
+ this.logger.debug('Attaching uploaded file via microservice', {
84
+ postId,
85
+ file,
86
+ createdBy
87
+ });
88
+ const result = await this.callAction(PostServiceCommands.AttachUploadedFile, {
89
+ file,
90
+ createdBy,
91
+ postId
92
+ });
93
+ if (!result) {
94
+ return new Error('Failed to attach uploaded file');
95
+ }
96
+ this.logger.debug('File attached successfully via microservice', {
97
+ postId,
98
+ fileId: result.id,
99
+ createdBy
100
+ });
101
+ return result;
102
+ } catch (error) {
103
+ this.logger.error('Error attaching uploaded file via microservice: %o', error);
104
+ return error instanceof Error ? error : new Error('Unknown error occurred while attaching file');
105
+ }
106
+ }
107
+ /**
108
+ * Creates upload links for multiple files
109
+ *
110
+ * @description Generates secure upload URLs for multiple files to be attached to a post
111
+ *
112
+ * @param {string} postId - The post identifier
113
+ * @param {string[]} filenames - Array of file names
114
+ * @param {string} userId - The user performing the uploads
115
+ * @returns {Promise<string[] | Error>} - Array of upload URLs or error
116
+ */
117
+ async createFilesUploadLink(postId, filenames, userId) {
118
+ try {
119
+ this.logger.debug('Creating multiple file upload links via microservice', {
120
+ postId,
121
+ fileCount: filenames.length,
122
+ userId
123
+ });
124
+ const result = await this.callAction(PostServiceCommands.CreateFilesUploadLink, {
125
+ filenames,
126
+ userId,
127
+ postId
128
+ });
129
+ if (!Array.isArray(result)) {
130
+ return new Error('Invalid result from microservice');
131
+ }
132
+ this.logger.debug('Multiple file upload links created successfully via microservice', {
133
+ postId,
134
+ fileCount: result.length
135
+ });
136
+ return result;
137
+ } catch (error) {
138
+ this.logger.error('Error creating multiple file upload links via microservice: %o', error);
139
+ return error instanceof Error ? error : new Error('Unknown error occurred while creating upload links');
140
+ }
141
+ }
142
+ /**
143
+ * Attaches multiple uploaded files to a post
144
+ *
145
+ * @description Processes and attaches multiple completed file uploads to a post
146
+ *
147
+ * @param {string} postId - The post identifier
148
+ * @param {IUploadedFileInput[]} files - Array of uploaded file information
149
+ * @param {string} createdBy - The user who uploaded the files
150
+ * @returns {Promise<IFileInfo[] | Error>} - Array of file information or error
151
+ */
152
+ async attachUploadedFiles(postId, files, createdBy) {
153
+ try {
154
+ this.logger.debug('Attaching multiple uploaded files via microservice', {
155
+ postId,
156
+ fileCount: files.length,
157
+ createdBy
158
+ });
159
+ const result = await this.callAction(PostServiceCommands.AttachUploadedFiles, {
160
+ files,
161
+ createdBy,
162
+ postId
163
+ });
164
+ if (!Array.isArray(result)) {
165
+ return new Error('Invalid result from microservice');
166
+ }
167
+ this.logger.debug('Multiple files attached successfully via microservice', {
168
+ postId,
169
+ fileCount: result.length
170
+ });
171
+ return result;
172
+ } catch (error) {
173
+ this.logger.error('Error attaching multiple uploaded files via microservice: %o', error);
174
+ return error instanceof Error ? error : new Error('Unknown error occurred while attaching files');
175
+ }
176
+ }
177
+ /**
178
+ * Creates a new post with full integration
179
+ *
180
+ * @description Creates a post with channel updates, notifications, and real-time publishing
181
+ *
182
+ * @param {IPostServiceInput} data - Post creation data
183
+ * @returns {Promise<AsDomainType<IPostModel> | Error>} - Created post or error
184
+ */
185
+ // @ts-ignore - Enhanced error handling pattern with Error union type
186
+ async create(data) {
187
+ try {
188
+ this.logger.debug('Creating post via microservice', {
189
+ data
190
+ });
191
+ const result = await this.broker.call(`${this.topic}.create`, {
192
+ data
193
+ });
194
+ if (!result) {
195
+ return new Error('Failed to create post');
196
+ }
197
+ this.logger.debug('Post created successfully via microservice', {
198
+ postId: result.id,
199
+ channelId: data.channel
200
+ });
201
+ return result;
202
+ } catch (error) {
203
+ this.logger.error('Error creating post via microservice: %o', error);
204
+ return error instanceof Error ? error : new Error('Unknown error occurred while creating post');
205
+ }
206
+ }
207
+ /**
208
+ * Creates a post without real-time subscription
209
+ *
210
+ * @description Creates a post with channel updates but without real-time publishing
211
+ *
212
+ * @param {IPostServiceInput} data - Post creation data
213
+ * @returns {Promise<AsDomainType<IPostModel> | Error>} - Created post or error
214
+ */
215
+ // @ts-ignore - Enhanced error handling pattern with Error union type
216
+ async createWithoutSubscription(data) {
217
+ try {
218
+ this.logger.debug('Creating post without subscription via microservice', {
219
+ data
220
+ });
221
+ const result = await this.callAction(PostServiceCommands.CreateWithoutSubscription, {
222
+ data
223
+ });
224
+ if (!result) {
225
+ return new Error('Failed to create post without subscription');
226
+ }
227
+ this.logger.debug('Post created without subscription successfully via microservice', {
228
+ postId: result.id
229
+ });
230
+ return result;
231
+ } catch (error) {
232
+ this.logger.error('Error creating post without subscription via microservice: %o', error);
233
+ return error instanceof Error ? error : new Error('Unknown error occurred while creating post');
234
+ }
235
+ }
236
+ /**
237
+ * Deletes a file by URL
238
+ *
239
+ * @description Removes a file from storage using its URL
240
+ *
241
+ * @param {string} url - The file URL to delete
242
+ * @returns {Promise<boolean | Error>} - Success status or error
243
+ */
244
+ async deleteFile(url) {
245
+ try {
246
+ this.logger.debug('Deleting file via microservice', {
247
+ url
248
+ });
249
+ const result = await this.callAction(PostServiceCommands.DeleteFile, {
250
+ url
251
+ });
252
+ if (typeof result !== 'boolean') {
253
+ return new Error('Invalid result from microservice');
254
+ }
255
+ this.logger.debug('File deleted successfully via microservice', {
256
+ url,
257
+ success: result
258
+ });
259
+ return result;
260
+ } catch (error) {
261
+ this.logger.error('Error deleting file via microservice: %o', error);
262
+ return error instanceof Error ? error : new Error('Unknown error occurred while deleting file');
263
+ }
264
+ }
265
+ /**
266
+ * Marks a message as read by a user
267
+ *
268
+ * @description Updates message status to indicate it has been read by a specific user
269
+ *
270
+ * @param {IMessageIdentifier} messageId - Message identifier
271
+ * @param {string} user - User ID who read the message
272
+ * @returns {Promise<boolean | Error>} - Success status or error
273
+ */
274
+ async readMessage(messageId, user) {
275
+ try {
276
+ this.logger.debug('Marking message as read via microservice', {
277
+ messageId,
278
+ user
279
+ });
280
+ const result = await this.callAction(PostServiceCommands.ReadMessage, {
281
+ ...messageId,
282
+ user
283
+ });
284
+ if (typeof result !== 'boolean') {
285
+ return new Error('Invalid result from microservice');
286
+ }
287
+ this.logger.debug('Message marked as read successfully via microservice', {
288
+ messageId,
289
+ user,
290
+ success: result
291
+ });
292
+ return result;
293
+ } catch (error) {
294
+ this.logger.error('Error marking message as read via microservice: %o', error);
295
+ return error instanceof Error ? error : new Error('Unknown error occurred while marking message as read');
296
+ }
297
+ }
298
+ /**
299
+ * Marks a message as delivered to a user
300
+ *
301
+ * @description Updates message status to indicate it has been delivered to a specific user
302
+ *
303
+ * @param {IMessageIdentifier} messageId - Message identifier
304
+ * @param {string} user - User ID who received the message
305
+ * @returns {Promise<boolean | Error>} - Success status or error
306
+ */
307
+ async deliverMessage(messageId, user) {
308
+ try {
309
+ this.logger.debug('Marking message as delivered via microservice', {
310
+ messageId,
311
+ user
312
+ });
313
+ const result = await this.callAction(PostServiceCommands.DeliverMessage, {
314
+ ...messageId,
315
+ user
316
+ });
317
+ if (typeof result !== 'boolean') {
318
+ return new Error('Invalid result from microservice');
319
+ }
320
+ this.logger.debug('Message marked as delivered successfully via microservice', {
321
+ messageId,
322
+ user,
323
+ success: result
324
+ });
325
+ return result;
326
+ } catch (error) {
327
+ this.logger.error('Error marking message as delivered via microservice: %o', error);
328
+ return error instanceof Error ? error : new Error('Unknown error occurred while marking message as delivered');
329
+ }
330
+ }
331
+ /**
332
+ * Creates a post with associated post thread
333
+ *
334
+ * @description Creates both a post and its associated thread for threaded conversations
335
+ *
336
+ * @param {CreatePostThreadOptions} data - Post and thread creation options
337
+ * @returns {Promise<{post: AsDomainType<IPostModel>; postThread: IPostThread} | Error>} - Created post and thread or error
338
+ */
339
+ // @ts-ignore - Enhanced error handling pattern with Error union type
340
+ async createPostWithPostThread(data) {
341
+ try {
342
+ this.logger.debug('Creating post with thread via microservice', {
343
+ data
344
+ });
345
+ const result = await this.callAction(PostServiceCommands.CreatePostWithPostThread, data);
346
+ if (!result || !result.post || !result.postThread) {
347
+ return new Error('Failed to create post with thread');
348
+ }
349
+ this.logger.debug('Post with thread created successfully via microservice', {
350
+ postId: result.post.id,
351
+ threadId: result.postThread.id
352
+ });
353
+ return {
354
+ post: result.post,
355
+ postThread: result.postThread
356
+ };
357
+ } catch (error) {
358
+ this.logger.error('Error creating post with thread via microservice: %o', error);
359
+ return error instanceof Error ? error : new Error('Unknown error occurred while creating post with thread');
360
+ }
361
+ }
362
+ /**
363
+ * Retrieves the last message in a channel
364
+ *
365
+ * @description Gets the most recent post/message from a specific channel
366
+ *
367
+ * @param {string} channelId - The channel identifier
368
+ * @returns {Promise<AsDomainType<IPostModel> | Error>} - Last message or error
369
+ */
370
+ // @ts-ignore - Enhanced error handling pattern with Error union type
371
+ async getLastMessage(channelId) {
372
+ try {
373
+ this.logger.debug('Getting last message via microservice', {
374
+ channelId
375
+ });
376
+ const result = await this.callAction(PostServiceCommands.GetLastMessage, {
377
+ channelId
378
+ });
379
+ if (!result) {
380
+ return new Error('No messages found in channel');
381
+ }
382
+ this.logger.debug('Last message retrieved successfully via microservice', {
383
+ channelId,
384
+ postId: result.id
385
+ });
386
+ return result;
387
+ } catch (error) {
388
+ this.logger.error('Error getting last message via microservice: %o', error);
389
+ return error instanceof Error ? error : new Error('Unknown error occurred while getting last message');
390
+ }
391
+ }
392
+ /**
393
+ * Gets posts by channel with pagination
394
+ *
395
+ * @description Retrieves posts from a channel with pagination support
396
+ *
397
+ * @param {string} channelId - The channel identifier
398
+ * @param {number} limit - Maximum number of posts to return
399
+ * @param {number} offset - Number of posts to skip
400
+ * @returns {Promise<Array<AsDomainType<IPostModel>> | Error>} - Array of posts or error
401
+ */
402
+ async getPostsByChannel(channelId, limit = 50, offset = 0) {
403
+ try {
404
+ this.logger.debug('Getting posts by channel via microservice', {
405
+ channelId,
406
+ limit,
407
+ offset
408
+ });
409
+ const result = await this.broker.call(`${this.topic}.getPostsByChannel`, {
410
+ channelId,
411
+ limit,
412
+ offset
413
+ });
414
+ if (!Array.isArray(result)) {
415
+ return new Error('Invalid result from microservice');
416
+ }
417
+ this.logger.debug('Posts by channel retrieved successfully via microservice', {
418
+ channelId,
419
+ count: result.length
420
+ });
421
+ return result;
422
+ } catch (error) {
423
+ this.logger.error('Error getting posts by channel via microservice: %o', error);
424
+ return error instanceof Error ? error : new Error('Unknown error occurred while getting posts by channel');
425
+ }
426
+ }
427
+ /**
428
+ * Updates a post
429
+ *
430
+ * @description Updates post content and metadata
431
+ *
432
+ * @param {string} postId - The post identifier
433
+ * @param {Partial<IPostServiceInput>} updates - Update data
434
+ * @returns {Promise<AsDomainType<IPostModel> | Error>} - Updated post or error
435
+ */
436
+ async updatePost(postId, updates) {
437
+ try {
438
+ this.logger.debug('Updating post via microservice', {
439
+ postId,
440
+ updates
441
+ });
442
+ const result = await this.broker.call(`${this.topic}.updatePost`, {
443
+ postId,
444
+ updates
445
+ });
446
+ if (!result) {
447
+ return new Error('Failed to update post');
448
+ }
449
+ this.logger.debug('Post updated successfully via microservice', {
450
+ postId
451
+ });
452
+ return result;
453
+ } catch (error) {
454
+ this.logger.error('Error updating post via microservice: %o', error);
455
+ return error instanceof Error ? error : new Error('Unknown error occurred while updating post');
456
+ }
457
+ }
458
+ /**
459
+ * Deletes a post
460
+ *
461
+ * @description Soft deletes a post and its associated data
462
+ *
463
+ * @param {string} postId - The post identifier
464
+ * @returns {Promise<boolean | Error>} - Success status or error
465
+ */
466
+ async deletePost(postId) {
467
+ try {
468
+ this.logger.debug('Deleting post via microservice', {
469
+ postId
470
+ });
471
+ const result = await this.broker.call(`${this.topic}.deletePost`, {
472
+ postId
473
+ });
474
+ if (typeof result !== 'boolean') {
475
+ return new Error('Invalid result from microservice');
476
+ }
477
+ this.logger.debug('Post deleted successfully via microservice', {
478
+ postId,
479
+ success: result
480
+ });
481
+ return result;
482
+ } catch (error) {
483
+ this.logger.error('Error deleting post via microservice: %o', error);
484
+ return error instanceof Error ? error : new Error('Unknown error occurred while deleting post');
485
+ }
486
+ }
487
+ /**
488
+ * Validates post data for creation or updates
489
+ *
490
+ * @description Helper method to validate post data before processing
491
+ *
492
+ * @param {IPostServiceInput} data - Data to validate
493
+ * @returns {Promise<boolean | Error>} - Validation result or error
494
+ */
495
+ async validatePostData(data) {
496
+ try {
497
+ if (!data) {
498
+ return new Error('Post data is required');
499
+ }
500
+ if (!data.channel) {
501
+ return new Error('Channel is required');
502
+ }
503
+ if (!data.author) {
504
+ return new Error('Author is required');
505
+ }
506
+ this.logger.debug('Post data validation passed', {
507
+ data
508
+ });
509
+ return true;
510
+ } catch (error) {
511
+ this.logger.error('Error validating post data: %o', error);
512
+ return error instanceof Error ? error : new Error('Unknown error occurred while validating post data');
513
+ }
514
+ }
515
+ /**
516
+ * Gets posts by author with pagination
517
+ *
518
+ * @description Convenience method to get posts created by a specific author
519
+ *
520
+ * @param {string} authorId - The author identifier
521
+ * @param {number} limit - Maximum number of posts to return
522
+ * @param {number} offset - Number of posts to skip
523
+ * @returns {Promise<Array<AsDomainType<IPostModel>> | Error>} - Array of posts or error
524
+ */
525
+ async getPostsByAuthor(authorId, limit = 50, offset = 0) {
526
+ try {
527
+ this.logger.debug('Getting posts by author via microservice', {
528
+ authorId,
529
+ limit,
530
+ offset
531
+ });
532
+ const result = await this.broker.call(`${this.topic}.getPostsByAuthor`, {
533
+ authorId,
534
+ limit,
535
+ offset
536
+ });
537
+ if (!Array.isArray(result)) {
538
+ return new Error('Invalid result from microservice');
539
+ }
540
+ this.logger.debug('Posts by author retrieved successfully via microservice', {
541
+ authorId,
542
+ count: result.length
543
+ });
544
+ return result;
545
+ } catch (error) {
546
+ this.logger.error('Error getting posts by author via microservice: %o', error);
547
+ return error instanceof Error ? error : new Error('Unknown error occurred while getting posts by author');
548
+ }
62
549
  }
63
550
  };
64
- PostProxyService = __decorate([injectable(), __param(0, inject(CommonType.MOLECULER_BROKER)), __param(1, inject('Logger')), __metadata("design:paramtypes", [ServiceBroker, Object])], PostProxyService);export{PostProxyService};//# sourceMappingURL=post-microservice.js.map
551
+ PostProxyService = __decorate([injectable()
552
+ // @ts-ignore - Type compatibility issue between BaseProxyService and IPostService
553
+ , __param(0, inject(CommonType.MOLECULER_BROKER)), __param(1, inject('Logger')), __metadata("design:paramtypes", [ServiceBroker, Object])], PostProxyService);export{PostProxyService};//# sourceMappingURL=post-microservice.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"post-microservice.js","sources":["../../../src/services/proxy-services/post-microservice.ts"],"sourcesContent":[null],"names":[],"mappings":"yTAmBO,IAAM,gBAAgB,GAAtB,MAAM,gBACT,SAAQ,gBAA0D,CAAA;AAS3C,EAAA,MAAA;AANvB,EAAA,KAAA,GAAQ,eAAA,CAAA,WAAgB;aAIpB,CAAA,MAAA,EAAqB,MAEuB,EAAA;AAE5C,IAAA,KAAA,CAAA,MAAM,EAAA,MAAQ,CAAA,KAAY,CAAA;eAFD,EAAA;KAG5B,CAAA,CAAA;AAED,IAAA,IAAA,CAAA,MAAA,GAAA,MAAmB;AACf;oBACH,CAAA,MAAA,EAAA,IAAA,EAAA,SAAA,EAAA;AAED,IAAA,OAAA,IAAA,CAAA,UAAqB,CAAA,mBAAgD,CAAA,kBAAA,EAAA;AACjE,MAAA,IAAA;MACH,SAAA;AAED,MAAA;AACI,KAAA,CAAA;;AAGJ,EAAA,oBAAA,CAAA,MAAsB,EAAA,QAAgB,EAAA,MAAmC,EAAA;AACrE,IAAA,OAAA,IAAO,WAAK,CAAA,mBAAW,CAAA,oBAAyC,EAAA;MACnE,QAAA;AAED,MAAA,MAAA;AACI,MAAA;KACH,CAAA;;AAGG,EAAA,mBAAsB,CAAA,MAAA,EAAA;IAC1B,OAAC,IAAA,CAAA,UAAA,CAAA,mBAAA,CAAA,mBAAA,EAAA;MAEa,KAAA;AACV,MAAA,SAAO;MACV;AAED,KAAA,CAAA;AACI;uBACH,CAAA,MAAA,EAAA,SAAA,EAAA,MAAA,EAAA;AAED,IAAA,OAAA,IAAA,CAAA,UAAA,CAAA,mBAAsD,CAAA,qBAAA,EAAA;eAC3C;MAIV,MAAA;MACJ;AArDY,KAAgB,CAAA;AAD5B;AAQQ,EAAA,UAAA,CAAA;AAEA,IAAA,OAAA,IAAA,CAAM,UAAS,CAAA,mBAAC,CAAA,UAAA,EAAA;;AATZ,KAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"post-microservice.js","sources":["../../../src/services/proxy-services/post-microservice.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}