dt-common-device 1.3.0 → 2.0.0

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 (132) hide show
  1. package/TROUBLESHOOTING.md +184 -0
  2. package/dist/config/config.d.ts +9 -2
  3. package/dist/config/config.js +97 -14
  4. package/dist/constants/Event.d.ts +75 -0
  5. package/dist/constants/Event.js +78 -0
  6. package/dist/db/db.d.ts +1 -0
  7. package/dist/db/db.js +18 -2
  8. package/dist/device/local/entities/AlertBuilder.d.ts +87 -0
  9. package/dist/device/local/entities/AlertBuilder.example.d.ts +11 -0
  10. package/dist/device/local/entities/AlertBuilder.example.js +117 -0
  11. package/dist/device/local/entities/AlertBuilder.js +179 -0
  12. package/dist/device/local/entities/IssueBuilder.d.ts +109 -0
  13. package/dist/device/local/entities/IssueBuilder.example.d.ts +16 -0
  14. package/dist/device/local/entities/IssueBuilder.example.js +196 -0
  15. package/dist/device/local/entities/IssueBuilder.js +237 -0
  16. package/dist/device/local/entities/index.d.ts +2 -0
  17. package/dist/device/local/entities/index.js +7 -0
  18. package/dist/device/local/interfaces/IDevice.d.ts +10 -9
  19. package/dist/device/local/interfaces/IDevice.js +7 -0
  20. package/dist/device/local/models/Alert.model.d.ts +28 -0
  21. package/dist/device/local/models/Alert.model.js +222 -0
  22. package/dist/device/local/models/Issue.model.d.ts +28 -0
  23. package/dist/device/local/models/Issue.model.js +260 -0
  24. package/dist/device/local/repository/Alert.repository.d.ts +106 -0
  25. package/dist/device/local/repository/Alert.repository.js +374 -0
  26. package/dist/device/local/repository/Device.repository.d.ts +10 -2
  27. package/dist/device/local/repository/Device.repository.js +153 -30
  28. package/dist/device/local/repository/Hub.repository.d.ts +1 -1
  29. package/dist/device/local/repository/Hub.repository.js +60 -18
  30. package/dist/device/local/repository/Issue.repository.d.ts +113 -0
  31. package/dist/device/local/repository/Issue.repository.js +401 -0
  32. package/dist/device/local/repository/Schedule.repository.d.ts +1 -1
  33. package/dist/device/local/repository/Schedule.repository.js +14 -18
  34. package/dist/device/local/services/Alert.service.d.ts +135 -5
  35. package/dist/device/local/services/Alert.service.js +471 -7
  36. package/dist/device/local/services/AlertService.example.d.ts +55 -0
  37. package/dist/device/local/services/AlertService.example.js +148 -0
  38. package/dist/device/local/services/Device.service.d.ts +8 -5
  39. package/dist/device/local/services/Device.service.js +58 -40
  40. package/dist/device/local/services/Issue.service.d.ts +168 -0
  41. package/dist/device/local/services/Issue.service.js +642 -0
  42. package/dist/device/local/services/IssueService.example.d.ts +68 -0
  43. package/dist/device/local/services/IssueService.example.js +177 -0
  44. package/dist/device/local/services/index.d.ts +7 -5
  45. package/dist/device/local/services/index.js +21 -11
  46. package/dist/events/BaseEventHandler.d.ts +43 -0
  47. package/dist/events/BaseEventHandler.js +111 -0
  48. package/dist/events/BaseEventTransformer.d.ts +26 -0
  49. package/dist/events/BaseEventTransformer.js +72 -0
  50. package/dist/events/DeviceEventHandler.d.ts +15 -0
  51. package/dist/events/DeviceEventHandler.js +152 -0
  52. package/dist/events/DeviceEventTransformerFactory.d.ts +27 -0
  53. package/dist/events/DeviceEventTransformerFactory.js +116 -0
  54. package/dist/events/EventHandler.d.ts +11 -0
  55. package/dist/events/EventHandler.js +106 -0
  56. package/dist/events/EventHandlerOrchestrator.d.ts +35 -0
  57. package/dist/events/EventHandlerOrchestrator.js +141 -0
  58. package/dist/events/EventProcessingService.d.ts +43 -0
  59. package/dist/events/EventProcessingService.js +243 -0
  60. package/dist/events/InternalEventSubscription.d.ts +44 -0
  61. package/dist/events/InternalEventSubscription.js +152 -0
  62. package/dist/events/index.d.ts +9 -0
  63. package/dist/events/index.js +21 -0
  64. package/dist/events/interfaces/DeviceEvent.d.ts +48 -0
  65. package/dist/events/interfaces/DeviceEvent.js +2 -0
  66. package/dist/events/interfaces/IEventHandler.d.ts +23 -0
  67. package/dist/events/interfaces/IEventHandler.js +2 -0
  68. package/dist/events/interfaces/IEventTransformer.d.ts +7 -0
  69. package/dist/events/interfaces/IEventTransformer.js +2 -0
  70. package/dist/events/interfaces/IInternalEvent.d.ts +42 -0
  71. package/dist/events/interfaces/IInternalEvent.js +2 -0
  72. package/dist/events/interfaces/index.d.ts +4 -0
  73. package/dist/events/interfaces/index.js +20 -0
  74. package/dist/index.d.ts +6 -2
  75. package/dist/index.js +9 -2
  76. package/dist/types/alert.types.d.ts +57 -0
  77. package/dist/types/alert.types.js +22 -0
  78. package/dist/types/config.types.d.ts +15 -4
  79. package/dist/types/index.d.ts +2 -0
  80. package/dist/types/index.js +2 -0
  81. package/dist/types/issue.types.d.ts +90 -0
  82. package/dist/types/issue.types.js +40 -0
  83. package/dist/utils/http-utils.d.ts +13 -0
  84. package/dist/utils/http-utils.js +117 -0
  85. package/package.json +2 -1
  86. package/src/config/config.ts +117 -14
  87. package/src/{device/local/events/Events.ts → constants/Event.ts} +34 -13
  88. package/src/db/db.ts +14 -5
  89. package/src/device/local/entities/AlertBuilder.example.ts +126 -0
  90. package/src/device/local/entities/AlertBuilder.ts +202 -0
  91. package/src/device/local/entities/IssueBuilder.example.ts +210 -0
  92. package/src/device/local/entities/IssueBuilder.ts +263 -0
  93. package/src/device/local/entities/README.md +173 -0
  94. package/src/device/local/entities/index.ts +2 -0
  95. package/src/device/local/interfaces/IDevice.ts +11 -9
  96. package/src/device/local/models/Alert.model.md +319 -0
  97. package/src/device/local/models/Alert.model.ts +283 -0
  98. package/src/device/local/models/Issue.model.md +386 -0
  99. package/src/device/local/models/Issue.model.ts +350 -0
  100. package/src/device/local/models/README.md +312 -0
  101. package/src/device/local/repository/Alert.repository.ts +465 -0
  102. package/src/device/local/repository/Device.repository.ts +241 -32
  103. package/src/device/local/repository/Hub.repository.ts +74 -18
  104. package/src/device/local/repository/Issue.repository.ts +517 -0
  105. package/src/device/local/repository/Schedule.repository.ts +28 -22
  106. package/src/device/local/services/Alert.service.ts +617 -5
  107. package/src/device/local/services/AlertService.example.ts +229 -0
  108. package/src/device/local/services/Device.service.ts +70 -50
  109. package/src/device/local/services/Issue.service.ts +872 -0
  110. package/src/device/local/services/IssueService.example.ts +307 -0
  111. package/src/device/local/services/index.ts +7 -5
  112. package/src/events/BaseEventHandler.ts +145 -0
  113. package/src/events/BaseEventTransformer.ts +97 -0
  114. package/src/events/DeviceEventHandler.ts +211 -0
  115. package/src/events/DeviceEventTransformerFactory.ts +77 -0
  116. package/src/{device/local/events → events}/EventHandler.ts +19 -15
  117. package/src/events/EventHandlerOrchestrator.ts +119 -0
  118. package/src/events/EventProcessingService.ts +248 -0
  119. package/src/events/InternalEventSubscription.ts +219 -0
  120. package/src/events/index.ts +9 -0
  121. package/src/events/interfaces/DeviceEvent.ts +56 -0
  122. package/src/events/interfaces/IEventHandler.ts +28 -0
  123. package/src/events/interfaces/IEventTransformer.ts +8 -0
  124. package/src/events/interfaces/IInternalEvent.ts +47 -0
  125. package/src/events/interfaces/index.ts +4 -0
  126. package/src/index.ts +9 -2
  127. package/src/types/alert.types.ts +64 -0
  128. package/src/types/config.types.ts +17 -4
  129. package/src/types/index.ts +2 -0
  130. package/src/types/issue.types.ts +98 -0
  131. package/src/utils/http-utils.ts +143 -0
  132. package/src/device/local/events/index.ts +0 -2
@@ -37,14 +37,11 @@ var __setFunctionName = (this && this.__setFunctionName) || function (f, name, p
37
37
  if (typeof name === "symbol") name = name.description ? "[".concat(name.description, "]") : "";
38
38
  return Object.defineProperty(f, "name", { configurable: true, value: prefix ? "".concat(prefix, " ", name) : name });
39
39
  };
40
- var __importDefault = (this && this.__importDefault) || function (mod) {
41
- return (mod && mod.__esModule) ? mod : { "default": mod };
42
- };
43
40
  Object.defineProperty(exports, "__esModule", { value: true });
44
41
  exports.ScheduleRepository = void 0;
45
42
  const typedi_1 = require("typedi");
46
43
  const config_1 = require("../../../config/config");
47
- const axios_1 = __importDefault(require("axios"));
44
+ const http_utils_1 = require("../../../utils/http-utils");
48
45
  let ScheduleRepository = (() => {
49
46
  let _classDecorators = [(0, typedi_1.Service)()];
50
47
  let _classDescriptor;
@@ -52,40 +49,39 @@ let ScheduleRepository = (() => {
52
49
  let _classThis;
53
50
  var ScheduleRepository = _classThis = class {
54
51
  constructor() {
55
- const { DEVICE_SERVICE } = (0, config_1.getConfig)();
56
- if (!DEVICE_SERVICE) {
57
- throw new Error("DEVICE_SERVICE is not configured. Call initialize() first with DEVICE_SERVICE.");
58
- }
59
- this.baseUrl = DEVICE_SERVICE;
52
+ this.axiosInstance = (0, http_utils_1.getDeviceServiceAxiosInstance)();
60
53
  }
61
54
  async getSchedule(scheduleId) {
62
55
  try {
63
- const response = await axios_1.default.get(`${this.baseUrl}/devices/schedule?id=${scheduleId}`);
56
+ const response = await this.axiosInstance.get(`/devices/schedule?id=${scheduleId}`);
64
57
  return response.data;
65
58
  }
66
59
  catch (error) {
67
- console.log(error);
68
- throw new Error(`Failed to get schedule: ${error.response.data.message}`);
60
+ (0, config_1.getConfig)().LOGGER.error(`Failed to get schedule ${scheduleId}:`, error);
61
+ const errorMessage = error.response?.data?.message || error.message || "Unknown error";
62
+ throw new Error(`Failed to get schedule: ${errorMessage}`);
69
63
  }
70
64
  }
71
65
  async getScheduleByZone(zoneId) {
72
66
  try {
73
- const response = await axios_1.default.get(`${this.baseUrl}/devices/schedules?zoneId=${zoneId}`);
67
+ const response = await this.axiosInstance.get(`/devices/schedules?zoneId=${zoneId}`);
74
68
  return response.data;
75
69
  }
76
70
  catch (error) {
77
- console.log(error);
78
- throw new Error(`Failed to get schedule: ${error.response.data.message}`);
71
+ (0, config_1.getConfig)().LOGGER.error(`Failed to get schedule by zone ${zoneId}:`, error);
72
+ const errorMessage = error.response?.data?.message || error.message || "Unknown error";
73
+ throw new Error(`Failed to get schedule: ${errorMessage}`);
79
74
  }
80
75
  }
81
76
  async setSchedule(scheduleId, schedule) {
82
77
  try {
83
- const response = await axios_1.default.put(`${this.baseUrl}/devices/schedules/${scheduleId}`, schedule);
78
+ const response = await this.axiosInstance.put(`/devices/schedules/${scheduleId}`, schedule);
84
79
  return response.data;
85
80
  }
86
81
  catch (error) {
87
- console.log(error);
88
- throw new Error(`Failed to update schedule: ${error.response.data.message}`);
82
+ (0, config_1.getConfig)().LOGGER.error(`Failed to update schedule ${scheduleId}:`, error);
83
+ const errorMessage = error.response?.data?.message || error.message || "Unknown error";
84
+ throw new Error(`Failed to update schedule: ${errorMessage}`);
89
85
  }
90
86
  }
91
87
  };
@@ -1,7 +1,137 @@
1
+ import { AlertRepository } from "../repository/Alert.repository";
2
+ import { IAlertDocument } from "../models/Alert.model";
3
+ import { CreateAlertData, UpdateAlertData, AlertCategory, AlertSeverity, EntityType } from "../../../types/alert.types";
4
+ import { AlertBuilder } from "../entities/AlertBuilder";
1
5
  export declare class AlertService {
2
- constructor();
3
- raiseReadinessAlert(): void;
4
- raiseOperationsAlert(): void;
5
- raiseSecurityAlert(): void;
6
- raiseEnergyAlert(): void;
6
+ private readonly alertRepository;
7
+ constructor(alertRepository: AlertRepository);
8
+ /**
9
+ * Create a readiness alert using AlertBuilder
10
+ */
11
+ raiseReadinessAlert(propertyId: string, title: string, description: string, entityId?: string, entityType?: EntityType, createdBy?: string): Promise<IAlertDocument>;
12
+ /**
13
+ * Create an operations alert using AlertBuilder
14
+ */
15
+ raiseOperationsAlert(propertyId: string, title: string, description: string, entityId?: string, entityType?: EntityType, createdBy?: string): Promise<IAlertDocument>;
16
+ /**
17
+ * Create a security alert using AlertBuilder
18
+ */
19
+ raiseSecurityAlert(propertyId: string, title: string, description: string, entityId?: string, entityType?: EntityType, createdBy?: string): Promise<IAlertDocument>;
20
+ /**
21
+ * Create an energy alert using AlertBuilder
22
+ */
23
+ raiseEnergyAlert(propertyId: string, title: string, description: string, entityId?: string, entityType?: EntityType, createdBy?: string): Promise<IAlertDocument>;
24
+ /**
25
+ * Create a device-specific alert using AlertBuilder
26
+ */
27
+ raiseDeviceAlert(deviceId: string, propertyId: string, title: string, description: string, category?: AlertCategory, severity?: AlertSeverity, createdBy?: string): Promise<IAlertDocument>;
28
+ /**
29
+ * Create a hub-specific alert using AlertBuilder
30
+ */
31
+ raiseHubAlert(hubId: string, propertyId: string, title: string, description: string, category?: AlertCategory, severity?: AlertSeverity, createdBy?: string): Promise<IAlertDocument>;
32
+ /**
33
+ * Create a new alert with business logic validation
34
+ * Accepts either a CreateAlertData object or an AlertBuilder instance
35
+ */
36
+ createAlert(alertData: CreateAlertData | AlertBuilder): Promise<IAlertDocument>;
37
+ /**
38
+ * Get alert by ID with business logic
39
+ */
40
+ getAlertById(id: string, includeDeleted?: boolean): Promise<IAlertDocument | null>;
41
+ /**
42
+ * Get all alerts with business logic filtering
43
+ */
44
+ getAlerts(filters?: {
45
+ propertyId?: string;
46
+ category?: AlertCategory;
47
+ severity?: AlertSeverity;
48
+ entityType?: EntityType;
49
+ entityId?: string;
50
+ isActive?: boolean;
51
+ isRead?: boolean;
52
+ includeDeleted?: boolean;
53
+ limit?: number;
54
+ skip?: number;
55
+ }): Promise<IAlertDocument[]>;
56
+ /**
57
+ * Update an alert with business logic validation
58
+ */
59
+ updateAlert(id: string, updateData: UpdateAlertData): Promise<IAlertDocument | null>;
60
+ /**
61
+ * Soft delete an alert with business logic
62
+ */
63
+ deleteAlert(id: string, deletedBy: string): Promise<boolean>;
64
+ /**
65
+ * Mark alert as read with business logic
66
+ */
67
+ markAsRead(id: string, updatedBy: string): Promise<IAlertDocument | null>;
68
+ /**
69
+ * Mark alert as unread with business logic
70
+ */
71
+ markAsUnread(id: string, updatedBy: string): Promise<IAlertDocument | null>;
72
+ /**
73
+ * Activate an alert with business logic
74
+ */
75
+ activateAlert(id: string, updatedBy: string): Promise<IAlertDocument | null>;
76
+ /**
77
+ * Deactivate an alert with business logic
78
+ */
79
+ deactivateAlert(id: string, updatedBy: string): Promise<IAlertDocument | null>;
80
+ /**
81
+ * Snooze an alert with business logic
82
+ */
83
+ snoozeAlert(id: string, until: Date, updatedBy: string): Promise<IAlertDocument | null>;
84
+ /**
85
+ * Unsnooze an alert with business logic
86
+ */
87
+ unsnoozeAlert(id: string, updatedBy: string): Promise<IAlertDocument | null>;
88
+ /**
89
+ * Get alerts by property with business logic
90
+ */
91
+ getAlertsByProperty(propertyId: string, includeDeleted?: boolean): Promise<IAlertDocument[]>;
92
+ /**
93
+ * Get alerts by entity with business logic
94
+ */
95
+ getAlertsByEntity(entityId: string, entityType: EntityType, includeDeleted?: boolean): Promise<IAlertDocument[]>;
96
+ /**
97
+ * Get alerts by category with business logic
98
+ */
99
+ getAlertsByCategory(category: AlertCategory, includeDeleted?: boolean): Promise<IAlertDocument[]>;
100
+ /**
101
+ * Get alerts by severity with business logic
102
+ */
103
+ getAlertsBySeverity(severity: AlertSeverity, includeDeleted?: boolean): Promise<IAlertDocument[]>;
104
+ /**
105
+ * Get active alerts with business logic
106
+ */
107
+ getActiveAlerts(includeDeleted?: boolean): Promise<IAlertDocument[]>;
108
+ /**
109
+ * Get unread alerts with business logic
110
+ */
111
+ getUnreadAlerts(includeDeleted?: boolean): Promise<IAlertDocument[]>;
112
+ /**
113
+ * Get snoozed alerts with business logic
114
+ */
115
+ getSnoozedAlerts(includeDeleted?: boolean): Promise<IAlertDocument[]>;
116
+ /**
117
+ * Get expired snooze alerts with business logic
118
+ */
119
+ getExpiredSnoozeAlerts(includeDeleted?: boolean): Promise<IAlertDocument[]>;
120
+ /**
121
+ * Get alert statistics with business logic
122
+ */
123
+ getAlertStatistics(propertyId?: string): Promise<{
124
+ total: number;
125
+ active: number;
126
+ unread: number;
127
+ snoozed: number;
128
+ bySeverity: Record<AlertSeverity, number>;
129
+ byCategory: Record<AlertCategory, number>;
130
+ }>;
131
+ private validateAlertData;
132
+ private validateFilters;
133
+ private validateUpdateData;
134
+ private validateSnoozeDate;
135
+ private determineDefaultSeverity;
136
+ private applyBusinessRules;
7
137
  }