dt-common-device 7.1.13 → 7.2.1

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 (218) hide show
  1. package/dist/alerts/Alert.model.d.ts +1 -1
  2. package/dist/alerts/Alert.service.d.ts +6 -10
  3. package/dist/alerts/Alert.service.js +97 -75
  4. package/dist/alerts/AlertBuilder.d.ts +0 -4
  5. package/dist/alerts/AlertBuilder.js +0 -8
  6. package/dist/alerts/alert.types.d.ts +0 -1
  7. package/dist/alerts/alert.types.js +0 -1
  8. package/dist/audit/IAuditProperties.d.ts +3 -1
  9. package/dist/audit/IAuditProperties.js +2 -0
  10. package/dist/config/config.js +3 -0
  11. package/dist/config/constants.js +2 -1
  12. package/dist/constants/Event.d.ts +30 -0
  13. package/dist/constants/Event.js +30 -0
  14. package/dist/db/db.js +2 -2
  15. package/dist/entities/accessGroup/AccessGroup.repository.d.ts +2 -1
  16. package/dist/entities/accessGroup/AccessGroup.repository.js +4 -1
  17. package/dist/entities/accessGroup/AccessGroup.service.d.ts +2 -1
  18. package/dist/entities/accessGroup/AccessGroup.service.js +4 -3
  19. package/dist/entities/admin/Admin.repository.d.ts +1 -0
  20. package/dist/entities/admin/Admin.repository.js +32 -0
  21. package/dist/entities/admin/Admin.service.d.ts +2 -0
  22. package/dist/entities/admin/Admin.service.js +14 -0
  23. package/dist/entities/device/local/services/Device.service.js +2 -1
  24. package/dist/entities/guest/Guest.repository.d.ts +1 -1
  25. package/dist/entities/guest/Guest.repository.js +5 -2
  26. package/dist/entities/guest/Guest.service.d.ts +1 -1
  27. package/dist/entities/guest/Guest.service.js +4 -1
  28. package/dist/entities/schedules/Schedule.repository.d.ts +1 -1
  29. package/dist/entities/schedules/Schedule.repository.js +5 -2
  30. package/dist/entities/schedules/Schedule.service.d.ts +1 -1
  31. package/dist/entities/schedules/Schedule.service.js +4 -1
  32. package/dist/entities/user/User.repository.js +4 -1
  33. package/dist/entities/user/User.service.d.ts +1 -1
  34. package/dist/entities/user/User.service.js +4 -1
  35. package/dist/entities/zone/Zone.service.js +4 -1
  36. package/dist/issues/Issue.model.d.ts +1 -1
  37. package/dist/issues/Issue.model.js +4 -0
  38. package/dist/issues/Issue.service.d.ts +19 -18
  39. package/dist/issues/Issue.service.js +190 -48
  40. package/dist/issues/IssueBuilder.d.ts +0 -4
  41. package/dist/issues/IssueBuilder.js +1 -9
  42. package/dist/issues/issue.types.d.ts +4 -1
  43. package/dist/issues/issue.types.js +0 -1
  44. package/package.json +1 -1
  45. package/dist/admin/Admin.repository.d.ts +0 -7
  46. package/dist/admin/Admin.repository.js +0 -182
  47. package/dist/admin/Admin.service.d.ts +0 -5
  48. package/dist/admin/Admin.service.js +0 -17
  49. package/dist/admin/index.d.ts +0 -1
  50. package/dist/admin/index.js +0 -17
  51. package/dist/audit/AuditProperties.d.ts +0 -16
  52. package/dist/audit/AuditProperties.js +0 -2
  53. package/dist/chronicle/IChronicle.interface.d.ts +0 -14
  54. package/dist/chronicle/IChronicle.interface.js +0 -2
  55. package/dist/chronicle/chronicle.service.d.ts +0 -4
  56. package/dist/chronicle/chronicle.service.js +0 -44
  57. package/dist/connection/Connection.repository.d.ts +0 -8
  58. package/dist/connection/Connection.repository.js +0 -92
  59. package/dist/connection/Connection.service.d.ts +0 -8
  60. package/dist/connection/Connection.service.js +0 -32
  61. package/dist/connection/IConnection.d.ts +0 -28
  62. package/dist/connection/IConnection.js +0 -16
  63. package/dist/connection/index.d.ts +0 -2
  64. package/dist/connection/index.js +0 -18
  65. package/dist/device/cloud/entities/CloudConnection.d.ts +0 -6
  66. package/dist/device/cloud/entities/CloudConnection.js +0 -6
  67. package/dist/device/cloud/entities/CloudDevice.d.ts +0 -16
  68. package/dist/device/cloud/entities/CloudDevice.js +0 -26
  69. package/dist/device/cloud/entities/CloudDeviceService.d.ts +0 -5
  70. package/dist/device/cloud/entities/CloudDeviceService.js +0 -9
  71. package/dist/device/cloud/entities/DeviceFactory.d.ts +0 -7
  72. package/dist/device/cloud/entities/DeviceFactory.js +0 -80
  73. package/dist/device/cloud/entities/index.d.ts +0 -3
  74. package/dist/device/cloud/entities/index.js +0 -19
  75. package/dist/device/cloud/interface.d.ts +0 -101
  76. package/dist/device/cloud/interface.js +0 -3
  77. package/dist/device/cloud/interfaces/ICloudConnection.d.ts +0 -5
  78. package/dist/device/cloud/interfaces/ICloudConnection.js +0 -2
  79. package/dist/device/cloud/interfaces/ICloudDevice.d.ts +0 -9
  80. package/dist/device/cloud/interfaces/ICloudDevice.js +0 -2
  81. package/dist/device/cloud/interfaces/ICloudDeviceService.d.ts +0 -4
  82. package/dist/device/cloud/interfaces/ICloudDeviceService.js +0 -2
  83. package/dist/device/cloud/interfaces/IConnectionService.d.ts +0 -7
  84. package/dist/device/cloud/interfaces/IConnectionService.js +0 -2
  85. package/dist/device/cloud/interfaces/IDeviceConnectionService.d.ts +0 -7
  86. package/dist/device/cloud/interfaces/IDeviceConnectionService.js +0 -3
  87. package/dist/device/cloud/interfaces/IDeviceFactory.d.ts +0 -4
  88. package/dist/device/cloud/interfaces/IDeviceFactory.js +0 -2
  89. package/dist/device/cloud/interfaces/IDeviceService.d.ts +0 -8
  90. package/dist/device/cloud/interfaces/IDeviceService.js +0 -2
  91. package/dist/device/cloud/interfaces/IDevicesService.d.ts +0 -9
  92. package/dist/device/cloud/interfaces/IDevicesService.js +0 -2
  93. package/dist/device/cloud/interfaces/IHubService.d.ts +0 -5
  94. package/dist/device/cloud/interfaces/IHubService.js +0 -2
  95. package/dist/device/cloud/interfaces/IRawDataTransformer.d.ts +0 -4
  96. package/dist/device/cloud/interfaces/IRawDataTransformer.js +0 -2
  97. package/dist/device/cloud/interfaces/IRawDevice.d.ts +0 -17
  98. package/dist/device/cloud/interfaces/IRawDevice.js +0 -11
  99. package/dist/device/cloud/interfaces/index.d.ts +0 -5
  100. package/dist/device/cloud/interfaces/index.js +0 -21
  101. package/dist/device/cloud/services/CloudDevice.service.d.ts +0 -5
  102. package/dist/device/cloud/services/CloudDevice.service.js +0 -9
  103. package/dist/device/cloud/services/Connection.service.d.ts +0 -8
  104. package/dist/device/cloud/services/Connection.service.js +0 -6
  105. package/dist/device/cloud/services/Device.service.d.ts +0 -39
  106. package/dist/device/cloud/services/Device.service.js +0 -9
  107. package/dist/device/cloud/services/DeviceCloudService.d.ts +0 -42
  108. package/dist/device/cloud/services/DeviceCloudService.js +0 -59
  109. package/dist/device/cloud/services/DeviceHub.service.d.ts +0 -3
  110. package/dist/device/cloud/services/DeviceHub.service.js +0 -6
  111. package/dist/device/cloud/services/Hub.service.d.ts +0 -25
  112. package/dist/device/cloud/services/Hub.service.js +0 -9
  113. package/dist/device/cloud/services/SmartThingsDeviceService.d.ts +0 -38
  114. package/dist/device/cloud/services/SmartThingsDeviceService.js +0 -52
  115. package/dist/device/cloud/services/index.d.ts +0 -2
  116. package/dist/device/cloud/services/index.js +0 -18
  117. package/dist/device/cloud/types.d.ts +0 -52
  118. package/dist/device/cloud/types.js +0 -15
  119. package/dist/device/index.d.ts +0 -4
  120. package/dist/device/index.js +0 -20
  121. package/dist/device/local/entities/AlertBuilder.d.ts +0 -87
  122. package/dist/device/local/entities/AlertBuilder.example.d.ts +0 -11
  123. package/dist/device/local/entities/AlertBuilder.example.js +0 -117
  124. package/dist/device/local/entities/AlertBuilder.js +0 -179
  125. package/dist/device/local/entities/IssueBuilder.d.ts +0 -109
  126. package/dist/device/local/entities/IssueBuilder.example.d.ts +0 -16
  127. package/dist/device/local/entities/IssueBuilder.example.js +0 -196
  128. package/dist/device/local/entities/IssueBuilder.js +0 -237
  129. package/dist/device/local/entities/index.d.ts +0 -2
  130. package/dist/device/local/entities/index.js +0 -7
  131. package/dist/device/local/events/EventHandler.d.ts +0 -11
  132. package/dist/device/local/events/EventHandler.js +0 -86
  133. package/dist/device/local/events/Events.d.ts +0 -54
  134. package/dist/device/local/events/Events.js +0 -57
  135. package/dist/device/local/events/index.d.ts +0 -2
  136. package/dist/device/local/events/index.js +0 -7
  137. package/dist/device/local/handler/EventHandler.d.ts +0 -7
  138. package/dist/device/local/handler/EventHandler.js +0 -44
  139. package/dist/device/local/interface.d.ts +0 -0
  140. package/dist/device/local/interface.js +0 -1
  141. package/dist/device/local/interfaces/IConnection.d.ts +0 -26
  142. package/dist/device/local/interfaces/IConnection.js +0 -14
  143. package/dist/device/local/interfaces/IDevice.d.ts +0 -68
  144. package/dist/device/local/interfaces/IDevice.js +0 -10
  145. package/dist/device/local/interfaces/IDtDevice.d.ts +0 -16
  146. package/dist/device/local/interfaces/IDtDevice.js +0 -2
  147. package/dist/device/local/interfaces/IHub.d.ts +0 -46
  148. package/dist/device/local/interfaces/IHub.js +0 -2
  149. package/dist/device/local/interfaces/IProperty.d.ts +0 -29
  150. package/dist/device/local/interfaces/IProperty.js +0 -2
  151. package/dist/device/local/interfaces/ISchedule.d.ts +0 -25
  152. package/dist/device/local/interfaces/ISchedule.js +0 -2
  153. package/dist/device/local/interfaces/index.d.ts +0 -3
  154. package/dist/device/local/interfaces/index.js +0 -19
  155. package/dist/device/local/models/Alert.model.d.ts +0 -28
  156. package/dist/device/local/models/Alert.model.js +0 -222
  157. package/dist/device/local/models/Issue.model.d.ts +0 -28
  158. package/dist/device/local/models/Issue.model.js +0 -260
  159. package/dist/device/local/repository/Alert.repository.d.ts +0 -106
  160. package/dist/device/local/repository/Alert.repository.js +0 -374
  161. package/dist/device/local/repository/Connection.repository.d.ts +0 -8
  162. package/dist/device/local/repository/Connection.repository.js +0 -92
  163. package/dist/device/local/repository/Device.repository.d.ts +0 -30
  164. package/dist/device/local/repository/Device.repository.js +0 -325
  165. package/dist/device/local/repository/Hub.repository.d.ts +0 -13
  166. package/dist/device/local/repository/Hub.repository.js +0 -139
  167. package/dist/device/local/repository/Issue.repository.d.ts +0 -113
  168. package/dist/device/local/repository/Issue.repository.js +0 -401
  169. package/dist/device/local/repository/Property.repository.d.ts +0 -8
  170. package/dist/device/local/repository/Property.repository.js +0 -95
  171. package/dist/device/local/repository/Schedule.repository.d.ts +0 -9
  172. package/dist/device/local/repository/Schedule.repository.js +0 -109
  173. package/dist/device/local/services/Alert.service.d.ts +0 -137
  174. package/dist/device/local/services/Alert.service.js +0 -475
  175. package/dist/device/local/services/AlertService.example.d.ts +0 -55
  176. package/dist/device/local/services/AlertService.example.js +0 -148
  177. package/dist/device/local/services/Connection.service.d.ts +0 -8
  178. package/dist/device/local/services/Connection.service.js +0 -32
  179. package/dist/device/local/services/Device.service.d.ts +0 -40
  180. package/dist/device/local/services/Device.service.js +0 -391
  181. package/dist/device/local/services/DeviceHub.service.d.ts +0 -11
  182. package/dist/device/local/services/DeviceHub.service.js +0 -40
  183. package/dist/device/local/services/Hub.service.d.ts +0 -12
  184. package/dist/device/local/services/Hub.service.js +0 -107
  185. package/dist/device/local/services/Issue.service.d.ts +0 -168
  186. package/dist/device/local/services/Issue.service.js +0 -642
  187. package/dist/device/local/services/IssueService.example.d.ts +0 -68
  188. package/dist/device/local/services/IssueService.example.js +0 -177
  189. package/dist/device/local/services/Property.service.d.ts +0 -8
  190. package/dist/device/local/services/Property.service.js +0 -36
  191. package/dist/device/local/services/Schedule.service.d.ts +0 -9
  192. package/dist/device/local/services/Schedule.service.js +0 -26
  193. package/dist/device/local/services/index.d.ts +0 -3
  194. package/dist/device/local/services/index.js +0 -19
  195. package/dist/pms/IPms.d.ts +0 -6
  196. package/dist/pms/IPms.js +0 -10
  197. package/dist/pms/index.d.ts +0 -1
  198. package/dist/pms/index.js +0 -17
  199. package/dist/property/IProperty.d.ts +0 -29
  200. package/dist/property/IProperty.js +0 -2
  201. package/dist/property/Property.repository.d.ts +0 -8
  202. package/dist/property/Property.repository.js +0 -109
  203. package/dist/property/Property.service.d.ts +0 -8
  204. package/dist/property/Property.service.js +0 -124
  205. package/dist/property/index.d.ts +0 -2
  206. package/dist/property/index.js +0 -18
  207. package/dist/queue/interfaces/IHttpRequestJob.d.ts +0 -9
  208. package/dist/queue/interfaces/IHttpRequestJob.js +0 -2
  209. package/dist/types/alert.types.d.ts +0 -57
  210. package/dist/types/alert.types.js +0 -22
  211. package/dist/types/config.types.d.ts +0 -19
  212. package/dist/types/config.types.js +0 -2
  213. package/dist/types/index.d.ts +0 -3
  214. package/dist/types/index.js +0 -19
  215. package/dist/types/issue.types.d.ts +0 -90
  216. package/dist/types/issue.types.js +0 -40
  217. package/dist/utils/http-utils.d.ts +0 -13
  218. package/dist/utils/http-utils.js +0 -117
@@ -52,8 +52,11 @@ let GuestRepository = (() => {
52
52
  }
53
53
  async getGuest(guestId) {
54
54
  try {
55
- const guest = await this.pmsPostgres.query(`SELECT * FROM dt_guests WHERE "id" = $1`, [guestId]);
56
- return guest.rows[0];
55
+ const guest = await this.pmsPostgres.query(`SELECT * FROM dt_guest WHERE "id" = $1`, [guestId]);
56
+ if (guest.rows.length > 0) {
57
+ return guest.rows[0];
58
+ }
59
+ return null;
57
60
  }
58
61
  catch (error) {
59
62
  console.error("Error in getGuest:", error);
@@ -2,5 +2,5 @@ import { IGuest } from "./IGuest";
2
2
  export declare class GuestService {
3
3
  private readonly guestRepository;
4
4
  constructor();
5
- getGuest(guestId: string): Promise<IGuest>;
5
+ getGuest(guestId: string): Promise<IGuest | null>;
6
6
  }
@@ -88,7 +88,10 @@ let GuestService = (() => {
88
88
  if (!guestId) {
89
89
  throw new Error("Guest ID is required");
90
90
  }
91
- return await this.guestRepository.getGuest(guestId);
91
+ const guest = await this.guestRepository.getGuest(guestId);
92
+ if (!guest)
93
+ return null;
94
+ return guest;
92
95
  }
93
96
  };
94
97
  __setFunctionName(_classThis, "GuestService");
@@ -2,5 +2,5 @@ import { ISchedule } from "./ISchedule";
2
2
  export declare class ScheduleRepository {
3
3
  private readonly pmsPostgres;
4
4
  constructor();
5
- getSchedule(scheduleId: string): Promise<ISchedule>;
5
+ getSchedule(scheduleId: string): Promise<ISchedule | null>;
6
6
  }
@@ -52,8 +52,11 @@ let ScheduleRepository = (() => {
52
52
  }
53
53
  async getSchedule(scheduleId) {
54
54
  try {
55
- const schedule = await this.pmsPostgres.query(`SELECT * FROM dt_schedules WHERE "id" = $1`, [scheduleId]);
56
- return schedule.rows[0];
55
+ const schedule = await this.pmsPostgres.query(`SELECT * FROM dt_schedule WHERE "id" = $1`, [scheduleId]);
56
+ if (schedule.rows.length > 0) {
57
+ return schedule.rows[0];
58
+ }
59
+ return null;
57
60
  }
58
61
  catch (error) {
59
62
  console.error("Error in getSchedule:", error);
@@ -2,5 +2,5 @@ import { ISchedule } from "./ISchedule";
2
2
  export declare class ScheduleService {
3
3
  private readonly scheduleRepository;
4
4
  constructor();
5
- getSchedule(scheduleId: string): Promise<ISchedule>;
5
+ getSchedule(scheduleId: string): Promise<ISchedule | null>;
6
6
  }
@@ -88,7 +88,10 @@ let ScheduleService = (() => {
88
88
  if (!scheduleId) {
89
89
  throw new Error("Schedule ID is required");
90
90
  }
91
- return await this.scheduleRepository.getSchedule(scheduleId);
91
+ const schedule = await this.scheduleRepository.getSchedule(scheduleId);
92
+ if (!schedule)
93
+ return null;
94
+ return schedule;
92
95
  }
93
96
  };
94
97
  __setFunctionName(_classThis, "ScheduleService");
@@ -52,7 +52,10 @@ let UserRepository = (() => {
52
52
  }
53
53
  async getUser(userId) {
54
54
  const user = await this.postgres.query(`SELECT * FROM dt_users WHERE "id" = $1`, [userId]);
55
- return user.rows[0];
55
+ if (user.rows.length > 0) {
56
+ return user.rows[0];
57
+ }
58
+ return null;
56
59
  }
57
60
  };
58
61
  __setFunctionName(_classThis, "UserRepository");
@@ -2,5 +2,5 @@ import { IUser } from "./IUser";
2
2
  export declare class UserService {
3
3
  private readonly userRepository;
4
4
  constructor();
5
- getUser(userId: string): Promise<IUser>;
5
+ getUser(userId: string): Promise<IUser | null>;
6
6
  }
@@ -87,7 +87,10 @@ let UserService = (() => {
87
87
  if (!userId) {
88
88
  throw new Error("User ID is required");
89
89
  }
90
- return await this.userRepository.getUser(userId);
90
+ const user = await this.userRepository.getUser(userId);
91
+ if (!user)
92
+ return null;
93
+ return user;
91
94
  }
92
95
  };
93
96
  __setFunctionName(_classThis, "UserService");
@@ -88,7 +88,10 @@ let ZoneService = (() => {
88
88
  if (!zoneId) {
89
89
  throw new Error("Zone ID is required");
90
90
  }
91
- return await this.zoneRepository.getZone(zoneId);
91
+ const zone = await this.zoneRepository.getZone(zoneId);
92
+ if (!zone)
93
+ return null;
94
+ return zone;
92
95
  }
93
96
  };
94
97
  __setFunctionName(_classThis, "ZoneService");
@@ -14,7 +14,7 @@ interface IIssueModel extends Model<IIssueDocument, {}, IIssueMethods> {
14
14
  findOverdue(includeDeleted?: boolean): Promise<IIssueDocument[]>;
15
15
  findUpcoming(days?: number, includeDeleted?: boolean): Promise<IIssueDocument[]>;
16
16
  }
17
- declare const IssueSchema: mongoose.Schema<IIssueDocument, IIssueModel, IIssueMethods, {}, {}, {}, mongoose.DefaultSchemaOptions, IIssueDocument, mongoose.Document<unknown, {}, mongoose.FlatRecord<IIssueDocument>, {}> & Omit<mongoose.FlatRecord<IIssueDocument> & Required<{
17
+ declare const IssueSchema: mongoose.Schema<IIssueDocument, IIssueModel, IIssueMethods, {}, {}, {}, mongoose.DefaultSchemaOptions, IIssueDocument, mongoose.Document<unknown, {}, mongoose.FlatRecord<IIssueDocument>, {}, mongoose.ResolveSchemaOptions<mongoose.DefaultSchemaOptions>> & Omit<mongoose.FlatRecord<IIssueDocument> & Required<{
18
18
  _id: string;
19
19
  }> & {
20
20
  __v: number;
@@ -61,6 +61,10 @@ const IssueSchema = new mongoose_1.Schema({
61
61
  required: false,
62
62
  index: true,
63
63
  },
64
+ zoneName: {
65
+ type: String,
66
+ required: false,
67
+ },
64
68
  title: {
65
69
  type: String,
66
70
  required: true,
@@ -6,34 +6,30 @@ import { IDevice } from "../entities/device/local/interfaces";
6
6
  export declare class IssueService {
7
7
  private readonly issueRepository;
8
8
  constructor();
9
- /**
10
- * Create a readiness issue using IssueBuilder
11
- */
12
- createReadinessIssue(data: CreateIssueData): Promise<IIssueDocument>;
13
9
  /**
14
10
  * Create an operations issue using IssueBuilder
15
11
  */
16
- createOperationsIssue(data: CreateIssueData): Promise<IIssueDocument>;
12
+ createOperationsIssue(data: CreateIssueData): Promise<IIssueDocument | null>;
17
13
  /**
18
14
  * Create a security issue using IssueBuilder
19
15
  */
20
- createSecurityIssue(data: CreateIssueData): Promise<IIssueDocument>;
16
+ createSecurityIssue(data: CreateIssueData): Promise<IIssueDocument | null>;
21
17
  /**
22
18
  * Create an energy issue using IssueBuilder
23
19
  */
24
- createEnergyIssue(data: CreateIssueData): Promise<IIssueDocument>;
20
+ createEnergyIssue(data: CreateIssueData): Promise<IIssueDocument | null>;
25
21
  /**
26
22
  * Create a device-specific issue using IssueBuilder
27
23
  */
28
- createDeviceIssue(data: CreateIssueData): Promise<IIssueDocument>;
24
+ createDeviceIssue(data: CreateIssueData): Promise<IIssueDocument | null>;
29
25
  /**
30
26
  * Create a hub-specific issue using IssueBuilder
31
27
  */
32
- createHubIssue(data: CreateIssueData): Promise<IIssueDocument>;
28
+ createHubIssue(data: CreateIssueData): Promise<IIssueDocument | null>;
33
29
  /**
34
30
  * Create a user-specific issue using IssueBuilder
35
31
  */
36
- createUserIssue(data: CreateIssueData): Promise<IIssueDocument>;
32
+ createUserIssue(data: CreateIssueData): Promise<IIssueDocument | null>;
37
33
  createCloudAccountAuthorizationIssue(data: {
38
34
  propertyId: string;
39
35
  entityId: string;
@@ -42,33 +38,33 @@ export declare class IssueService {
42
38
  description: string;
43
39
  createdBy: string;
44
40
  type: IssueType;
45
- }): Promise<IIssueDocument>;
41
+ }): Promise<IIssueDocument | null>;
46
42
  /**
47
43
  * Create issue for device going offline longer than baseline
48
44
  */
49
- createDeviceOfflineIssue(device: IDevice, source: Source, reason?: string): Promise<IIssueDocument>;
50
- createDoorLeftOpenIssue(device: IDevice, source: Source, reason?: string): Promise<IIssueDocument>;
45
+ createDeviceOfflineIssue(device: IDevice, source: Source, reason?: string): Promise<IIssueDocument | null>;
46
+ createDoorLeftOpenIssue(device: IDevice, source: Source, reason?: string): Promise<IIssueDocument | null>;
51
47
  /**
52
48
  * Create issue for device battery level below threshold (READINESS + OPERATIONAL + ENERGY)
53
49
  */
54
- createDeviceBatteryIssue(device: IDevice, batteryLevel: number, threshold: number, source: Source): Promise<IIssueDocument>;
50
+ createDeviceBatteryIssue(device: IDevice, batteryLevel: number, threshold: number, priority: IssuePriority, source: Source): Promise<IIssueDocument | null>;
55
51
  /**
56
52
  * Create issue for device malfunction (jammed or not accepting codes) (READINESS + OPERATIONAL)
57
53
  */
58
- createDeviceMalfunctionIssue(device: IDevice, source: Source, reason?: string): Promise<IIssueDocument>;
54
+ createDeviceMalfunctionIssue(device: IDevice, source: Source, reason?: string): Promise<IIssueDocument | null>;
59
55
  /**
60
56
  * Create a maintenance issue using IssueBuilder
61
57
  */
62
- createMaintenanceIssue(data: CreateIssueData): Promise<IIssueDocument>;
58
+ createMaintenanceIssue(data: CreateIssueData): Promise<IIssueDocument | null>;
63
59
  /**
64
60
  * Create a high priority issue using IssueBuilder
65
61
  */
66
- createHighPriorityIssue(data: CreateIssueData): Promise<IIssueDocument>;
62
+ createHighPriorityIssue(data: CreateIssueData): Promise<IIssueDocument | null>;
67
63
  /**
68
64
  * Create a new issue with business logic validation
69
65
  * Accepts either a CreateIssueData object or an IssueBuilder instance
70
66
  */
71
- createIssue(issueData: CreateIssueData | IssueBuilder): Promise<IIssueDocument>;
67
+ createIssue(issueData: CreateIssueData | IssueBuilder): Promise<IIssueDocument | null>;
72
68
  /**
73
69
  * Get issue by ID with business logic
74
70
  */
@@ -117,6 +113,11 @@ export declare class IssueService {
117
113
  * Unassign an issue
118
114
  */
119
115
  unassignIssue(id: string, unassignedBy: string): Promise<IIssueDocument | null>;
116
+ /**
117
+ * Cancel/Close/Resolve an issue based on query
118
+ * This method will find an issue matching the query and update its status
119
+ */
120
+ performIssueAction(query: IIssueQuery, action: "cancel" | "close" | "resolve" | "ignore" | "in_progress" | "on_hold", updatedBy: string): Promise<IIssueDocument | null>;
120
121
  /**
121
122
  * Get issues assigned to a user with business logic
122
123
  */
@@ -77,7 +77,11 @@ const Issue_repository_1 = require("./Issue.repository");
77
77
  const Issue_model_1 = require("./Issue.model");
78
78
  const issue_types_1 = require("./issue.types");
79
79
  const IssueBuilder_1 = require("./IssueBuilder");
80
+ const Service_1 = require("../constants/Service");
80
81
  const Admin_service_1 = require("../entities/admin/Admin.service");
82
+ const audit_1 = require("../audit");
83
+ const constants_1 = require("../constants");
84
+ const dt_pub_sub_1 = require("dt-pub-sub");
81
85
  let IssueService = (() => {
82
86
  let _classDecorators = [(0, typedi_1.Service)()];
83
87
  let _classDescriptor;
@@ -87,29 +91,6 @@ let IssueService = (() => {
87
91
  constructor() {
88
92
  this.issueRepository = typedi_1.default.get(Issue_repository_1.IssueRepository);
89
93
  }
90
- /**
91
- * Create a readiness issue using IssueBuilder
92
- */
93
- async createReadinessIssue(data) {
94
- const issueBuilder = IssueBuilder_1.IssueBuilder.createReadinessIssue()
95
- .setPropertyId(data.propertyId)
96
- .setTitle(data.title)
97
- .setDescription(data.description)
98
- .setCreatedBy(data.createdBy);
99
- if (data.entityId)
100
- issueBuilder.setEntityId(data.entityId);
101
- if (data.entityType)
102
- issueBuilder.setEntityType(data.entityType);
103
- if (data.assignedTo)
104
- issueBuilder.setAssignedTo(data.assignedTo);
105
- if (data.dueDate)
106
- issueBuilder.setDueDate(data.dueDate);
107
- if (data.zoneId)
108
- issueBuilder.setZoneId(data.zoneId);
109
- if (data.type)
110
- issueBuilder.setType(data.type);
111
- return await this.createIssue(issueBuilder);
112
- }
113
94
  /**
114
95
  * Create an operations issue using IssueBuilder
115
96
  */
@@ -257,7 +238,7 @@ let IssueService = (() => {
257
238
  propertyId: device.propertyId,
258
239
  zoneId: device.zoneId,
259
240
  title: "Device Offline - Requires Attention",
260
- description: `${device.name} has been offline for longer than the threshold time. ${reason ? `Reason: ${reason}` : ""}.`,
241
+ description: `${device.name} has been offline for longer than the threshold time. ${reason ? `Reason: ${reason}.` : ""}`,
261
242
  createdBy: source,
262
243
  category: issue_types_1.IssuesCategory.OPERATIONS,
263
244
  priority: issue_types_1.IssuePriority.CRITICAL,
@@ -273,7 +254,7 @@ let IssueService = (() => {
273
254
  propertyId: device.propertyId,
274
255
  zoneId: device.zoneId,
275
256
  title: "Door Left Open - Requires Attention",
276
- description: `${zone?.name} has a door left open, for more than 10 minutes. ${reason ? `Reason: ${reason}` : ""}.`,
257
+ description: `${zone?.name} has a door left open, for more than 10 minutes. ${reason ? `Reason: ${reason}.` : ""}`,
277
258
  createdBy: source,
278
259
  category: issue_types_1.IssuesCategory.SECURITY,
279
260
  priority: issue_types_1.IssuePriority.HIGH,
@@ -283,7 +264,7 @@ let IssueService = (() => {
283
264
  /**
284
265
  * Create issue for device battery level below threshold (READINESS + OPERATIONAL + ENERGY)
285
266
  */
286
- async createDeviceBatteryIssue(device, batteryLevel, threshold, source) {
267
+ async createDeviceBatteryIssue(device, batteryLevel, threshold, priority, source) {
287
268
  return await this.createDeviceIssue({
288
269
  entityId: device.deviceId,
289
270
  entityType: issue_types_1.EntityType.DEVICE,
@@ -294,7 +275,7 @@ let IssueService = (() => {
294
275
  description: `${device.name} battery level is ${batteryLevel}%, which is below the property threshold of ${threshold}%.`,
295
276
  createdBy: source,
296
277
  category: issue_types_1.IssuesCategory.ENERGY,
297
- priority: issue_types_1.IssuePriority.CRITICAL,
278
+ priority: priority,
298
279
  type: issue_types_1.IssueType.BATTERY_LOW,
299
280
  });
300
281
  }
@@ -309,7 +290,7 @@ let IssueService = (() => {
309
290
  propertyId: device.propertyId,
310
291
  zoneId: device.zoneId,
311
292
  title: `Device Malfunction - Requires Attention`,
312
- description: `${device.name} is malfunctioning. ${reason ? `Reason: ${reason}` : ""}.`,
293
+ description: `${device.name} is malfunctioning. ${reason ? `Reason: ${reason}.` : ""}`,
313
294
  createdBy: source,
314
295
  category: issue_types_1.IssuesCategory.OPERATIONS,
315
296
  priority: issue_types_1.IssuePriority.HIGH,
@@ -353,26 +334,88 @@ let IssueService = (() => {
353
334
  * Accepts either a CreateIssueData object or an IssueBuilder instance
354
335
  */
355
336
  async createIssue(issueData) {
356
- let processedIssueData;
357
- // Handle IssueBuilder instance
358
- if (issueData instanceof IssueBuilder_1.IssueBuilder) {
359
- processedIssueData = issueData.build();
360
- }
361
- else {
362
- processedIssueData = issueData;
363
- }
364
- // Business logic: Validate issue data
365
- this.validateIssueData(processedIssueData);
366
- // Business logic: Set default priority if not provided
367
- if (!processedIssueData.priority) {
368
- processedIssueData.priority = this.determineDefaultPriority(processedIssueData.category);
369
- }
370
- // Business logic: Validate due date is in the future
371
- if (processedIssueData.dueDate &&
372
- processedIssueData.dueDate <= new Date()) {
373
- throw new Error("Due date must be in the future");
337
+ try {
338
+ let processedIssueData;
339
+ // Handle IssueBuilder instance
340
+ if (issueData instanceof IssueBuilder_1.IssueBuilder) {
341
+ processedIssueData = issueData.build();
342
+ }
343
+ else {
344
+ processedIssueData = issueData;
345
+ }
346
+ // Business logic: Validate issue data
347
+ this.validateIssueData(processedIssueData);
348
+ // Business logic: Set default priority if not provided
349
+ if (!processedIssueData.priority) {
350
+ processedIssueData.priority = this.determineDefaultPriority(processedIssueData.category);
351
+ }
352
+ // Business logic: Validate due date is in the future
353
+ if (processedIssueData.dueDate &&
354
+ processedIssueData.dueDate <= new Date()) {
355
+ throw new Error("Due date must be in the future");
356
+ }
357
+ if (processedIssueData?.zoneId && !processedIssueData?.zoneName) {
358
+ const zone = await typedi_1.default.get(Admin_service_1.AdminService).getZone(processedIssueData.zoneId);
359
+ processedIssueData.zoneName = zone?.name || "";
360
+ }
361
+ const existingIssue = await this.query({
362
+ propertyId: processedIssueData.propertyId,
363
+ zoneId: processedIssueData.zoneId,
364
+ entityId: processedIssueData.entityId,
365
+ entityType: processedIssueData.entityType,
366
+ entitySubType: processedIssueData.entitySubType,
367
+ type: processedIssueData.type,
368
+ });
369
+ if (existingIssue.length > 0) {
370
+ await (0, audit_1.pushAudit)({
371
+ auditType: constants_1.DT_EVENT_TYPES.ISSUE.CREATE.SKIPPED,
372
+ auditData: {
373
+ reason: "Issue already exists",
374
+ propertyId: processedIssueData.propertyId,
375
+ entityId: processedIssueData.entityId,
376
+ entityType: processedIssueData.entityType,
377
+ entitySubType: processedIssueData.entitySubType,
378
+ type: processedIssueData.type,
379
+ resource: audit_1.Resource.ISSUE,
380
+ source: processedIssueData.createdBy,
381
+ },
382
+ });
383
+ return null;
384
+ }
385
+ const issue = await this.issueRepository.create(processedIssueData);
386
+ await (0, audit_1.pushAudit)({
387
+ auditType: constants_1.DT_EVENT_TYPES.ISSUE.CREATE.SUCCESS,
388
+ auditData: {
389
+ resource: audit_1.Resource.ISSUE,
390
+ source: Service_1.Source.USER,
391
+ propertyId: processedIssueData.propertyId,
392
+ zoneId: processedIssueData.zoneId,
393
+ entityId: processedIssueData.entityId,
394
+ entityType: processedIssueData.entityType,
395
+ entitySubType: processedIssueData.entitySubType,
396
+ type: processedIssueData.type,
397
+ createdBy: processedIssueData.createdBy,
398
+ createdAt: new Date(),
399
+ },
400
+ });
401
+ await dt_pub_sub_1.eventDispatcher.publishEvent(constants_1.DT_EVENT_TYPES.ISSUE.CREATE.SUCCESS, issue, "dt-common-device");
402
+ return issue;
403
+ }
404
+ catch (error) {
405
+ await (0, audit_1.pushAudit)({
406
+ auditType: constants_1.DT_EVENT_TYPES.ISSUE.CREATE.FAILED,
407
+ auditData: {
408
+ resource: audit_1.Resource.ISSUE,
409
+ source: Service_1.Source.USER,
410
+ propertyId: issueData?.propertyId || "",
411
+ zoneId: issueData?.zoneId || "",
412
+ errorMessage: error.message,
413
+ error: error,
414
+ createdBy: issueData?.createdBy || "",
415
+ },
416
+ });
417
+ throw error;
374
418
  }
375
- return await this.issueRepository.create(processedIssueData);
376
419
  }
377
420
  /**
378
421
  * Get issue by ID with business logic
@@ -585,6 +628,106 @@ let IssueService = (() => {
585
628
  issueModel.unassign(unassignedBy);
586
629
  return await issueModel.save();
587
630
  }
631
+ /**
632
+ * Cancel/Close/Resolve an issue based on query
633
+ * This method will find an issue matching the query and update its status
634
+ */
635
+ async performIssueAction(query, action, updatedBy) {
636
+ try {
637
+ if (!updatedBy) {
638
+ throw new Error("Updated by user is required");
639
+ }
640
+ // Find the issue based on the query
641
+ const issues = await this.query(query);
642
+ if (issues.length === 0) {
643
+ return null; // No issue found matching the query
644
+ }
645
+ if (issues.length > 1) {
646
+ throw new Error(`Multiple issues found matching the query. Please provide more specific criteria.`);
647
+ }
648
+ const issue = issues[0];
649
+ // Check if issue can be cancelled/closed/resolved
650
+ if (issue.status === issue_types_1.IssueStatus.CANCELLED) {
651
+ throw new Error("Issue is already cancelled");
652
+ }
653
+ if (issue.status === issue_types_1.IssueStatus.CLOSED) {
654
+ throw new Error("Issue is already closed");
655
+ }
656
+ if (issue.status === issue_types_1.IssueStatus.RESOLVED) {
657
+ throw new Error("Issue is already resolved");
658
+ }
659
+ if (issue.status === issue_types_1.IssueStatus.IGNORED) {
660
+ throw new Error("Issue is already ignored");
661
+ }
662
+ // Determine the new status based on the action
663
+ let newStatus;
664
+ let updateData = {
665
+ updatedBy,
666
+ updatedAt: new Date(),
667
+ };
668
+ switch (action) {
669
+ case "in_progress":
670
+ newStatus = issue_types_1.IssueStatus.IN_PROGRESS;
671
+ break;
672
+ case "resolve":
673
+ newStatus = issue_types_1.IssueStatus.RESOLVED;
674
+ updateData.resolvedAt = new Date();
675
+ break;
676
+ case "close":
677
+ newStatus = issue_types_1.IssueStatus.CLOSED;
678
+ break;
679
+ case "cancel":
680
+ newStatus = issue_types_1.IssueStatus.CANCELLED;
681
+ break;
682
+ case "on_hold":
683
+ newStatus = issue_types_1.IssueStatus.ON_HOLD;
684
+ break;
685
+ case "ignore":
686
+ newStatus = issue_types_1.IssueStatus.IGNORED;
687
+ break;
688
+ default:
689
+ throw new Error("Invalid action. Must be 'cancel', 'close', or 'resolve'");
690
+ }
691
+ updateData.status = newStatus;
692
+ // Update the issue
693
+ const updatedIssue = await this.updateIssue(issue._id, updateData);
694
+ if (updatedIssue) {
695
+ // Log the action for audit purposes
696
+ console.log(`Issue ${issue._id} has been ${action}ed by ${updatedBy}`);
697
+ await (0, audit_1.pushAudit)({
698
+ auditType: constants_1.DT_EVENT_TYPES.ISSUE.UPDATE.SUCCESS,
699
+ auditData: {
700
+ resource: audit_1.Resource.ISSUE,
701
+ source: Service_1.Source.USER,
702
+ propertyId: issue.propertyId,
703
+ zoneId: issue.zoneId,
704
+ oldStatus: issue.status,
705
+ newStatus,
706
+ action,
707
+ updatedBy,
708
+ updatedAt: new Date(),
709
+ },
710
+ });
711
+ }
712
+ return updatedIssue;
713
+ }
714
+ catch (error) {
715
+ await (0, audit_1.pushAudit)({
716
+ auditType: constants_1.DT_EVENT_TYPES.ISSUE.UPDATE.FAILED,
717
+ auditData: {
718
+ resource: audit_1.Resource.ISSUE,
719
+ source: Service_1.Source.USER,
720
+ propertyId: query.propertyId || "",
721
+ zoneId: query.zoneId || "",
722
+ errorMessage: error.message,
723
+ error: error,
724
+ updatedBy,
725
+ updatedAt: new Date(),
726
+ },
727
+ });
728
+ throw error;
729
+ }
730
+ }
588
731
  /**
589
732
  * Get issues assigned to a user with business logic
590
733
  */
@@ -736,7 +879,6 @@ let IssueService = (() => {
736
879
  determineDefaultPriority(category) {
737
880
  // Business logic: Determine default priority based on category
738
881
  const categoryPriorities = {
739
- [issue_types_1.IssuesCategory.READINESS]: issue_types_1.IssuePriority.LOW,
740
882
  [issue_types_1.IssuesCategory.OPERATIONS]: issue_types_1.IssuePriority.HIGH,
741
883
  [issue_types_1.IssuesCategory.SECURITY]: issue_types_1.IssuePriority.CRITICAL,
742
884
  [issue_types_1.IssuesCategory.ENERGY]: issue_types_1.IssuePriority.HIGH,
@@ -87,10 +87,6 @@ export declare class IssueBuilder {
87
87
  * Resets the builder to its initial state
88
88
  */
89
89
  reset(): this;
90
- /**
91
- * Creates a new builder instance with predefined values for common issue types
92
- */
93
- static createReadinessIssue(): IssueBuilder;
94
90
  static createOperationsIssue(): IssueBuilder;
95
91
  static createSecurityIssue(): IssueBuilder;
96
92
  static createEnergyIssue(): IssueBuilder;
@@ -182,14 +182,6 @@ class IssueBuilder {
182
182
  this.data = {};
183
183
  return this;
184
184
  }
185
- /**
186
- * Creates a new builder instance with predefined values for common issue types
187
- */
188
- static createReadinessIssue() {
189
- return new IssueBuilder()
190
- .setCategory(issue_types_1.IssuesCategory.READINESS)
191
- .setPriority(issue_types_1.IssuePriority.LOW);
192
- }
193
185
  static createOperationsIssue() {
194
186
  return new IssueBuilder()
195
187
  .setCategory(issue_types_1.IssuesCategory.OPERATIONS)
@@ -255,7 +247,7 @@ class IssueBuilder {
255
247
  */
256
248
  static createMaintenanceIssue(propertyId, type, entityId, entityType) {
257
249
  const builder = new IssueBuilder()
258
- .setCategory(issue_types_1.IssuesCategory.READINESS)
250
+ .setCategory(issue_types_1.IssuesCategory.OPERATIONS)
259
251
  .setPropertyId(propertyId)
260
252
  .setType(type)
261
253
  .setPriority(issue_types_1.IssuePriority.LOW);
@@ -1,5 +1,4 @@
1
1
  export declare enum IssuesCategory {
2
- READINESS = "READINESS",
3
2
  OPERATIONS = "OPERATIONS",
4
3
  SECURITY = "SECURITY",
5
4
  ENERGY = "ENERGY",
@@ -71,6 +70,7 @@ export interface IssueDocument {
71
70
  category: IssuesCategory;
72
71
  propertyId: string;
73
72
  zoneId?: string;
73
+ zoneName?: string;
74
74
  title: string;
75
75
  description: string;
76
76
  entityId?: string;
@@ -93,6 +93,7 @@ export interface CreateIssueData {
93
93
  category: IssuesCategory;
94
94
  propertyId: string;
95
95
  zoneId?: string;
96
+ zoneName?: string;
96
97
  title: string;
97
98
  description: string;
98
99
  entityId: string;
@@ -116,6 +117,7 @@ export interface UpdateIssueData {
116
117
  priority?: IssuePriority;
117
118
  assignedTo?: string;
118
119
  updatedBy?: string;
120
+ updatedAt?: Date;
119
121
  resolvedAt?: Date;
120
122
  dueDate?: Date;
121
123
  isDeleted?: boolean;
@@ -127,6 +129,7 @@ export interface AddCommentData {
127
129
  export interface IIssueQuery {
128
130
  propertyId?: string;
129
131
  zoneId?: string;
132
+ zoneName?: string;
130
133
  assignedTo?: string;
131
134
  status?: IssueStatus;
132
135
  priority?: IssuePriority;
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.IssueType = exports.IssuePriority = exports.IssueStatus = exports.EntitySubType = exports.EntityType = exports.IssuesCategory = void 0;
4
4
  var IssuesCategory;
5
5
  (function (IssuesCategory) {
6
- IssuesCategory["READINESS"] = "READINESS";
7
6
  IssuesCategory["OPERATIONS"] = "OPERATIONS";
8
7
  IssuesCategory["SECURITY"] = "SECURITY";
9
8
  IssuesCategory["ENERGY"] = "ENERGY";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dt-common-device",
3
- "version": "7.1.13",
3
+ "version": "7.2.1",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "files": [
@@ -1,7 +0,0 @@
1
- export declare class AdminRepository {
2
- private readonly axiosInstance;
3
- private readonly deviceRepository;
4
- private readonly postgres;
5
- constructor();
6
- getZonesByAccessGroupIds(accessGroupIds: string[]): Promise<any[]>;
7
- }