dt-common-device 3.0.9 → 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 (144) hide show
  1. package/dist/config/config.d.ts +1 -2
  2. package/dist/config/config.js +4 -5
  3. package/dist/device/cloud/interface.d.ts +101 -0
  4. package/dist/device/cloud/interface.js +3 -0
  5. package/dist/device/cloud/interfaces/IDeviceConnectionService.d.ts +7 -0
  6. package/dist/device/cloud/interfaces/IDeviceConnectionService.js +3 -0
  7. package/dist/device/cloud/interfaces/IDevicesService.d.ts +9 -0
  8. package/dist/device/cloud/services/Device.service.d.ts +39 -0
  9. package/dist/device/cloud/services/Device.service.js +9 -0
  10. package/dist/device/cloud/services/DeviceCloudService.d.ts +42 -0
  11. package/dist/device/cloud/services/DeviceCloudService.js +59 -0
  12. package/dist/device/cloud/services/DeviceHub.service.d.ts +3 -0
  13. package/dist/device/cloud/services/DeviceHub.service.js +6 -0
  14. package/dist/device/cloud/services/Hub.service.d.ts +25 -0
  15. package/dist/device/cloud/services/Hub.service.js +9 -0
  16. package/dist/device/cloud/services/SmartThingsDeviceService.d.ts +38 -0
  17. package/dist/device/cloud/services/SmartThingsDeviceService.js +52 -0
  18. package/dist/device/index.d.ts +4 -0
  19. package/dist/device/index.js +20 -0
  20. package/dist/device/local/events/EventHandler.js +6 -6
  21. package/dist/device/local/events/Events.d.ts +12 -33
  22. package/dist/device/local/events/Events.js +12 -33
  23. package/dist/device/local/interface.d.ts +0 -0
  24. package/dist/device/local/interface.js +1 -0
  25. package/dist/device/local/interfaces/IDevice.d.ts +1 -0
  26. package/dist/device/local/repository/Schedule.repository.d.ts +0 -1
  27. package/dist/device/local/repository/Schedule.repository.js +6 -6
  28. package/dist/device/local/services/DeviceHub.service.d.ts +11 -0
  29. package/dist/device/local/services/DeviceHub.service.js +40 -0
  30. package/dist/queue/entities/HybridHttpQueue.d.ts +4 -14
  31. package/dist/queue/entities/HybridHttpQueue.js +31 -119
  32. package/dist/queue/interfaces/IHybridHttpQueue.d.ts +2 -12
  33. package/dist/queue/interfaces/IJobResult.d.ts +1 -8
  34. package/dist/queue/interfaces/index.d.ts +0 -1
  35. package/dist/queue/interfaces/index.js +0 -1
  36. package/dist/queue/services/QueueService.d.ts +2 -12
  37. package/dist/queue/types/queue.types.d.ts +10 -29
  38. package/dist/queue/utils/jobUtils.d.ts +0 -3
  39. package/dist/queue/utils/jobUtils.js +0 -48
  40. package/dist/queue/utils/queueUtils.d.ts +7 -0
  41. package/dist/queue/utils/queueUtils.js +113 -4
  42. package/package.json +6 -1
  43. package/.eslintrc.js +0 -44
  44. package/dist/audit/AuditProperties.d.ts +0 -16
  45. package/dist/audit/AuditUtils.d.ts +0 -2
  46. package/dist/audit/AuditUtils.js +0 -36
  47. package/src/alerts/Alert.model.ts +0 -289
  48. package/src/alerts/Alert.repository.ts +0 -487
  49. package/src/alerts/Alert.service.ts +0 -711
  50. package/src/alerts/AlertBuilder.example.ts +0 -126
  51. package/src/alerts/AlertBuilder.ts +0 -208
  52. package/src/alerts/AlertService.example.ts +0 -232
  53. package/src/alerts/alert.types.ts +0 -64
  54. package/src/alerts/index.ts +0 -3
  55. package/src/audit/AuditProperties.ts +0 -16
  56. package/src/audit/AuditUtils.ts +0 -38
  57. package/src/config/config.ts +0 -202
  58. package/src/config/config.types.ts +0 -21
  59. package/src/connection/Connection.repository.ts +0 -52
  60. package/src/connection/Connection.service.ts +0 -39
  61. package/src/connection/IConnection.ts +0 -27
  62. package/src/connection/index.ts +0 -3
  63. package/src/constants/ConnectionProviders.ts +0 -11
  64. package/src/constants/Event.ts +0 -89
  65. package/src/constants/Service.ts +0 -17
  66. package/src/constants/index.ts +0 -3
  67. package/src/db/db.ts +0 -24
  68. package/src/db/index.ts +0 -2
  69. package/src/db/redis.ts +0 -20
  70. package/src/device/cloud/entities/CloudDevice.ts +0 -40
  71. package/src/device/cloud/entities/CloudDeviceService.ts +0 -8
  72. package/src/device/cloud/entities/DeviceFactory.ts +0 -27
  73. package/src/device/cloud/entities/index.ts +0 -3
  74. package/src/device/cloud/interfaces/ICloudDevice.ts +0 -14
  75. package/src/device/cloud/interfaces/ICloudDeviceService.ts +0 -6
  76. package/src/device/cloud/interfaces/IDeviceFactory.ts +0 -5
  77. package/src/device/cloud/interfaces/IRawDataTransformer.ts +0 -5
  78. package/src/device/cloud/interfaces/IRawDevice.ts +0 -19
  79. package/src/device/cloud/interfaces/index.ts +0 -5
  80. package/src/device/local/interfaces/IDevice.ts +0 -61
  81. package/src/device/local/interfaces/IDtDevice.ts +0 -16
  82. package/src/device/local/interfaces/ISchedule.ts +0 -40
  83. package/src/device/local/interfaces/index.ts +0 -3
  84. package/src/device/local/repository/Device.repository.ts +0 -368
  85. package/src/device/local/repository/Hub.repository.ts +0 -107
  86. package/src/device/local/repository/Schedule.repository.ts +0 -72
  87. package/src/device/local/services/Device.service.ts +0 -436
  88. package/src/device/local/services/Hub.service.ts +0 -57
  89. package/src/device/local/services/Schedule.service.ts +0 -26
  90. package/src/device/local/services/index.ts +0 -3
  91. package/src/docs/Alert.model.md +0 -319
  92. package/src/docs/Alerts&IssuesModel.md +0 -312
  93. package/src/docs/Issue.model.md +0 -386
  94. package/src/docs/SECURITY.md +0 -67
  95. package/src/docs/TROUBLESHOOTING.md +0 -184
  96. package/src/events/BaseEventHandler.ts +0 -145
  97. package/src/events/BaseEventTransformer.ts +0 -97
  98. package/src/events/DeviceEventHandler.ts +0 -213
  99. package/src/events/DeviceEventTransformerFactory.ts +0 -77
  100. package/src/events/EventHandler.ts +0 -124
  101. package/src/events/EventHandlerOrchestrator.ts +0 -119
  102. package/src/events/EventProcessingService.ts +0 -248
  103. package/src/events/InternalEventSubscription.ts +0 -194
  104. package/src/events/index.ts +0 -9
  105. package/src/events/interfaces/DeviceEvent.ts +0 -56
  106. package/src/events/interfaces/IEventHandler.ts +0 -28
  107. package/src/events/interfaces/IEventTransformer.ts +0 -8
  108. package/src/events/interfaces/IInternalEvent.ts +0 -33
  109. package/src/events/interfaces/index.ts +0 -4
  110. package/src/index.ts +0 -43
  111. package/src/issues/Issue.model.ts +0 -350
  112. package/src/issues/Issue.repository.ts +0 -517
  113. package/src/issues/Issue.service.ts +0 -932
  114. package/src/issues/IssueBuilder.example.ts +0 -210
  115. package/src/issues/IssueBuilder.ts +0 -263
  116. package/src/issues/IssueService.example.ts +0 -310
  117. package/src/issues/index.ts +0 -2
  118. package/src/issues/issue.types.ts +0 -98
  119. package/src/property/IProperty.ts +0 -30
  120. package/src/property/Property.repository.ts +0 -53
  121. package/src/property/Property.service.ts +0 -38
  122. package/src/property/index.ts +0 -2
  123. package/src/queue/entities/HybridHttpQueue.ts +0 -274
  124. package/src/queue/entities/index.ts +0 -1
  125. package/src/queue/index.ts +0 -6
  126. package/src/queue/interfaces/IHttpRequestJob.ts +0 -10
  127. package/src/queue/interfaces/IHybridHttpQueue.ts +0 -25
  128. package/src/queue/interfaces/IJobResult.ts +0 -15
  129. package/src/queue/interfaces/IRateLimitConfig.ts +0 -5
  130. package/src/queue/interfaces/index.ts +0 -4
  131. package/src/queue/services/QueueService.ts +0 -40
  132. package/src/queue/services/index.ts +0 -1
  133. package/src/queue/types/http.types.ts +0 -23
  134. package/src/queue/types/index.ts +0 -2
  135. package/src/queue/types/queue.types.ts +0 -21
  136. package/src/queue/utils/index.ts +0 -3
  137. package/src/queue/utils/jobUtils.ts +0 -79
  138. package/src/queue/utils/queueUtils.ts +0 -84
  139. package/src/queue/utils/rateLimit.utils.ts +0 -131
  140. package/src/utils/http.utils.ts +0 -143
  141. package/src/utils/index.ts +0 -2
  142. package/src/utils/redis.utils.ts +0 -74
  143. package/tsconfig.json +0 -20
  144. /package/dist/{audit/AuditProperties.js → device/cloud/interfaces/IDevicesService.js} +0 -0
@@ -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
- }