dt-common-device 3.0.10 → 3.0.11

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 (113) hide show
  1. package/dist/config/config.d.ts +1 -2
  2. package/dist/config/config.js +4 -5
  3. package/dist/device/local/repository/Schedule.repository.d.ts +0 -1
  4. package/dist/device/local/repository/Schedule.repository.js +6 -6
  5. package/dist/queue/entities/HybridHttpQueue.d.ts +4 -14
  6. package/dist/queue/entities/HybridHttpQueue.js +31 -119
  7. package/dist/queue/interfaces/IHybridHttpQueue.d.ts +2 -12
  8. package/dist/queue/interfaces/IJobResult.d.ts +1 -8
  9. package/dist/queue/interfaces/index.d.ts +0 -1
  10. package/dist/queue/interfaces/index.js +0 -1
  11. package/dist/queue/services/QueueService.d.ts +2 -12
  12. package/dist/queue/types/queue.types.d.ts +10 -29
  13. package/dist/queue/utils/jobUtils.d.ts +0 -3
  14. package/dist/queue/utils/jobUtils.js +0 -48
  15. package/dist/queue/utils/queueUtils.d.ts +7 -0
  16. package/dist/queue/utils/queueUtils.js +113 -4
  17. package/package.json +6 -1
  18. package/.eslintrc.js +0 -44
  19. package/src/alerts/Alert.model.ts +0 -289
  20. package/src/alerts/Alert.repository.ts +0 -487
  21. package/src/alerts/Alert.service.ts +0 -711
  22. package/src/alerts/AlertBuilder.example.ts +0 -126
  23. package/src/alerts/AlertBuilder.ts +0 -208
  24. package/src/alerts/AlertService.example.ts +0 -232
  25. package/src/alerts/alert.types.ts +0 -64
  26. package/src/alerts/index.ts +0 -3
  27. package/src/config/config.ts +0 -202
  28. package/src/config/config.types.ts +0 -21
  29. package/src/connection/Connection.repository.ts +0 -52
  30. package/src/connection/Connection.service.ts +0 -39
  31. package/src/connection/IConnection.ts +0 -27
  32. package/src/connection/index.ts +0 -3
  33. package/src/constants/ConnectionProviders.ts +0 -11
  34. package/src/constants/Event.ts +0 -89
  35. package/src/constants/Service.ts +0 -17
  36. package/src/constants/index.ts +0 -3
  37. package/src/db/db.ts +0 -24
  38. package/src/db/index.ts +0 -2
  39. package/src/db/redis.ts +0 -20
  40. package/src/device/cloud/entities/CloudDevice.ts +0 -40
  41. package/src/device/cloud/entities/CloudDeviceService.ts +0 -8
  42. package/src/device/cloud/entities/DeviceFactory.ts +0 -27
  43. package/src/device/cloud/entities/index.ts +0 -3
  44. package/src/device/cloud/interfaces/ICloudDevice.ts +0 -14
  45. package/src/device/cloud/interfaces/ICloudDeviceService.ts +0 -6
  46. package/src/device/cloud/interfaces/IDeviceFactory.ts +0 -5
  47. package/src/device/cloud/interfaces/IRawDataTransformer.ts +0 -5
  48. package/src/device/cloud/interfaces/IRawDevice.ts +0 -19
  49. package/src/device/cloud/interfaces/index.ts +0 -5
  50. package/src/device/local/interfaces/IDevice.ts +0 -62
  51. package/src/device/local/interfaces/IDtDevice.ts +0 -16
  52. package/src/device/local/interfaces/ISchedule.ts +0 -40
  53. package/src/device/local/interfaces/index.ts +0 -3
  54. package/src/device/local/repository/Device.repository.ts +0 -368
  55. package/src/device/local/repository/Hub.repository.ts +0 -107
  56. package/src/device/local/repository/Schedule.repository.ts +0 -72
  57. package/src/device/local/services/Device.service.ts +0 -436
  58. package/src/device/local/services/Hub.service.ts +0 -57
  59. package/src/device/local/services/Schedule.service.ts +0 -26
  60. package/src/device/local/services/index.ts +0 -3
  61. package/src/docs/Alert.model.md +0 -319
  62. package/src/docs/Alerts&IssuesModel.md +0 -312
  63. package/src/docs/Issue.model.md +0 -386
  64. package/src/docs/SECURITY.md +0 -67
  65. package/src/docs/TROUBLESHOOTING.md +0 -184
  66. package/src/events/BaseEventHandler.ts +0 -145
  67. package/src/events/BaseEventTransformer.ts +0 -97
  68. package/src/events/DeviceEventHandler.ts +0 -213
  69. package/src/events/DeviceEventTransformerFactory.ts +0 -77
  70. package/src/events/EventHandler.ts +0 -124
  71. package/src/events/EventHandlerOrchestrator.ts +0 -119
  72. package/src/events/EventProcessingService.ts +0 -248
  73. package/src/events/InternalEventSubscription.ts +0 -194
  74. package/src/events/index.ts +0 -9
  75. package/src/events/interfaces/DeviceEvent.ts +0 -56
  76. package/src/events/interfaces/IEventHandler.ts +0 -28
  77. package/src/events/interfaces/IEventTransformer.ts +0 -8
  78. package/src/events/interfaces/IInternalEvent.ts +0 -33
  79. package/src/events/interfaces/index.ts +0 -4
  80. package/src/index.ts +0 -43
  81. package/src/issues/Issue.model.ts +0 -350
  82. package/src/issues/Issue.repository.ts +0 -517
  83. package/src/issues/Issue.service.ts +0 -932
  84. package/src/issues/IssueBuilder.example.ts +0 -210
  85. package/src/issues/IssueBuilder.ts +0 -263
  86. package/src/issues/IssueService.example.ts +0 -310
  87. package/src/issues/index.ts +0 -2
  88. package/src/issues/issue.types.ts +0 -98
  89. package/src/property/IProperty.ts +0 -30
  90. package/src/property/Property.repository.ts +0 -53
  91. package/src/property/Property.service.ts +0 -38
  92. package/src/property/index.ts +0 -2
  93. package/src/queue/entities/HybridHttpQueue.ts +0 -274
  94. package/src/queue/entities/index.ts +0 -1
  95. package/src/queue/index.ts +0 -6
  96. package/src/queue/interfaces/IHttpRequestJob.ts +0 -10
  97. package/src/queue/interfaces/IHybridHttpQueue.ts +0 -25
  98. package/src/queue/interfaces/IJobResult.ts +0 -15
  99. package/src/queue/interfaces/IRateLimitConfig.ts +0 -5
  100. package/src/queue/interfaces/index.ts +0 -4
  101. package/src/queue/services/QueueService.ts +0 -40
  102. package/src/queue/services/index.ts +0 -1
  103. package/src/queue/types/http.types.ts +0 -23
  104. package/src/queue/types/index.ts +0 -2
  105. package/src/queue/types/queue.types.ts +0 -21
  106. package/src/queue/utils/index.ts +0 -3
  107. package/src/queue/utils/jobUtils.ts +0 -79
  108. package/src/queue/utils/queueUtils.ts +0 -84
  109. package/src/queue/utils/rateLimit.utils.ts +0 -131
  110. package/src/utils/http.utils.ts +0 -143
  111. package/src/utils/index.ts +0 -2
  112. package/src/utils/redis.utils.ts +0 -74
  113. package/tsconfig.json +0 -20
@@ -1,517 +0,0 @@
1
- import { Service } from "typedi";
2
- import { IssueModel, IIssueDocument } from "./Issue.model";
3
- import {
4
- CreateIssueData,
5
- UpdateIssueData,
6
- IssueStatus,
7
- IssuePriority,
8
- IssuesCategory,
9
- EntityType,
10
- } from "./issue.types";
11
-
12
- @Service()
13
- export class IssueRepository {
14
- /**
15
- * Create a new issue
16
- */
17
- async create(issueData: CreateIssueData): Promise<IIssueDocument> {
18
- try {
19
- const issue = new IssueModel({
20
- ...issueData,
21
- status: IssueStatus.PENDING,
22
- priority: issueData.priority || IssuePriority.MEDIUM,
23
- isDeleted: false,
24
- });
25
-
26
- return await issue.save();
27
- } catch (error) {
28
- throw new Error(
29
- `Failed to create issue: ${
30
- error instanceof Error ? error.message : "Unknown error"
31
- }`
32
- );
33
- }
34
- }
35
-
36
- /**
37
- * Find issue by ID
38
- */
39
- async findById(
40
- id: string,
41
- includeDeleted = false
42
- ): Promise<IIssueDocument | null> {
43
- try {
44
- const query: any = { _id: id };
45
- if (!includeDeleted) {
46
- query.isDeleted = false;
47
- }
48
- return await IssueModel.findOne(query);
49
- } catch (error) {
50
- throw new Error(
51
- `Failed to find issue by ID: ${
52
- error instanceof Error ? error.message : "Unknown error"
53
- }`
54
- );
55
- }
56
- }
57
-
58
- /**
59
- * Find all issues with filters
60
- */
61
- async findAll(
62
- filters: {
63
- propertyId?: string;
64
- assignedTo?: string;
65
- status?: IssueStatus;
66
- priority?: IssuePriority;
67
- category?: IssuesCategory;
68
- entityType?: EntityType;
69
- entityId?: string;
70
- includeDeleted?: boolean;
71
- limit?: number;
72
- skip?: number;
73
- sort?: { [key: string]: 1 | -1 };
74
- } = {}
75
- ): Promise<IIssueDocument[]> {
76
- try {
77
- const query: any = {};
78
-
79
- if (filters.propertyId) query.propertyId = filters.propertyId;
80
- if (filters.assignedTo) query.assignedTo = filters.assignedTo;
81
- if (filters.status) query.status = filters.status;
82
- if (filters.priority) query.priority = filters.priority;
83
- if (filters.category) query.category = filters.category;
84
- if (filters.entityType) query.entityType = filters.entityType;
85
- if (filters.entityId) query.entityId = filters.entityId;
86
- if (!filters.includeDeleted) query.isDeleted = false;
87
-
88
- const queryBuilder = IssueModel.find(query);
89
-
90
- if (filters.sort) {
91
- queryBuilder.sort(filters.sort);
92
- } else {
93
- queryBuilder.sort({ createdAt: -1 });
94
- }
95
-
96
- if (filters.skip) queryBuilder.skip(filters.skip);
97
- if (filters.limit) queryBuilder.limit(filters.limit);
98
-
99
- return await queryBuilder.exec();
100
- } catch (error) {
101
- throw new Error(
102
- `Failed to find issues: ${
103
- error instanceof Error ? error.message : "Unknown error"
104
- }`
105
- );
106
- }
107
- }
108
-
109
- /**
110
- * Update an issue
111
- */
112
- async update(
113
- id: string,
114
- updateData: UpdateIssueData
115
- ): Promise<IIssueDocument | null> {
116
- try {
117
- return await IssueModel.findByIdAndUpdate(
118
- id,
119
- { ...updateData, updatedAt: new Date() },
120
- { new: true, runValidators: true }
121
- );
122
- } catch (error) {
123
- throw new Error(
124
- `Failed to update issue: ${
125
- error instanceof Error ? error.message : "Unknown error"
126
- }`
127
- );
128
- }
129
- }
130
-
131
- /**
132
- * Soft delete an issue
133
- */
134
- async softDelete(id: string, deletedBy: string): Promise<boolean> {
135
- try {
136
- const result = await IssueModel.findByIdAndUpdate(id, {
137
- isDeleted: true,
138
- updatedBy: deletedBy,
139
- updatedAt: new Date(),
140
- });
141
- return !!result;
142
- } catch (error) {
143
- throw new Error(
144
- `Failed to soft delete issue: ${
145
- error instanceof Error ? error.message : "Unknown error"
146
- }`
147
- );
148
- }
149
- }
150
-
151
- /**
152
- * Permanently delete an issue
153
- */
154
- async hardDelete(id: string): Promise<boolean> {
155
- try {
156
- const result = await IssueModel.findByIdAndDelete(id);
157
- return !!result;
158
- } catch (error) {
159
- throw new Error(
160
- `Failed to permanently delete issue: ${
161
- error instanceof Error ? error.message : "Unknown error"
162
- }`
163
- );
164
- }
165
- }
166
-
167
- /**
168
- * Count issues with filters
169
- */
170
- async count(
171
- filters: {
172
- propertyId?: string;
173
- assignedTo?: string;
174
- status?: IssueStatus;
175
- priority?: IssuePriority;
176
- category?: IssuesCategory;
177
- entityType?: EntityType;
178
- entityId?: string;
179
- includeDeleted?: boolean;
180
- } = {}
181
- ): Promise<number> {
182
- try {
183
- const query: any = {};
184
-
185
- if (filters.propertyId) query.propertyId = filters.propertyId;
186
- if (filters.assignedTo) query.assignedTo = filters.assignedTo;
187
- if (filters.status) query.status = filters.status;
188
- if (filters.priority) query.priority = filters.priority;
189
- if (filters.category) query.category = filters.category;
190
- if (filters.entityType) query.entityType = filters.entityType;
191
- if (filters.entityId) query.entityId = filters.entityId;
192
- if (!filters.includeDeleted) query.isDeleted = false;
193
-
194
- return await IssueModel.countDocuments(query);
195
- } catch (error) {
196
- throw new Error(
197
- `Failed to count issues: ${
198
- error instanceof Error ? error.message : "Unknown error"
199
- }`
200
- );
201
- }
202
- }
203
-
204
- /**
205
- * Find issues by property
206
- */
207
- async findByProperty(
208
- propertyId: string,
209
- includeDeleted = false
210
- ): Promise<IIssueDocument[]> {
211
- try {
212
- return await IssueModel.findByProperty(propertyId, includeDeleted);
213
- } catch (error) {
214
- throw new Error(
215
- `Failed to find issues by property: ${
216
- error instanceof Error ? error.message : "Unknown error"
217
- }`
218
- );
219
- }
220
- }
221
-
222
- /**
223
- * Find issues by assignee
224
- */
225
- async findByAssignee(
226
- assignedTo: string,
227
- includeDeleted = false
228
- ): Promise<IIssueDocument[]> {
229
- try {
230
- return await IssueModel.findByAssignee(assignedTo, includeDeleted);
231
- } catch (error) {
232
- throw new Error(
233
- `Failed to find issues by assignee: ${
234
- error instanceof Error ? error.message : "Unknown error"
235
- }`
236
- );
237
- }
238
- }
239
-
240
- /**
241
- * Find issues by entity
242
- */
243
- async findByEntity(
244
- entityId: string,
245
- entityType: EntityType,
246
- includeDeleted = false
247
- ): Promise<IIssueDocument[]> {
248
- try {
249
- return await IssueModel.findByEntity(
250
- entityId,
251
- entityType,
252
- includeDeleted
253
- );
254
- } catch (error) {
255
- throw new Error(
256
- `Failed to find issues by entity: ${
257
- error instanceof Error ? error.message : "Unknown error"
258
- }`
259
- );
260
- }
261
- }
262
-
263
- /**
264
- * Find issues by status
265
- */
266
- async findByStatus(
267
- status: IssueStatus,
268
- includeDeleted = false
269
- ): Promise<IIssueDocument[]> {
270
- try {
271
- return await IssueModel.findByStatus(status, includeDeleted);
272
- } catch (error) {
273
- throw new Error(
274
- `Failed to find issues by status: ${
275
- error instanceof Error ? error.message : "Unknown error"
276
- }`
277
- );
278
- }
279
- }
280
-
281
- /**
282
- * Find issues by priority
283
- */
284
- async findByPriority(
285
- priority: IssuePriority,
286
- includeDeleted = false
287
- ): Promise<IIssueDocument[]> {
288
- try {
289
- return await IssueModel.findByPriority(priority, includeDeleted);
290
- } catch (error) {
291
- throw new Error(
292
- `Failed to find issues by priority: ${
293
- error instanceof Error ? error.message : "Unknown error"
294
- }`
295
- );
296
- }
297
- }
298
-
299
- /**
300
- * Find overdue issues
301
- */
302
- async findOverdue(includeDeleted = false): Promise<IIssueDocument[]> {
303
- try {
304
- return await IssueModel.findOverdue(includeDeleted);
305
- } catch (error) {
306
- throw new Error(
307
- `Failed to find overdue issues: ${
308
- error instanceof Error ? error.message : "Unknown error"
309
- }`
310
- );
311
- }
312
- }
313
-
314
- /**
315
- * Find upcoming issues
316
- */
317
- async findUpcoming(
318
- days: number = 7,
319
- includeDeleted = false
320
- ): Promise<IIssueDocument[]> {
321
- try {
322
- return await IssueModel.findUpcoming(days, includeDeleted);
323
- } catch (error) {
324
- throw new Error(
325
- `Failed to find upcoming issues: ${
326
- error instanceof Error ? error.message : "Unknown error"
327
- }`
328
- );
329
- }
330
- }
331
-
332
- /**
333
- * Search issues by text
334
- */
335
- async search(
336
- searchTerm: string,
337
- filters: {
338
- propertyId?: string;
339
- includeDeleted?: boolean;
340
- limit?: number;
341
- skip?: number;
342
- } = {}
343
- ): Promise<IIssueDocument[]> {
344
- try {
345
- const query: any = {
346
- $or: [
347
- { title: { $regex: searchTerm, $options: "i" } },
348
- { description: { $regex: searchTerm, $options: "i" } },
349
- ],
350
- };
351
-
352
- if (filters.propertyId) query.propertyId = filters.propertyId;
353
- if (!filters.includeDeleted) query.isDeleted = false;
354
-
355
- const queryBuilder = IssueModel.find(query).sort({ createdAt: -1 });
356
-
357
- if (filters.skip) queryBuilder.skip(filters.skip);
358
- if (filters.limit) queryBuilder.limit(filters.limit);
359
-
360
- return await queryBuilder.exec();
361
- } catch (error) {
362
- throw new Error(
363
- `Failed to search issues: ${
364
- error instanceof Error ? error.message : "Unknown error"
365
- }`
366
- );
367
- }
368
- }
369
-
370
- /**
371
- * Get issue statistics
372
- */
373
- async getStatistics(propertyId?: string): Promise<{
374
- total: number;
375
- pending: number;
376
- inProgress: number;
377
- resolved: number;
378
- closed: number;
379
- overdue: number;
380
- byPriority: Record<IssuePriority, number>;
381
- byCategory: Record<IssuesCategory, number>;
382
- }> {
383
- try {
384
- const query: any = { isDeleted: false };
385
- if (propertyId) query.propertyId = propertyId;
386
-
387
- const [
388
- total,
389
- pending,
390
- inProgress,
391
- resolved,
392
- closed,
393
- overdue,
394
- priorityStats,
395
- categoryStats,
396
- ] = await Promise.all([
397
- IssueModel.countDocuments(query),
398
- IssueModel.countDocuments({ ...query, status: IssueStatus.PENDING }),
399
- IssueModel.countDocuments({
400
- ...query,
401
- status: IssueStatus.IN_PROGRESS,
402
- }),
403
- IssueModel.countDocuments({ ...query, status: IssueStatus.RESOLVED }),
404
- IssueModel.countDocuments({ ...query, status: IssueStatus.CLOSED }),
405
- IssueModel.countDocuments({
406
- ...query,
407
- dueDate: { $lt: new Date() },
408
- status: {
409
- $nin: [
410
- IssueStatus.RESOLVED,
411
- IssueStatus.CLOSED,
412
- IssueStatus.CANCELLED,
413
- ],
414
- },
415
- }),
416
- IssueModel.aggregate([
417
- { $match: query },
418
- { $group: { _id: "$priority", count: { $sum: 1 } } },
419
- ]),
420
- IssueModel.aggregate([
421
- { $match: query },
422
- { $group: { _id: "$category", count: { $sum: 1 } } },
423
- ]),
424
- ]);
425
-
426
- const byPriority = Object.values(IssuePriority).reduce(
427
- (acc, priority) => {
428
- acc[priority] = 0;
429
- return acc;
430
- },
431
- {} as Record<IssuePriority, number>
432
- );
433
-
434
- const byCategory = Object.values(IssuesCategory).reduce(
435
- (acc, category) => {
436
- acc[category] = 0;
437
- return acc;
438
- },
439
- {} as Record<IssuesCategory, number>
440
- );
441
-
442
- priorityStats.forEach((stat: { _id: string; count: number }) => {
443
- if (stat._id in byPriority) {
444
- byPriority[stat._id as IssuePriority] = stat.count;
445
- }
446
- });
447
-
448
- categoryStats.forEach((stat: { _id: string; count: number }) => {
449
- if (stat._id in byCategory) {
450
- byCategory[stat._id as IssuesCategory] = stat.count;
451
- }
452
- });
453
-
454
- return {
455
- total,
456
- pending,
457
- inProgress,
458
- resolved,
459
- closed,
460
- overdue,
461
- byPriority,
462
- byCategory,
463
- };
464
- } catch (error) {
465
- throw new Error(
466
- `Failed to get issue statistics: ${
467
- error instanceof Error ? error.message : "Unknown error"
468
- }`
469
- );
470
- }
471
- }
472
-
473
- /**
474
- * Bulk update issues
475
- */
476
- async bulkUpdate(
477
- ids: string[],
478
- updateData: Partial<UpdateIssueData>
479
- ): Promise<number> {
480
- try {
481
- const result = await IssueModel.updateMany(
482
- { _id: { $in: ids } },
483
- { ...updateData, updatedAt: new Date() }
484
- );
485
- return result.modifiedCount;
486
- } catch (error) {
487
- throw new Error(
488
- `Failed to bulk update issues: ${
489
- error instanceof Error ? error.message : "Unknown error"
490
- }`
491
- );
492
- }
493
- }
494
-
495
- /**
496
- * Bulk soft delete issues
497
- */
498
- async bulkSoftDelete(ids: string[], deletedBy: string): Promise<number> {
499
- try {
500
- const result = await IssueModel.updateMany(
501
- { _id: { $in: ids } },
502
- {
503
- isDeleted: true,
504
- updatedBy: deletedBy,
505
- updatedAt: new Date(),
506
- }
507
- );
508
- return result.modifiedCount;
509
- } catch (error) {
510
- throw new Error(
511
- `Failed to bulk soft delete issues: ${
512
- error instanceof Error ? error.message : "Unknown error"
513
- }`
514
- );
515
- }
516
- }
517
- }