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.
- package/TROUBLESHOOTING.md +184 -0
- package/dist/config/config.d.ts +9 -2
- package/dist/config/config.js +97 -14
- package/dist/constants/Event.d.ts +75 -0
- package/dist/constants/Event.js +78 -0
- package/dist/db/db.d.ts +1 -0
- package/dist/db/db.js +18 -2
- package/dist/device/local/entities/AlertBuilder.d.ts +87 -0
- package/dist/device/local/entities/AlertBuilder.example.d.ts +11 -0
- package/dist/device/local/entities/AlertBuilder.example.js +117 -0
- package/dist/device/local/entities/AlertBuilder.js +179 -0
- package/dist/device/local/entities/IssueBuilder.d.ts +109 -0
- package/dist/device/local/entities/IssueBuilder.example.d.ts +16 -0
- package/dist/device/local/entities/IssueBuilder.example.js +196 -0
- package/dist/device/local/entities/IssueBuilder.js +237 -0
- package/dist/device/local/entities/index.d.ts +2 -0
- package/dist/device/local/entities/index.js +7 -0
- package/dist/device/local/interfaces/IDevice.d.ts +10 -9
- package/dist/device/local/interfaces/IDevice.js +7 -0
- package/dist/device/local/models/Alert.model.d.ts +28 -0
- package/dist/device/local/models/Alert.model.js +222 -0
- package/dist/device/local/models/Issue.model.d.ts +28 -0
- package/dist/device/local/models/Issue.model.js +260 -0
- package/dist/device/local/repository/Alert.repository.d.ts +106 -0
- package/dist/device/local/repository/Alert.repository.js +374 -0
- package/dist/device/local/repository/Device.repository.d.ts +10 -2
- package/dist/device/local/repository/Device.repository.js +153 -30
- package/dist/device/local/repository/Hub.repository.d.ts +1 -1
- package/dist/device/local/repository/Hub.repository.js +60 -18
- package/dist/device/local/repository/Issue.repository.d.ts +113 -0
- package/dist/device/local/repository/Issue.repository.js +401 -0
- package/dist/device/local/repository/Schedule.repository.d.ts +1 -1
- package/dist/device/local/repository/Schedule.repository.js +14 -18
- package/dist/device/local/services/Alert.service.d.ts +135 -5
- package/dist/device/local/services/Alert.service.js +471 -7
- package/dist/device/local/services/AlertService.example.d.ts +55 -0
- package/dist/device/local/services/AlertService.example.js +148 -0
- package/dist/device/local/services/Device.service.d.ts +8 -5
- package/dist/device/local/services/Device.service.js +58 -40
- package/dist/device/local/services/Issue.service.d.ts +168 -0
- package/dist/device/local/services/Issue.service.js +642 -0
- package/dist/device/local/services/IssueService.example.d.ts +68 -0
- package/dist/device/local/services/IssueService.example.js +177 -0
- package/dist/device/local/services/index.d.ts +7 -5
- package/dist/device/local/services/index.js +21 -11
- package/dist/events/BaseEventHandler.d.ts +43 -0
- package/dist/events/BaseEventHandler.js +111 -0
- package/dist/events/BaseEventTransformer.d.ts +26 -0
- package/dist/events/BaseEventTransformer.js +72 -0
- package/dist/events/DeviceEventHandler.d.ts +15 -0
- package/dist/events/DeviceEventHandler.js +152 -0
- package/dist/events/DeviceEventTransformerFactory.d.ts +27 -0
- package/dist/events/DeviceEventTransformerFactory.js +116 -0
- package/dist/events/EventHandler.d.ts +11 -0
- package/dist/events/EventHandler.js +106 -0
- package/dist/events/EventHandlerOrchestrator.d.ts +35 -0
- package/dist/events/EventHandlerOrchestrator.js +141 -0
- package/dist/events/EventProcessingService.d.ts +43 -0
- package/dist/events/EventProcessingService.js +243 -0
- package/dist/events/InternalEventSubscription.d.ts +44 -0
- package/dist/events/InternalEventSubscription.js +152 -0
- package/dist/events/index.d.ts +9 -0
- package/dist/events/index.js +21 -0
- package/dist/events/interfaces/DeviceEvent.d.ts +48 -0
- package/dist/events/interfaces/DeviceEvent.js +2 -0
- package/dist/events/interfaces/IEventHandler.d.ts +23 -0
- package/dist/events/interfaces/IEventHandler.js +2 -0
- package/dist/events/interfaces/IEventTransformer.d.ts +7 -0
- package/dist/events/interfaces/IEventTransformer.js +2 -0
- package/dist/events/interfaces/IInternalEvent.d.ts +42 -0
- package/dist/events/interfaces/IInternalEvent.js +2 -0
- package/dist/events/interfaces/index.d.ts +4 -0
- package/dist/events/interfaces/index.js +20 -0
- package/dist/index.d.ts +6 -2
- package/dist/index.js +9 -2
- package/dist/types/alert.types.d.ts +57 -0
- package/dist/types/alert.types.js +22 -0
- package/dist/types/config.types.d.ts +15 -4
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.js +2 -0
- package/dist/types/issue.types.d.ts +90 -0
- package/dist/types/issue.types.js +40 -0
- package/dist/utils/http-utils.d.ts +13 -0
- package/dist/utils/http-utils.js +117 -0
- package/package.json +2 -1
- package/src/config/config.ts +117 -14
- package/src/{device/local/events/Events.ts → constants/Event.ts} +34 -13
- package/src/db/db.ts +14 -5
- package/src/device/local/entities/AlertBuilder.example.ts +126 -0
- package/src/device/local/entities/AlertBuilder.ts +202 -0
- package/src/device/local/entities/IssueBuilder.example.ts +210 -0
- package/src/device/local/entities/IssueBuilder.ts +263 -0
- package/src/device/local/entities/README.md +173 -0
- package/src/device/local/entities/index.ts +2 -0
- package/src/device/local/interfaces/IDevice.ts +11 -9
- package/src/device/local/models/Alert.model.md +319 -0
- package/src/device/local/models/Alert.model.ts +283 -0
- package/src/device/local/models/Issue.model.md +386 -0
- package/src/device/local/models/Issue.model.ts +350 -0
- package/src/device/local/models/README.md +312 -0
- package/src/device/local/repository/Alert.repository.ts +465 -0
- package/src/device/local/repository/Device.repository.ts +241 -32
- package/src/device/local/repository/Hub.repository.ts +74 -18
- package/src/device/local/repository/Issue.repository.ts +517 -0
- package/src/device/local/repository/Schedule.repository.ts +28 -22
- package/src/device/local/services/Alert.service.ts +617 -5
- package/src/device/local/services/AlertService.example.ts +229 -0
- package/src/device/local/services/Device.service.ts +70 -50
- package/src/device/local/services/Issue.service.ts +872 -0
- package/src/device/local/services/IssueService.example.ts +307 -0
- package/src/device/local/services/index.ts +7 -5
- package/src/events/BaseEventHandler.ts +145 -0
- package/src/events/BaseEventTransformer.ts +97 -0
- package/src/events/DeviceEventHandler.ts +211 -0
- package/src/events/DeviceEventTransformerFactory.ts +77 -0
- package/src/{device/local/events → events}/EventHandler.ts +19 -15
- package/src/events/EventHandlerOrchestrator.ts +119 -0
- package/src/events/EventProcessingService.ts +248 -0
- package/src/events/InternalEventSubscription.ts +219 -0
- package/src/events/index.ts +9 -0
- package/src/events/interfaces/DeviceEvent.ts +56 -0
- package/src/events/interfaces/IEventHandler.ts +28 -0
- package/src/events/interfaces/IEventTransformer.ts +8 -0
- package/src/events/interfaces/IInternalEvent.ts +47 -0
- package/src/events/interfaces/index.ts +4 -0
- package/src/index.ts +9 -2
- package/src/types/alert.types.ts +64 -0
- package/src/types/config.types.ts +17 -4
- package/src/types/index.ts +2 -0
- package/src/types/issue.types.ts +98 -0
- package/src/utils/http-utils.ts +143 -0
- package/src/device/local/events/index.ts +0 -2
|
@@ -0,0 +1,374 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
|
|
3
|
+
function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
|
|
4
|
+
var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
|
|
5
|
+
var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
|
|
6
|
+
var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
|
|
7
|
+
var _, done = false;
|
|
8
|
+
for (var i = decorators.length - 1; i >= 0; i--) {
|
|
9
|
+
var context = {};
|
|
10
|
+
for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
|
|
11
|
+
for (var p in contextIn.access) context.access[p] = contextIn.access[p];
|
|
12
|
+
context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
|
|
13
|
+
var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
|
|
14
|
+
if (kind === "accessor") {
|
|
15
|
+
if (result === void 0) continue;
|
|
16
|
+
if (result === null || typeof result !== "object") throw new TypeError("Object expected");
|
|
17
|
+
if (_ = accept(result.get)) descriptor.get = _;
|
|
18
|
+
if (_ = accept(result.set)) descriptor.set = _;
|
|
19
|
+
if (_ = accept(result.init)) initializers.unshift(_);
|
|
20
|
+
}
|
|
21
|
+
else if (_ = accept(result)) {
|
|
22
|
+
if (kind === "field") initializers.unshift(_);
|
|
23
|
+
else descriptor[key] = _;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
if (target) Object.defineProperty(target, contextIn.name, descriptor);
|
|
27
|
+
done = true;
|
|
28
|
+
};
|
|
29
|
+
var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
|
|
30
|
+
var useValue = arguments.length > 2;
|
|
31
|
+
for (var i = 0; i < initializers.length; i++) {
|
|
32
|
+
value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
|
|
33
|
+
}
|
|
34
|
+
return useValue ? value : void 0;
|
|
35
|
+
};
|
|
36
|
+
var __setFunctionName = (this && this.__setFunctionName) || function (f, name, prefix) {
|
|
37
|
+
if (typeof name === "symbol") name = name.description ? "[".concat(name.description, "]") : "";
|
|
38
|
+
return Object.defineProperty(f, "name", { configurable: true, value: prefix ? "".concat(prefix, " ", name) : name });
|
|
39
|
+
};
|
|
40
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
41
|
+
exports.AlertRepository = void 0;
|
|
42
|
+
const typedi_1 = require("typedi");
|
|
43
|
+
const Alert_model_1 = require("../models/Alert.model");
|
|
44
|
+
const alert_types_1 = require("../../../types/alert.types");
|
|
45
|
+
let AlertRepository = (() => {
|
|
46
|
+
let _classDecorators = [(0, typedi_1.Service)()];
|
|
47
|
+
let _classDescriptor;
|
|
48
|
+
let _classExtraInitializers = [];
|
|
49
|
+
let _classThis;
|
|
50
|
+
var AlertRepository = _classThis = class {
|
|
51
|
+
/**
|
|
52
|
+
* Create a new alert
|
|
53
|
+
*/
|
|
54
|
+
async create(alertData) {
|
|
55
|
+
try {
|
|
56
|
+
const alert = new Alert_model_1.AlertModel({
|
|
57
|
+
...alertData,
|
|
58
|
+
severity: alertData.severity || alert_types_1.AlertSeverity.MEDIUM,
|
|
59
|
+
isRead: false,
|
|
60
|
+
isActive: true,
|
|
61
|
+
isDeleted: false,
|
|
62
|
+
});
|
|
63
|
+
return await alert.save();
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
throw new Error(`Failed to create alert: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Find alert by ID
|
|
71
|
+
*/
|
|
72
|
+
async findById(id, includeDeleted = false) {
|
|
73
|
+
try {
|
|
74
|
+
const query = { _id: id };
|
|
75
|
+
if (!includeDeleted) {
|
|
76
|
+
query.isDeleted = false;
|
|
77
|
+
}
|
|
78
|
+
return await Alert_model_1.AlertModel.findOne(query);
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
throw new Error(`Failed to find alert by ID: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Find all alerts with filters
|
|
86
|
+
*/
|
|
87
|
+
async findAll(filters = {}) {
|
|
88
|
+
try {
|
|
89
|
+
const query = {};
|
|
90
|
+
if (filters.propertyId)
|
|
91
|
+
query.propertyId = filters.propertyId;
|
|
92
|
+
if (filters.category)
|
|
93
|
+
query.category = filters.category;
|
|
94
|
+
if (filters.severity)
|
|
95
|
+
query.severity = filters.severity;
|
|
96
|
+
if (filters.entityType)
|
|
97
|
+
query.entityType = filters.entityType;
|
|
98
|
+
if (filters.entityId)
|
|
99
|
+
query.entityId = filters.entityId;
|
|
100
|
+
if (filters.isActive !== undefined)
|
|
101
|
+
query.isActive = filters.isActive;
|
|
102
|
+
if (filters.isRead !== undefined)
|
|
103
|
+
query.isRead = filters.isRead;
|
|
104
|
+
if (!filters.includeDeleted)
|
|
105
|
+
query.isDeleted = false;
|
|
106
|
+
const queryBuilder = Alert_model_1.AlertModel.find(query);
|
|
107
|
+
if (filters.sort) {
|
|
108
|
+
queryBuilder.sort(filters.sort);
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
queryBuilder.sort({ severity: -1, createdAt: -1 });
|
|
112
|
+
}
|
|
113
|
+
if (filters.skip)
|
|
114
|
+
queryBuilder.skip(filters.skip);
|
|
115
|
+
if (filters.limit)
|
|
116
|
+
queryBuilder.limit(filters.limit);
|
|
117
|
+
return await queryBuilder.exec();
|
|
118
|
+
}
|
|
119
|
+
catch (error) {
|
|
120
|
+
throw new Error(`Failed to find alerts: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Update an alert
|
|
125
|
+
*/
|
|
126
|
+
async update(id, updateData) {
|
|
127
|
+
try {
|
|
128
|
+
return await Alert_model_1.AlertModel.findByIdAndUpdate(id, { ...updateData, updatedAt: new Date() }, { new: true, runValidators: true });
|
|
129
|
+
}
|
|
130
|
+
catch (error) {
|
|
131
|
+
throw new Error(`Failed to update alert: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Soft delete an alert
|
|
136
|
+
*/
|
|
137
|
+
async softDelete(id, deletedBy) {
|
|
138
|
+
try {
|
|
139
|
+
const result = await Alert_model_1.AlertModel.findByIdAndUpdate(id, {
|
|
140
|
+
isDeleted: true,
|
|
141
|
+
updatedBy: deletedBy,
|
|
142
|
+
updatedAt: new Date(),
|
|
143
|
+
});
|
|
144
|
+
return !!result;
|
|
145
|
+
}
|
|
146
|
+
catch (error) {
|
|
147
|
+
throw new Error(`Failed to soft delete alert: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Permanently delete an alert
|
|
152
|
+
*/
|
|
153
|
+
async hardDelete(id) {
|
|
154
|
+
try {
|
|
155
|
+
const result = await Alert_model_1.AlertModel.findByIdAndDelete(id);
|
|
156
|
+
return !!result;
|
|
157
|
+
}
|
|
158
|
+
catch (error) {
|
|
159
|
+
throw new Error(`Failed to permanently delete alert: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Count alerts with filters
|
|
164
|
+
*/
|
|
165
|
+
async count(filters = {}) {
|
|
166
|
+
try {
|
|
167
|
+
const query = {};
|
|
168
|
+
if (filters.propertyId)
|
|
169
|
+
query.propertyId = filters.propertyId;
|
|
170
|
+
if (filters.category)
|
|
171
|
+
query.category = filters.category;
|
|
172
|
+
if (filters.severity)
|
|
173
|
+
query.severity = filters.severity;
|
|
174
|
+
if (filters.entityType)
|
|
175
|
+
query.entityType = filters.entityType;
|
|
176
|
+
if (filters.entityId)
|
|
177
|
+
query.entityId = filters.entityId;
|
|
178
|
+
if (filters.isActive !== undefined)
|
|
179
|
+
query.isActive = filters.isActive;
|
|
180
|
+
if (filters.isRead !== undefined)
|
|
181
|
+
query.isRead = filters.isRead;
|
|
182
|
+
if (!filters.includeDeleted)
|
|
183
|
+
query.isDeleted = false;
|
|
184
|
+
return await Alert_model_1.AlertModel.countDocuments(query);
|
|
185
|
+
}
|
|
186
|
+
catch (error) {
|
|
187
|
+
throw new Error(`Failed to count alerts: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Find alerts by property
|
|
192
|
+
*/
|
|
193
|
+
async findByProperty(propertyId, includeDeleted = false) {
|
|
194
|
+
try {
|
|
195
|
+
return await Alert_model_1.AlertModel.findByProperty(propertyId, includeDeleted);
|
|
196
|
+
}
|
|
197
|
+
catch (error) {
|
|
198
|
+
throw new Error(`Failed to find alerts by property: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Find alerts by entity
|
|
203
|
+
*/
|
|
204
|
+
async findByEntity(entityId, entityType, includeDeleted = false) {
|
|
205
|
+
try {
|
|
206
|
+
return await Alert_model_1.AlertModel.findByEntity(entityId, entityType, includeDeleted);
|
|
207
|
+
}
|
|
208
|
+
catch (error) {
|
|
209
|
+
throw new Error(`Failed to find alerts by entity: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Find alerts by category
|
|
214
|
+
*/
|
|
215
|
+
async findByCategory(category, includeDeleted = false) {
|
|
216
|
+
try {
|
|
217
|
+
return await Alert_model_1.AlertModel.findByCategory(category, includeDeleted);
|
|
218
|
+
}
|
|
219
|
+
catch (error) {
|
|
220
|
+
throw new Error(`Failed to find alerts by category: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Find alerts by severity
|
|
225
|
+
*/
|
|
226
|
+
async findBySeverity(severity, includeDeleted = false) {
|
|
227
|
+
try {
|
|
228
|
+
return await Alert_model_1.AlertModel.findBySeverity(severity, includeDeleted);
|
|
229
|
+
}
|
|
230
|
+
catch (error) {
|
|
231
|
+
throw new Error(`Failed to find alerts by severity: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Find active alerts
|
|
236
|
+
*/
|
|
237
|
+
async findActive(includeDeleted = false) {
|
|
238
|
+
try {
|
|
239
|
+
return await Alert_model_1.AlertModel.findActive(includeDeleted);
|
|
240
|
+
}
|
|
241
|
+
catch (error) {
|
|
242
|
+
throw new Error(`Failed to find active alerts: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Find unread alerts
|
|
247
|
+
*/
|
|
248
|
+
async findUnread(includeDeleted = false) {
|
|
249
|
+
try {
|
|
250
|
+
return await Alert_model_1.AlertModel.findUnread(includeDeleted);
|
|
251
|
+
}
|
|
252
|
+
catch (error) {
|
|
253
|
+
throw new Error(`Failed to find unread alerts: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Find snoozed alerts
|
|
258
|
+
*/
|
|
259
|
+
async findSnoozed(includeDeleted = false) {
|
|
260
|
+
try {
|
|
261
|
+
return await Alert_model_1.AlertModel.findSnoozed(includeDeleted);
|
|
262
|
+
}
|
|
263
|
+
catch (error) {
|
|
264
|
+
throw new Error(`Failed to find snoozed alerts: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Find expired snooze alerts
|
|
269
|
+
*/
|
|
270
|
+
async findExpiredSnooze(includeDeleted = false) {
|
|
271
|
+
try {
|
|
272
|
+
return await Alert_model_1.AlertModel.findExpiredSnooze(includeDeleted);
|
|
273
|
+
}
|
|
274
|
+
catch (error) {
|
|
275
|
+
throw new Error(`Failed to find expired snooze alerts: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Get alert statistics
|
|
280
|
+
*/
|
|
281
|
+
async getStatistics(propertyId) {
|
|
282
|
+
try {
|
|
283
|
+
const query = { isDeleted: false };
|
|
284
|
+
if (propertyId)
|
|
285
|
+
query.propertyId = propertyId;
|
|
286
|
+
const [total, active, unread, snoozed, severityStats, categoryStats] = await Promise.all([
|
|
287
|
+
Alert_model_1.AlertModel.countDocuments(query),
|
|
288
|
+
Alert_model_1.AlertModel.countDocuments({ ...query, isActive: true }),
|
|
289
|
+
Alert_model_1.AlertModel.countDocuments({ ...query, isRead: false }),
|
|
290
|
+
Alert_model_1.AlertModel.countDocuments({
|
|
291
|
+
...query,
|
|
292
|
+
snoozeUntil: { $exists: true, $ne: null },
|
|
293
|
+
}),
|
|
294
|
+
Alert_model_1.AlertModel.aggregate([
|
|
295
|
+
{ $match: query },
|
|
296
|
+
{ $group: { _id: "$severity", count: { $sum: 1 } } },
|
|
297
|
+
]),
|
|
298
|
+
Alert_model_1.AlertModel.aggregate([
|
|
299
|
+
{ $match: query },
|
|
300
|
+
{ $group: { _id: "$category", count: { $sum: 1 } } },
|
|
301
|
+
]),
|
|
302
|
+
]);
|
|
303
|
+
const bySeverity = Object.values(alert_types_1.AlertSeverity).reduce((acc, severity) => {
|
|
304
|
+
acc[severity] = 0;
|
|
305
|
+
return acc;
|
|
306
|
+
}, {});
|
|
307
|
+
const byCategory = Object.values(alert_types_1.AlertCategory).reduce((acc, category) => {
|
|
308
|
+
acc[category] = 0;
|
|
309
|
+
return acc;
|
|
310
|
+
}, {});
|
|
311
|
+
// Type-safe handling of aggregation results
|
|
312
|
+
severityStats.forEach((stat) => {
|
|
313
|
+
if (stat._id in bySeverity) {
|
|
314
|
+
bySeverity[stat._id] = stat.count;
|
|
315
|
+
}
|
|
316
|
+
});
|
|
317
|
+
categoryStats.forEach((stat) => {
|
|
318
|
+
if (stat._id in byCategory) {
|
|
319
|
+
byCategory[stat._id] = stat.count;
|
|
320
|
+
}
|
|
321
|
+
});
|
|
322
|
+
return {
|
|
323
|
+
total,
|
|
324
|
+
active,
|
|
325
|
+
unread,
|
|
326
|
+
snoozed,
|
|
327
|
+
bySeverity,
|
|
328
|
+
byCategory,
|
|
329
|
+
};
|
|
330
|
+
}
|
|
331
|
+
catch (error) {
|
|
332
|
+
throw new Error(`Failed to get alert statistics: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
/**
|
|
336
|
+
* Bulk update alerts
|
|
337
|
+
*/
|
|
338
|
+
async bulkUpdate(ids, updateData) {
|
|
339
|
+
try {
|
|
340
|
+
const result = await Alert_model_1.AlertModel.updateMany({ _id: { $in: ids } }, { ...updateData, updatedAt: new Date() });
|
|
341
|
+
return result.modifiedCount;
|
|
342
|
+
}
|
|
343
|
+
catch (error) {
|
|
344
|
+
throw new Error(`Failed to bulk update alerts: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
/**
|
|
348
|
+
* Bulk soft delete alerts
|
|
349
|
+
*/
|
|
350
|
+
async bulkSoftDelete(ids, deletedBy) {
|
|
351
|
+
try {
|
|
352
|
+
const result = await Alert_model_1.AlertModel.updateMany({ _id: { $in: ids } }, {
|
|
353
|
+
isDeleted: true,
|
|
354
|
+
updatedBy: deletedBy,
|
|
355
|
+
updatedAt: new Date(),
|
|
356
|
+
});
|
|
357
|
+
return result.modifiedCount;
|
|
358
|
+
}
|
|
359
|
+
catch (error) {
|
|
360
|
+
throw new Error(`Failed to bulk soft delete alerts: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
};
|
|
364
|
+
__setFunctionName(_classThis, "AlertRepository");
|
|
365
|
+
(() => {
|
|
366
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
|
|
367
|
+
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
368
|
+
AlertRepository = _classThis = _classDescriptor.value;
|
|
369
|
+
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
370
|
+
__runInitializers(_classThis, _classExtraInitializers);
|
|
371
|
+
})();
|
|
372
|
+
return AlertRepository = _classThis;
|
|
373
|
+
})();
|
|
374
|
+
exports.AlertRepository = AlertRepository;
|
|
@@ -1,17 +1,25 @@
|
|
|
1
|
-
import { IDevice } from "../interfaces/IDevice";
|
|
1
|
+
import { IDevice, INewStatus } from "../interfaces/IDevice";
|
|
2
2
|
import { IDtDevice } from "../interfaces/IDtDevice";
|
|
3
3
|
export declare class DeviceRepository {
|
|
4
|
-
private readonly baseUrl;
|
|
5
4
|
private readonly postgres;
|
|
5
|
+
private readonly axiosInstance;
|
|
6
6
|
constructor();
|
|
7
7
|
getDevice(deviceId: string, withHubDetails?: boolean): Promise<IDevice>;
|
|
8
8
|
getDevices(deviceIds: string[], withHubDetails?: boolean): Promise<IDevice[]>;
|
|
9
9
|
getPropertyDevices(propertyId: string, selectDeviceId?: boolean, type?: string, withHubDetails?: boolean): Promise<IDevice[]>;
|
|
10
10
|
getPropertyDeviceIds(propertyId: string, selectDeviceId: boolean | undefined, manufacturer: string): Promise<any>;
|
|
11
11
|
getState(deviceId: string): Promise<any>;
|
|
12
|
+
setState(deviceId: string, state: any): Promise<any>;
|
|
12
13
|
getStatus(deviceId: string): Promise<Record<string, any>>;
|
|
14
|
+
setStatus(deviceId: string, newStatus: INewStatus): Promise<any>;
|
|
13
15
|
getBatteryLevel(deviceId: string): Promise<Record<string, any>>;
|
|
16
|
+
setBatteryLevel(deviceId: string, newBatteryLevel: any): Promise<any>;
|
|
14
17
|
getMetaData(deviceId: string): Promise<any>;
|
|
18
|
+
setMetaData(deviceId: string, metaData: Record<string, any>): Promise<any>;
|
|
15
19
|
getDevicesByAccessGroup(accessGroupId: string): Promise<IDtDevice[]>;
|
|
16
20
|
getDevicesByZone(zoneId: string): Promise<IDtDevice[]>;
|
|
21
|
+
querySelect(query: any, fields: string[]): Promise<any>;
|
|
22
|
+
queryCount(query: any): Promise<number>;
|
|
23
|
+
deleteDevices(query: any): Promise<any>;
|
|
24
|
+
queryDevices(query: any): Promise<any>;
|
|
17
25
|
}
|
|
@@ -37,15 +37,12 @@ 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.DeviceRepository = void 0;
|
|
45
|
-
const axios_1 = __importDefault(require("axios"));
|
|
46
42
|
const config_1 = require("../../../config/config");
|
|
47
43
|
const db_1 = require("../../../db");
|
|
48
44
|
const typedi_1 = require("typedi");
|
|
45
|
+
const http_utils_1 = require("../../../utils/http-utils");
|
|
49
46
|
let DeviceRepository = (() => {
|
|
50
47
|
let _classDecorators = [(0, typedi_1.Service)()];
|
|
51
48
|
let _classDescriptor;
|
|
@@ -53,52 +50,134 @@ let DeviceRepository = (() => {
|
|
|
53
50
|
let _classThis;
|
|
54
51
|
var DeviceRepository = _classThis = class {
|
|
55
52
|
constructor() {
|
|
56
|
-
const { DEVICE_SERVICE } = (0, config_1.getConfig)();
|
|
57
|
-
if (!DEVICE_SERVICE) {
|
|
58
|
-
throw new Error("DEVICE_SERVICE is not configured. Call initialize() first with DEVICE_SERVICE.");
|
|
59
|
-
}
|
|
60
|
-
this.baseUrl = DEVICE_SERVICE;
|
|
61
53
|
this.postgres = (0, db_1.getPostgresClient)();
|
|
54
|
+
this.axiosInstance = (0, http_utils_1.getDeviceServiceAxiosInstance)();
|
|
62
55
|
}
|
|
63
56
|
async getDevice(deviceId, withHubDetails = false) {
|
|
64
57
|
try {
|
|
65
|
-
const response = await
|
|
58
|
+
const response = await this.axiosInstance.get(`/devices/${deviceId}?withHubDetails=${withHubDetails} `);
|
|
66
59
|
return response.data;
|
|
67
60
|
}
|
|
68
61
|
catch (error) {
|
|
69
|
-
|
|
70
|
-
throw new Error(`Failed to get device: ${error.message}`);
|
|
62
|
+
(0, config_1.getConfig)().LOGGER.error(`Failed to get device ${deviceId}:`, error);
|
|
63
|
+
throw new Error(`Failed to get device: ${error.message || "Unknown error"}`);
|
|
71
64
|
}
|
|
72
65
|
}
|
|
73
66
|
async getDevices(deviceIds, withHubDetails = false) {
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
67
|
+
try {
|
|
68
|
+
const response = await this.axiosInstance.get(`/devices`, {
|
|
69
|
+
params: { deviceIds, withHubDetails },
|
|
70
|
+
});
|
|
71
|
+
return response.data;
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
(0, config_1.getConfig)().LOGGER.error("Failed to get devices:", error);
|
|
75
|
+
throw new Error(`Failed to get devices: ${error.message || "Unknown error"}`);
|
|
76
|
+
}
|
|
78
77
|
}
|
|
79
78
|
async getPropertyDevices(propertyId, selectDeviceId = false, type, withHubDetails = false) {
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
79
|
+
try {
|
|
80
|
+
const response = await this.axiosInstance.get(`/devices`, {
|
|
81
|
+
params: { propertyId, selectDeviceId, type, withHubDetails },
|
|
82
|
+
});
|
|
83
|
+
return response.data;
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
(0, config_1.getConfig)().LOGGER.error(`Failed to get property devices for ${propertyId}:`, error);
|
|
87
|
+
throw new Error(`Failed to get property devices: ${error.message || "Unknown error"}`);
|
|
88
|
+
}
|
|
84
89
|
}
|
|
85
90
|
async getPropertyDeviceIds(propertyId, selectDeviceId = false, manufacturer) {
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
91
|
+
try {
|
|
92
|
+
const response = await this.axiosInstance.get(`/devices`, {
|
|
93
|
+
params: { propertyId, selectDeviceId, manufacturer },
|
|
94
|
+
});
|
|
95
|
+
return response.data;
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
(0, config_1.getConfig)().LOGGER.error(`Failed to get property device IDs for ${propertyId}:`, error);
|
|
99
|
+
throw new Error(`Failed to get property device IDs: ${error.message || "Unknown error"}`);
|
|
100
|
+
}
|
|
90
101
|
}
|
|
91
102
|
async getState(deviceId) {
|
|
92
|
-
|
|
103
|
+
try {
|
|
104
|
+
const response = await this.axiosInstance.get(`/devices/${deviceId}/state`);
|
|
105
|
+
return response.data;
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
(0, config_1.getConfig)().LOGGER.error(`Failed to get device state for ${deviceId}:`, error);
|
|
109
|
+
throw new Error(`Failed to get device state: ${error.message || "Unknown error"}`);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
async setState(deviceId, state) {
|
|
113
|
+
try {
|
|
114
|
+
const response = await this.axiosInstance.put(`/devices/${deviceId}/state`, state);
|
|
115
|
+
return response.data;
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
(0, config_1.getConfig)().LOGGER.error(`Failed to set device state for ${deviceId}:`, error);
|
|
119
|
+
throw new Error(`Failed to set device state: ${error.message || "Unknown error"}`);
|
|
120
|
+
}
|
|
93
121
|
}
|
|
94
122
|
async getStatus(deviceId) {
|
|
95
|
-
|
|
123
|
+
try {
|
|
124
|
+
const response = await this.axiosInstance.get(`/devices/${deviceId}/status`);
|
|
125
|
+
return response.data;
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
(0, config_1.getConfig)().LOGGER.error(`Failed to get device status for ${deviceId}:`, error);
|
|
129
|
+
throw new Error(`Failed to get device status: ${error.message || "Unknown error"}`);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
async setStatus(deviceId, newStatus) {
|
|
133
|
+
try {
|
|
134
|
+
const response = await this.axiosInstance.put(`/devices/${deviceId}/status`, newStatus);
|
|
135
|
+
return response.data;
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
(0, config_1.getConfig)().LOGGER.error(`Failed to set device status for ${deviceId}:`, error);
|
|
139
|
+
throw new Error(`Failed to set device status: ${error.message || "Unknown error"}`);
|
|
140
|
+
}
|
|
96
141
|
}
|
|
97
142
|
async getBatteryLevel(deviceId) {
|
|
98
|
-
|
|
143
|
+
try {
|
|
144
|
+
const response = await this.axiosInstance.get(`/devices/${deviceId}/battery-level`);
|
|
145
|
+
return response.data;
|
|
146
|
+
}
|
|
147
|
+
catch (error) {
|
|
148
|
+
(0, config_1.getConfig)().LOGGER.error(`Failed to get battery level for ${deviceId}:`, error);
|
|
149
|
+
throw new Error(`Failed to get battery level: ${error.message || "Unknown error"}`);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
async setBatteryLevel(deviceId, newBatteryLevel) {
|
|
153
|
+
try {
|
|
154
|
+
const response = await this.axiosInstance.put(`/devices/${deviceId}/battery-level`, { newBatteryLevel });
|
|
155
|
+
return response.data;
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
(0, config_1.getConfig)().LOGGER.error(`Failed to set battery level for ${deviceId}:`, error);
|
|
159
|
+
throw new Error(`Failed to set battery level: ${error.message || "Unknown error"}`);
|
|
160
|
+
}
|
|
99
161
|
}
|
|
100
162
|
async getMetaData(deviceId) {
|
|
101
|
-
|
|
163
|
+
try {
|
|
164
|
+
const response = await this.axiosInstance.get(`/devices/${deviceId}/metaData`);
|
|
165
|
+
return response.data;
|
|
166
|
+
}
|
|
167
|
+
catch (error) {
|
|
168
|
+
(0, config_1.getConfig)().LOGGER.error(`Failed to get metadata for ${deviceId}:`, error);
|
|
169
|
+
throw new Error(`Failed to get metadata: ${error.message || "Unknown error"}`);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
async setMetaData(deviceId, metaData) {
|
|
173
|
+
try {
|
|
174
|
+
const response = await this.axiosInstance.put(`/devices/${deviceId}/metaData`, metaData);
|
|
175
|
+
return response.data;
|
|
176
|
+
}
|
|
177
|
+
catch (error) {
|
|
178
|
+
(0, config_1.getConfig)().LOGGER.error(`Failed to set metadata for ${deviceId}:`, error);
|
|
179
|
+
throw new Error(`Failed to set metadata: ${error.message || "Unknown error"}`);
|
|
180
|
+
}
|
|
102
181
|
}
|
|
103
182
|
async getDevicesByAccessGroup(accessGroupId) {
|
|
104
183
|
try {
|
|
@@ -111,7 +190,7 @@ let DeviceRepository = (() => {
|
|
|
111
190
|
return [];
|
|
112
191
|
}
|
|
113
192
|
catch (error) {
|
|
114
|
-
|
|
193
|
+
(0, config_1.getConfig)().LOGGER.error(`Failed to get devices by access group ${accessGroupId}:`, error);
|
|
115
194
|
throw new Error("Failed to get devices by access group");
|
|
116
195
|
}
|
|
117
196
|
}
|
|
@@ -124,10 +203,54 @@ let DeviceRepository = (() => {
|
|
|
124
203
|
return [];
|
|
125
204
|
}
|
|
126
205
|
catch (error) {
|
|
127
|
-
|
|
206
|
+
(0, config_1.getConfig)().LOGGER.error(`Failed to get devices by zone ${zoneId}:`, error);
|
|
128
207
|
throw new Error("Failed to get device by zone");
|
|
129
208
|
}
|
|
130
209
|
}
|
|
210
|
+
async querySelect(query, fields) {
|
|
211
|
+
try {
|
|
212
|
+
const response = await this.axiosInstance.post(`/devices/select`, {
|
|
213
|
+
query,
|
|
214
|
+
fields,
|
|
215
|
+
});
|
|
216
|
+
return response.data;
|
|
217
|
+
}
|
|
218
|
+
catch (error) {
|
|
219
|
+
(0, config_1.getConfig)().LOGGER.error("Failed to query select devices:", error);
|
|
220
|
+
throw new Error(`Failed to query select devices: ${error.message || "Unknown error"}`);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
//remove - use existing query function
|
|
224
|
+
async queryCount(query) {
|
|
225
|
+
try {
|
|
226
|
+
const response = await this.axiosInstance.post(`/devices/count`, query);
|
|
227
|
+
return response.data;
|
|
228
|
+
}
|
|
229
|
+
catch (error) {
|
|
230
|
+
(0, config_1.getConfig)().LOGGER.error("Failed to query count devices:", error);
|
|
231
|
+
throw new Error(`Failed to query count devices: ${error.message || "Unknown error"}`);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
async deleteDevices(query) {
|
|
235
|
+
try {
|
|
236
|
+
const response = await this.axiosInstance.post(`/devices/deleteMany`, query);
|
|
237
|
+
return response.data;
|
|
238
|
+
}
|
|
239
|
+
catch (error) {
|
|
240
|
+
(0, config_1.getConfig)().LOGGER.error("Failed to delete devices:", error);
|
|
241
|
+
throw new Error(`Failed to delete devices: ${error.message || "Unknown error"}`);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
async queryDevices(query) {
|
|
245
|
+
try {
|
|
246
|
+
const response = await this.axiosInstance.post(`/devices/query`, query);
|
|
247
|
+
return response.data;
|
|
248
|
+
}
|
|
249
|
+
catch (error) {
|
|
250
|
+
(0, config_1.getConfig)().LOGGER.error("Failed to query devices:", error);
|
|
251
|
+
throw new Error(`Failed to query devices: ${error.message || "Unknown error"}`);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
131
254
|
};
|
|
132
255
|
__setFunctionName(_classThis, "DeviceRepository");
|
|
133
256
|
(() => {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { IDevice } from "../interfaces";
|
|
2
2
|
export declare class HubRepository {
|
|
3
|
-
private readonly baseUrl;
|
|
4
3
|
private readonly postgres;
|
|
4
|
+
private readonly axiosInstance;
|
|
5
5
|
constructor();
|
|
6
6
|
addHub(body: Partial<IDevice>): Promise<IDevice>;
|
|
7
7
|
getHubs(hubIds: string[]): Promise<IDevice[]>;
|