@spytecgps/nova-orm 1.0.107 → 1.0.109
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/dist/entities/tag.d.ts +1 -0
- package/dist/entities/tag.js +5 -0
- package/dist/entities/tag.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/repositories/deviceStatus/extendedDeviceStatus.d.ts +12 -0
- package/dist/repositories/deviceStatus/extendedDeviceStatus.js +207 -0
- package/dist/repositories/deviceStatus/extendedDeviceStatus.js.map +1 -0
- package/dist/repositories/deviceStatus/getDeviceStatuses.d.ts +2 -3
- package/dist/repositories/deviceStatus/getDeviceStatuses.js +7 -2
- package/dist/repositories/deviceStatus/getDeviceStatuses.js.map +1 -1
- package/dist/repositories/deviceStatus/index.d.ts +2 -3
- package/dist/repositories/deviceStatus/index.js +10 -0
- package/dist/repositories/deviceStatus/index.js.map +1 -1
- package/dist/repositories/liveLinks/getLiveLinkData.js +6 -1
- package/dist/repositories/liveLinks/getLiveLinkData.js.map +1 -1
- package/dist/repositories/tags/index.d.ts +7 -1
- package/dist/repositories/tags/index.js +13 -0
- package/dist/repositories/tags/index.js.map +1 -1
- package/dist/repositories/tags/searchTags.js +5 -0
- package/dist/repositories/tags/searchTags.js.map +1 -1
- package/dist/repositories/tags/searchTagsByUser.d.ts +4 -0
- package/dist/repositories/tags/searchTagsByUser.js +46 -0
- package/dist/repositories/tags/searchTagsByUser.js.map +1 -0
- package/dist/repositories/tags/updateTag.js +1 -0
- package/dist/repositories/tags/updateTag.js.map +1 -1
- package/dist/types/deviceStatus.d.ts +48 -6
- package/dist/types/liveLinks.d.ts +3 -0
- package/dist/types/tag.d.ts +14 -0
- package/dist/types/tag.js +5 -0
- package/dist/types/tag.js.map +1 -1
- package/dist/utils/parsingTools.d.ts +1 -0
- package/dist/utils/parsingTools.js +9 -0
- package/dist/utils/parsingTools.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Device } from '../../entities';
|
|
2
|
+
import { ConnectionStatusInfo, DeviceStatusEntity, DeviceStatusRecord, GetDeviceStatusesParams } from '../../types/deviceStatus';
|
|
3
|
+
import { Logger } from '../../types/logger';
|
|
4
|
+
export declare const getExtendedDeviceStatus: (deviceStatus: DeviceStatusEntity, deviceInfo: Device) => ConnectionStatusInfo[];
|
|
5
|
+
export declare const addOnlineStatus: (deviceStatus: DeviceStatusEntity) => string | undefined;
|
|
6
|
+
export declare const adjustDeviceStatusProperties: (params: GetDeviceStatusesParams) => void;
|
|
7
|
+
export declare const tryExtendDeviceStatus: (params: {
|
|
8
|
+
logger: Logger;
|
|
9
|
+
deviceStatus: DeviceStatusRecord;
|
|
10
|
+
withConnectionStatusInfo?: boolean;
|
|
11
|
+
withOnlineStatus?: boolean;
|
|
12
|
+
}) => void;
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
// threshold since exodus was created start ~ 2019-01-01
|
|
2
|
+
const ALWAYS_ON_THRESHOLD = new Date().getTime() - new Date(2019, 0, 1).getTime();
|
|
3
|
+
const THRESHOLD_24HRS = 24 * 60 * 60 * 1000; //24hrs
|
|
4
|
+
const CELL_THRESHOLD_MS = 300000; // 1000*60*5 // 5mins
|
|
5
|
+
const CELL_STOPPED_THRESHOLD_MS = 10800000; // 200*60*1000 // 200min - 3:20 - 3hr and 20 min
|
|
6
|
+
//add 100% padding for moving reporting frequency
|
|
7
|
+
const PADDING_MOVING = 2;
|
|
8
|
+
//add 20% padding for stopped reporting frequency
|
|
9
|
+
const PADDING_STOPPED = 1.2;
|
|
10
|
+
const HOUR_IN_MS = 60 * 60 * 1000;
|
|
11
|
+
const assetTrackerIdsList = [8, 9, 13, 20, 31, 32];
|
|
12
|
+
// Custom workflow only applies to Device Extanded Status
|
|
13
|
+
/*
|
|
14
|
+
We Had conversations of centralizing this flow .. but it is only consumed by deviceExt status so we only populate here
|
|
15
|
+
*/
|
|
16
|
+
const getConfidenceValue = (dateDiffInMs, thresholdWindowMS) => {
|
|
17
|
+
let confidenceValue = 0;
|
|
18
|
+
if (dateDiffInMs > thresholdWindowMS) {
|
|
19
|
+
confidenceValue = 0;
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
if (dateDiffInMs === 0) {
|
|
23
|
+
confidenceValue = 1;
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
confidenceValue = dateDiffInMs / thresholdWindowMS;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return confidenceValue;
|
|
30
|
+
};
|
|
31
|
+
const isDeviceSettingsCalculationMethod = (deviceInfo) => {
|
|
32
|
+
return !!(deviceInfo?.clientDeviceSetting?.fixedStatus ||
|
|
33
|
+
(deviceInfo.clientDeviceSetting?.movingPingFrequency &&
|
|
34
|
+
deviceInfo.clientDeviceSetting?.movingPingFrequency > 0));
|
|
35
|
+
};
|
|
36
|
+
const getThresholdInMS = (devStatus, deviceInfo) => {
|
|
37
|
+
const { speed, deviceTypeId } = devStatus;
|
|
38
|
+
const isDeviceStopped = Number(speed) < 2;
|
|
39
|
+
if (isDeviceSettingsCalculationMethod(deviceInfo)) {
|
|
40
|
+
//new calculation using device settings
|
|
41
|
+
const { fixedStatus, movingPingFrequency, stoppedPingFrequency, } = deviceInfo.clientDeviceSetting;
|
|
42
|
+
//manual override/ fixed status
|
|
43
|
+
return fixedStatus
|
|
44
|
+
? fixedStatus === 'ON'
|
|
45
|
+
? ALWAYS_ON_THRESHOLD // always on, device status will never be older than this threshold
|
|
46
|
+
: 0
|
|
47
|
+
: isDeviceStopped
|
|
48
|
+
? movingPingFrequency * 1000 * PADDING_STOPPED // value stored in seconds. threshold add 20% to reporting freq
|
|
49
|
+
: stoppedPingFrequency * 1000 * PADDING_MOVING; // value stored in seconds. threshold add 100% to reporting freq (values are smaller add room for delays)
|
|
50
|
+
}
|
|
51
|
+
// old legacy calculation method by deviceType
|
|
52
|
+
switch (deviceTypeId) {
|
|
53
|
+
case 8:
|
|
54
|
+
case 9:
|
|
55
|
+
return THRESHOLD_24HRS; //24hr
|
|
56
|
+
default:
|
|
57
|
+
return isDeviceStopped ? CELL_STOPPED_THRESHOLD_MS : CELL_THRESHOLD_MS;
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
// Extended Statuses
|
|
61
|
+
const deviceStatusCellularNetwork = (devStatus, deviceInfo) => {
|
|
62
|
+
const resp = {
|
|
63
|
+
name: 'cellularNetwork',
|
|
64
|
+
};
|
|
65
|
+
try {
|
|
66
|
+
const thresholdMS = getThresholdInMS(devStatus, deviceInfo);
|
|
67
|
+
// move to helper
|
|
68
|
+
const nowMS = new Date().getTime();
|
|
69
|
+
const thresholdDateMS = nowMS - thresholdMS;
|
|
70
|
+
const created = new Date(devStatus.created);
|
|
71
|
+
const createdMS = created.getTime();
|
|
72
|
+
//connection
|
|
73
|
+
resp.ok = createdMS >= thresholdDateMS;
|
|
74
|
+
resp.msg = `${devStatus.deviceTypeId}`;
|
|
75
|
+
//confidence
|
|
76
|
+
const dateDiffInMs = Math.abs(nowMS - createdMS);
|
|
77
|
+
resp.confidence = getConfidenceValue(dateDiffInMs, thresholdMS);
|
|
78
|
+
}
|
|
79
|
+
catch (err) {
|
|
80
|
+
resp.msg = JSON.stringify(err);
|
|
81
|
+
}
|
|
82
|
+
return resp;
|
|
83
|
+
};
|
|
84
|
+
const deviceStatusGPSNetwork = (devStatus, deviceInfo, cellularNetworkConnected) => {
|
|
85
|
+
const resp = {
|
|
86
|
+
name: 'gpsNetwork',
|
|
87
|
+
};
|
|
88
|
+
try {
|
|
89
|
+
if (!cellularNetworkConnected) {
|
|
90
|
+
// no cellular network, then no gps connection
|
|
91
|
+
resp.ok = false;
|
|
92
|
+
resp.confidence = 1;
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
// there is cellularNetowkr connection, then check if GPS connected
|
|
96
|
+
//const gps:Date = new Date(devStatus.gpsUTCTime)
|
|
97
|
+
// gpsDate format -> "yyyyMMddHHmmss"
|
|
98
|
+
let gpsDateTime = new Date(0); //1970-01-01 very old date
|
|
99
|
+
if (devStatus.gpsUTCTime) {
|
|
100
|
+
const gpsYear = Number(devStatus.gpsUTCTime.substring(0, 4));
|
|
101
|
+
const gpsMonth = Number(devStatus.gpsUTCTime.substring(4, 6)) - 1; // the month is 0-indexed
|
|
102
|
+
const gpsDay = Number(devStatus.gpsUTCTime.substring(6, 8));
|
|
103
|
+
const gpsHour = Number(devStatus.gpsUTCTime.substring(8, 10));
|
|
104
|
+
const gpsMin = Number(devStatus.gpsUTCTime.substring(10, 12));
|
|
105
|
+
const gpsSec = Number(devStatus.gpsUTCTime.substring(12));
|
|
106
|
+
gpsDateTime = new Date(gpsYear, gpsMonth, gpsDay, gpsHour, gpsMin, gpsSec);
|
|
107
|
+
}
|
|
108
|
+
const sendTime = new Date(devStatus.sendTime);
|
|
109
|
+
const thresholdMS = getThresholdInMS(devStatus, deviceInfo);
|
|
110
|
+
const gpsMS = gpsDateTime.getTime();
|
|
111
|
+
const sendMS = sendTime.getTime();
|
|
112
|
+
const diff = Math.abs(sendMS - gpsMS);
|
|
113
|
+
//connection
|
|
114
|
+
resp.ok = diff < thresholdMS;
|
|
115
|
+
//confidence
|
|
116
|
+
resp.confidence = getConfidenceValue(diff, thresholdMS);
|
|
117
|
+
//resp.msg = ` GPS:${gpsDateTime.toISOString()} Send:${sendTime.toISOString()} sendT:${sendTime.getTime()} `
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
catch (err) {
|
|
121
|
+
resp.msg = JSON.stringify(err);
|
|
122
|
+
}
|
|
123
|
+
return resp;
|
|
124
|
+
};
|
|
125
|
+
const deviceStatusBatteryCharge = (devStatus) => {
|
|
126
|
+
const resp = {
|
|
127
|
+
name: 'batteryCharge',
|
|
128
|
+
};
|
|
129
|
+
try {
|
|
130
|
+
const batteryCharge = Number(devStatus.batteryPercentage);
|
|
131
|
+
resp.ok = !!batteryCharge === true;
|
|
132
|
+
resp.confidence = batteryCharge;
|
|
133
|
+
}
|
|
134
|
+
catch (err) {
|
|
135
|
+
resp.msg = JSON.stringify(err);
|
|
136
|
+
}
|
|
137
|
+
return resp;
|
|
138
|
+
};
|
|
139
|
+
export const getExtendedDeviceStatus = (deviceStatus, deviceInfo) => {
|
|
140
|
+
const result = [];
|
|
141
|
+
if (!(deviceStatus && deviceInfo))
|
|
142
|
+
return result;
|
|
143
|
+
// read from config
|
|
144
|
+
const extendedStatus = true;
|
|
145
|
+
const { deviceTypeId } = deviceInfo;
|
|
146
|
+
const validatedStatus = { ...deviceStatus, deviceTypeId };
|
|
147
|
+
//cell network
|
|
148
|
+
if (extendedStatus) {
|
|
149
|
+
//cellular net
|
|
150
|
+
const cellNetworkData = deviceStatusCellularNetwork(validatedStatus, deviceInfo);
|
|
151
|
+
result.push(cellNetworkData);
|
|
152
|
+
//gps net
|
|
153
|
+
const gpsNetworkData = deviceStatusGPSNetwork(validatedStatus, deviceInfo, !!cellNetworkData.ok);
|
|
154
|
+
result.push(gpsNetworkData);
|
|
155
|
+
//battery charge //BatteryCharge, only if it is not undefined, there are devices that do not report battery
|
|
156
|
+
const { batteryPercentage } = validatedStatus;
|
|
157
|
+
if (typeof batteryPercentage !== 'undefined') {
|
|
158
|
+
const batteryChargeData = deviceStatusBatteryCharge(validatedStatus);
|
|
159
|
+
result.push(batteryChargeData);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return result;
|
|
163
|
+
};
|
|
164
|
+
export const addOnlineStatus = (deviceStatus) => {
|
|
165
|
+
let offlineTime = 3.5 * HOUR_IN_MS;
|
|
166
|
+
if (assetTrackerIdsList.some((i) => i == deviceStatus.deviceTypeId)) {
|
|
167
|
+
offlineTime = 25 * HOUR_IN_MS;
|
|
168
|
+
}
|
|
169
|
+
if (deviceStatus?.restFrequency && deviceStatus?.restFrequency * 1000 > offlineTime) {
|
|
170
|
+
offlineTime = deviceStatus.restFrequency * 1000 + HOUR_IN_MS;
|
|
171
|
+
}
|
|
172
|
+
const sendTime = new Date(deviceStatus.sendTime);
|
|
173
|
+
const isOnline = new Date().getTime() - sendTime.getTime() < offlineTime;
|
|
174
|
+
return `${isOnline}`;
|
|
175
|
+
};
|
|
176
|
+
export const adjustDeviceStatusProperties = (params) => {
|
|
177
|
+
if (!params?.projectionOptions?.deviceStatusProperties?.length) {
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
if (params?.projectionOptions?.deviceStatusProperties?.includes('connectionStatus')) {
|
|
181
|
+
params?.projectionOptions?.deviceStatusProperties?.push('deviceTypeId');
|
|
182
|
+
params?.projectionOptions?.deviceStatusProperties?.push('created');
|
|
183
|
+
params?.projectionOptions?.deviceStatusProperties?.push('speed');
|
|
184
|
+
params?.projectionOptions?.deviceStatusProperties?.push('gpsUTCTime');
|
|
185
|
+
params?.projectionOptions?.deviceStatusProperties?.push('sendTime');
|
|
186
|
+
params?.projectionOptions?.deviceStatusProperties?.push('batteryPercentage');
|
|
187
|
+
}
|
|
188
|
+
if (params?.projectionOptions?.deviceStatusProperties?.includes('isOnline')) {
|
|
189
|
+
params?.projectionOptions?.deviceStatusProperties?.push('sendTime');
|
|
190
|
+
params?.projectionOptions?.deviceStatusProperties?.push('restFrequency');
|
|
191
|
+
}
|
|
192
|
+
};
|
|
193
|
+
export const tryExtendDeviceStatus = (params) => {
|
|
194
|
+
const { logger, deviceStatus, withConnectionStatusInfo, withOnlineStatus } = params;
|
|
195
|
+
try {
|
|
196
|
+
if (withConnectionStatusInfo) {
|
|
197
|
+
deviceStatus.data.connectionStatus = getExtendedDeviceStatus(deviceStatus.data, deviceStatus.device);
|
|
198
|
+
}
|
|
199
|
+
if (withOnlineStatus) {
|
|
200
|
+
deviceStatus.data.isOnline = addOnlineStatus(deviceStatus.data);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
catch (err) {
|
|
204
|
+
logger.error(err, 'Error while extending device status properties');
|
|
205
|
+
}
|
|
206
|
+
};
|
|
207
|
+
//# sourceMappingURL=extendedDeviceStatus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extendedDeviceStatus.js","sourceRoot":"","sources":["../../../src/repositories/deviceStatus/extendedDeviceStatus.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { DeviceStatus } from '../../entities/deviceStatus';
|
|
2
1
|
import { NovaDataSource } from '../../novaDataSource';
|
|
3
|
-
import { GetDeviceStatusesParams } from '../../types/deviceStatus';
|
|
2
|
+
import { DeviceStatusRecord, GetDeviceStatusesParams } from '../../types/deviceStatus';
|
|
4
3
|
import { Logger } from '../../types/logger';
|
|
5
|
-
export declare const getDeviceStatuses: (novaDataSource: NovaDataSource, params: GetDeviceStatusesParams, logger: Logger) => Promise<
|
|
4
|
+
export declare const getDeviceStatuses: (novaDataSource: NovaDataSource, params: GetDeviceStatusesParams, logger: Logger) => Promise<DeviceStatusRecord[]>;
|
|
@@ -28,7 +28,10 @@ export const getDeviceStatuses = async (novaDataSource, params, logger) => {
|
|
|
28
28
|
sendTimeMin: params.filters.minSendTime,
|
|
29
29
|
});
|
|
30
30
|
}
|
|
31
|
-
if (params.filters.deviceStatus ||
|
|
31
|
+
if (params.filters.deviceStatus ||
|
|
32
|
+
params.projectionOptions?.withDevice ||
|
|
33
|
+
params.projectionOptions?.deviceStatusProperties?.includes('connectionStatus') ||
|
|
34
|
+
params.projectionOptions?.withConnectionStatus) {
|
|
32
35
|
queryBuilder = queryBuilder.leftJoinAndMapOne('deviceStatus.device', Device, 'device', 'deviceStatus.imei = device.imei and deviceStatus.clientId = device.clientId');
|
|
33
36
|
if (params.filters.deviceStatus) {
|
|
34
37
|
queryBuilder = queryBuilder.andWhere('device.status = :status', {
|
|
@@ -39,7 +42,9 @@ export const getDeviceStatuses = async (novaDataSource, params, logger) => {
|
|
|
39
42
|
if (params.projectionOptions?.withClient) {
|
|
40
43
|
queryBuilder = queryBuilder.leftJoinAndSelect('deviceStatus.client', 'client');
|
|
41
44
|
}
|
|
42
|
-
if (params.projectionOptions?.withClientDeviceSettings
|
|
45
|
+
if (params.projectionOptions?.withClientDeviceSettings ||
|
|
46
|
+
params.projectionOptions?.deviceStatusProperties?.includes('connectionStatus') ||
|
|
47
|
+
params.projectionOptions?.withConnectionStatus) {
|
|
43
48
|
queryBuilder = queryBuilder.leftJoinAndMapOne('deviceStatus.clientDeviceSetting', ClientDeviceSetting, 'clientDeviceSetting', 'deviceStatus.imei = clientDeviceSetting.imei and deviceStatus.clientId = clientDeviceSetting.clientId');
|
|
44
49
|
}
|
|
45
50
|
queryBuilder = queryBuilder
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getDeviceStatuses.js","sourceRoot":"","sources":["../../../src/repositories/deviceStatus/getDeviceStatuses.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAK1D,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EACpC,cAA8B,EAC9B,MAA+B,EAC/B,MAAc,
|
|
1
|
+
{"version":3,"file":"getDeviceStatuses.js","sourceRoot":"","sources":["../../../src/repositories/deviceStatus/getDeviceStatuses.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { GetDeviceStatusesCountParams, GetDeviceStatusesParams, UpsertDeviceStatusesParams } from '../../types/deviceStatus';
|
|
1
|
+
import { DeviceStatusRecord, GetDeviceStatusesCountParams, GetDeviceStatusesParams, UpsertDeviceStatusesParams } from '../../types/deviceStatus';
|
|
3
2
|
import { BaseRepository } from './../baseRepository';
|
|
4
3
|
export declare class DeviceStatusRepository extends BaseRepository {
|
|
5
4
|
/**
|
|
@@ -17,7 +16,7 @@ export declare class DeviceStatusRepository extends BaseRepository {
|
|
|
17
16
|
* - projectionOptions.withClientDeviceSettings: Whether to get the client device settings
|
|
18
17
|
* - projectionOptions.clientDeviceSettingsProperties: The client device settings properties to get
|
|
19
18
|
*/
|
|
20
|
-
getDeviceStatuses(params: GetDeviceStatusesParams): Promise<
|
|
19
|
+
getDeviceStatuses(params: GetDeviceStatusesParams): Promise<DeviceStatusRecord[]>;
|
|
21
20
|
/**
|
|
22
21
|
* Get total count of device statuses based on the filters
|
|
23
22
|
* @param {GetDeviceStatusesCountParams} params containing information to get device statuses count
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { NovaDataSource } from '../../novaDataSource';
|
|
2
2
|
import { BaseRepository } from './../baseRepository';
|
|
3
|
+
import { adjustDeviceStatusProperties, tryExtendDeviceStatus } from './extendedDeviceStatus';
|
|
3
4
|
import { getDeviceStatuses } from './getDeviceStatuses';
|
|
4
5
|
import { getDeviceStatusesCount } from './getDeviceStatusesCount';
|
|
5
6
|
import { upsertDeviceStatuses } from './upsertDeviceStatuses';
|
|
@@ -22,7 +23,16 @@ export class DeviceStatusRepository extends BaseRepository {
|
|
|
22
23
|
async getDeviceStatuses(params) {
|
|
23
24
|
this.logger.trace(params, 'DeviceStatusRepository::getDeviceStatus started with params');
|
|
24
25
|
const novaDataSource = new NovaDataSource(this.novaDataSourceConfig, this.logger, this.replicaNovaDataSourceConfig);
|
|
26
|
+
adjustDeviceStatusProperties(params);
|
|
25
27
|
const result = await getDeviceStatuses(novaDataSource, params, this.logger);
|
|
28
|
+
result?.forEach(deviceStatus => tryExtendDeviceStatus({
|
|
29
|
+
logger: this.logger,
|
|
30
|
+
deviceStatus,
|
|
31
|
+
withConnectionStatusInfo: params.projectionOptions?.withConnectionStatus ||
|
|
32
|
+
params.projectionOptions?.deviceStatusProperties?.includes('connectionStatus'),
|
|
33
|
+
withOnlineStatus: params.projectionOptions?.withOnlineStatus ||
|
|
34
|
+
params.projectionOptions?.deviceStatusProperties?.includes('isOnline'),
|
|
35
|
+
}));
|
|
26
36
|
this.logger.trace(result, 'DeviceStatusRepository::getDeviceStatus result');
|
|
27
37
|
return result;
|
|
28
38
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/repositories/deviceStatus/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/repositories/deviceStatus/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAOrD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAE,4BAA4B,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAA;AAC5F,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAA;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAE7D,MAAM,OAAO,sBAAuB,SAAQ,cAAc;IACxD;;;;;;;;;;;;;;OAcG;IACH,KAAK,CAAC,iBAAiB,CAAC,MAA+B;QACrD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,6DAA6D,CAAC,CAAA;QAExF,MAAM,cAAc,GAAG,IAAI,cAAc,CACvC,IAAI,CAAC,oBAAoB,EACzB,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,2BAA2B,CACjC,CAAA;QAED,4BAA4B,CAAC,MAAM,CAAC,CAAA;QAEpC,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,cAAc,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;QAE3E,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,EAAE,CAC7B,qBAAqB,CAAC;YACpB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,YAAY;YACZ,wBAAwB,EACtB,MAAM,CAAC,iBAAiB,EAAE,oBAAoB;gBAC9C,MAAM,CAAC,iBAAiB,EAAE,sBAAsB,EAAE,QAAQ,CAAC,kBAAkB,CAAC;YAChF,gBAAgB,EACd,MAAM,CAAC,iBAAiB,EAAE,gBAAgB;gBAC1C,MAAM,CAAC,iBAAiB,EAAE,sBAAsB,EAAE,QAAQ,CAAC,UAAU,CAAC;SACzE,CAAC,CACH,CAAA;QAED,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,gDAAgD,CAAC,CAAA;QAE3E,OAAO,MAAM,CAAA;IACf,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,sBAAsB,CAAC,MAAoC;QAC/D,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,oEAAoE,CAAC,CAAA;QAE/F,MAAM,cAAc,GAAG,IAAI,cAAc,CACvC,IAAI,CAAC,oBAAoB,EACzB,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,2BAA2B,CACjC,CAAA;QAED,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC,cAAc,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;QAEhF,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,EAAE,uDAAuD,CAAC,CAAA;QAEtF,OAAO,MAAM,CAAA;IACf,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,oBAAoB,CAAC,MAAkC;QAC3D,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,gEAAgE,CAAC,CAAA;QAE3F,MAAM,cAAc,GAAG,IAAI,cAAc,CACvC,IAAI,CAAC,oBAAoB,EACzB,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,2BAA2B,CACjC,CAAA;QAED,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,cAAc,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;QAE9E,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,EAAE,mDAAmD,CAAC,CAAA;QAElF,OAAO,MAAM,CAAA;IACf,CAAC;CACF"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { LiveLink } from '../../entities/liveLink';
|
|
2
2
|
import { Enums } from '../../types';
|
|
3
|
-
import { tryParseDate, tryParseFloat } from '../../utils/parsingTools';
|
|
3
|
+
import { tryParseBoolean, tryParseDate, tryParseFloat } from '../../utils/parsingTools';
|
|
4
4
|
import { uuidStringToBinaryBuffer } from '../../utils/uuidHelpers';
|
|
5
5
|
export const getLiveLinkData = async (novaDataSource, params, logger, deviceStatusRepository) => {
|
|
6
6
|
if (!params?.filters?.id || !params?.filters?.clientId) {
|
|
@@ -49,6 +49,7 @@ export const getLiveLinkData = async (novaDataSource, params, logger, deviceStat
|
|
|
49
49
|
withDevice: true,
|
|
50
50
|
deviceProperties: ['imei', 'name', 'description', 'deviceTypeId', 'color', 'icon'],
|
|
51
51
|
deviceStatusProperties: [
|
|
52
|
+
'created',
|
|
52
53
|
'latitude',
|
|
53
54
|
'longitude',
|
|
54
55
|
'address',
|
|
@@ -60,6 +61,8 @@ export const getLiveLinkData = async (novaDataSource, params, logger, deviceStat
|
|
|
60
61
|
'batteryVoltage',
|
|
61
62
|
'externalPowerVoltage',
|
|
62
63
|
'reportType',
|
|
64
|
+
'connectionStatus',
|
|
65
|
+
'isOnline',
|
|
63
66
|
],
|
|
64
67
|
},
|
|
65
68
|
pagingOptions: {
|
|
@@ -91,6 +94,8 @@ export const getLiveLinkData = async (novaDataSource, params, logger, deviceStat
|
|
|
91
94
|
batteryVoltage: tryParseFloat(data?.batteryVoltage) ?? undefined,
|
|
92
95
|
externalPowerVoltage: tryParseFloat(data?.externalPowerVoltage) ?? undefined,
|
|
93
96
|
reportType: tryParseFloat(data?.reportType) ?? undefined,
|
|
97
|
+
connectionStatus: data?.connectionStatus ?? undefined,
|
|
98
|
+
isOnline: tryParseBoolean(data?.isOnline) ?? undefined,
|
|
94
99
|
},
|
|
95
100
|
};
|
|
96
101
|
}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getLiveLinkData.js","sourceRoot":"","sources":["../../../src/repositories/liveLinks/getLiveLinkData.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAElD,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAGnC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;
|
|
1
|
+
{"version":3,"file":"getLiveLinkData.js","sourceRoot":"","sources":["../../../src/repositories/liveLinks/getLiveLinkData.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAElD,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAGnC,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AACvF,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAA;AAGlE,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,EAClC,cAA8B,EAC9B,MAA6B,EAC7B,MAAc,EACd,sBAA8C,EACvB,EAAE;IACzB,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE;QACtD,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,oEAAoE,CAAC,CAAA;QAC7F,OAAO,EAAE,kBAAkB,EAAE,EAAE,EAAE,CAAA;KAClC;IAED,MAAM,YAAY,GAAG,wBAAwB,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC,CAAA;IAElE,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE;QACzB,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,kEAAkE,CAAC,CAAA;QAC3F,OAAO,EAAE,kBAAkB,EAAE,EAAE,EAAE,CAAA;KAClC;IAED,4CAA4C;IAC5C,MAAM,aAAa,GAAG,cAAc,CAAC,2BAA2B,CAAC,MAAM,CAAC,CAAA;IAExE,OAAO,cAAc,CAAC,SAAS,CAC7B,KAAK,EAAE,UAA0B,EAAE,WAAyB,EAAyB,EAAE;QACrF,MAAM,mBAAmB,GAAG,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;QAE9D,MAAM,YAAY,GAAG,mBAAmB;aACrC,kBAAkB,CAAC,UAAU,CAAC;aAC9B,QAAQ,CAAC,UAAU,EAAE,EAAE,EAAE,EAAE,YAAY,EAAE,CAAC;aAC1C,QAAQ,CAAC,sBAAsB,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAA;QAE1E,IAAI,WAAW,EAAE;YACf,YAAY,CAAC,cAAc,CAAC,WAAW,CAAC,CAAA;SACzC;QAED,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,MAAM,EAAE,CAAA;QAE5C,IAAI,CAAC,QAAQ,EAAE;YACb,OAAO,EAAE,kBAAkB,EAAE,EAAE,EAAE,CAAA;SAClC;QAED,MAAM,MAAM,GAAiB;YAC3B,kBAAkB,EAAE,EAAE;SACvB,CAAA;QAED,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAmB,CAAA;QAE5C,IAAI,QAAQ,CAAC,YAAY,KAAK,SAAS,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE;YAC3D,OAAO,MAAM,CAAA;SACd;QAED,MAAM,OAAO,GACX,QAAQ,CAAC,YAAY,KAAK,SAAS;YACjC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE;YACvB,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAA;QAErC,MAAM,QAAQ,GAAG,MAAM,CAAC,aAAa,EAAE,QAAQ,IAAI,GAAG,CAAA;QACtD,MAAM,SAAS,GAAG,MAAM,CAAC,aAAa,EAAE,SAAS,IAAI,CAAC,CAAA;QAEtD,MAAM,cAAc,GAAG,MAAM,sBAAsB,CAAC,iBAAiB,CAAC;YACpE,OAAO,EAAE;gBACP,GAAG,OAAO;gBACV,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,WAAW;gBACvC,YAAY,EAAE,KAAK,CAAC,YAAY,CAAC,MAAM;aACxC;YACD,iBAAiB,EAAE;gBACjB,UAAU,EAAE,IAAI;gBAChB,gBAAgB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,CAAC;gBAClF,sBAAsB,EAAE;oBACtB,SAAS;oBACT,UAAU;oBACV,WAAW;oBACX,SAAS;oBACT,UAAU;oBACV,YAAY;oBACZ,mBAAmB;oBACnB,OAAO;oBACP,kBAAkB;oBAClB,gBAAgB;oBAChB,sBAAsB;oBACtB,YAAY;oBACZ,kBAAkB;oBAClB,UAAU;iBACX;aACF;YACD,aAAa,EAAE;gBACb,KAAK,EAAE,QAAQ;gBACf,MAAM,EAAE,QAAQ,GAAG,SAAS;aAC7B;YACD,YAAY,EAAE;gBACZ,eAAe,EAAE,MAAM,CAAC,YAAY,EAAE,eAAe;aACtD;SACF,CAAC,CAAA;QAEF,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAC5B,GAAG,cAAc,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE;YACnC,MAAM,IAAI,GAAG,YAAY,EAAE,IAAW,CAAA;YAEtC,OAAO;gBACL,IAAI,EAAE,YAAY,CAAC,IAAI;gBACvB,IAAI,EAAE,YAAY,CAAC,MAAM,EAAE,IAAI;gBAC/B,WAAW,EAAE,YAAY,CAAC,MAAM,EAAE,WAAW;gBAC7C,YAAY,EAAE,YAAY,CAAC,MAAM,EAAE,YAAY;gBAC/C,KAAK,EAAE,YAAY,CAAC,MAAM,EAAE,KAAK;gBACjC,IAAI,EAAE,YAAY,CAAC,MAAM,EAAE,IAAI;gBAC/B,MAAM,EAAE;oBACN,QAAQ,EAAE,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,SAAS;oBACpD,SAAS,EAAE,aAAa,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,SAAS;oBACtD,OAAO,EAAE,IAAI,EAAE,OAAO,IAAI,SAAS;oBACnC,QAAQ,EAAE,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,SAAS;oBACnD,UAAU,EAAE,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,SAAS;oBACxD,iBAAiB,EAAE,aAAa,CAAC,IAAI,EAAE,iBAAiB,CAAC,IAAI,SAAS;oBACtE,KAAK,EAAE,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,SAAS;oBAC9C,gBAAgB,EAAE,aAAa,CAAC,IAAI,EAAE,gBAAgB,CAAC,IAAI,SAAS;oBACpE,cAAc,EAAE,aAAa,CAAC,IAAI,EAAE,cAAc,CAAC,IAAI,SAAS;oBAChE,oBAAoB,EAAE,aAAa,CAAC,IAAI,EAAE,oBAAoB,CAAC,IAAI,SAAS;oBAC5E,UAAU,EAAE,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,SAAS;oBACxD,gBAAgB,EAAE,IAAI,EAAE,gBAAgB,IAAI,SAAS;oBACrD,QAAQ,EAAE,eAAe,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,SAAS;iBACvD;aACF,CAAA;QACH,CAAC,CAAC,CACH,CAAA;QAED,OAAO,MAAM,CAAA;IACf,CAAC,EACD,sCAAsC,EACtC,aAAa,CACd,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Tag } from '../../entities';
|
|
2
|
-
import { BulkCreateTagParams, CreateTagParams, DeleteTagParams, GetTagsResult, SearchTagsParams, UpdateTagParams } from '../../types/tag';
|
|
2
|
+
import { BulkCreateTagParams, CreateTagParams, DeleteTagParams, GetTagsResult, SearchTagsByUserParams, SearchTagsParams, UpdateTagParams } from '../../types/tag';
|
|
3
3
|
import { BaseRepository } from '../baseRepository';
|
|
4
4
|
export declare class TagsRepository extends BaseRepository {
|
|
5
5
|
/**
|
|
@@ -32,4 +32,10 @@ export declare class TagsRepository extends BaseRepository {
|
|
|
32
32
|
* @returns {Tag[]} the created tags
|
|
33
33
|
*/
|
|
34
34
|
bulkCreateTags(params: BulkCreateTagParams): Promise<Tag[]>;
|
|
35
|
+
/**
|
|
36
|
+
* Search for tags by a given user
|
|
37
|
+
* @param {SearchTagsByUserParams} params containing information to search for tags by user
|
|
38
|
+
* @returns {Tag[]} the tags found
|
|
39
|
+
*/
|
|
40
|
+
searchTagsByUser(params: SearchTagsByUserParams): Promise<GetTagsResult>;
|
|
35
41
|
}
|
|
@@ -4,6 +4,7 @@ import { bulkCreateTags } from './bulkCreateTags';
|
|
|
4
4
|
import { createTag } from './createTag';
|
|
5
5
|
import { deleteTag } from './deleteTag';
|
|
6
6
|
import { searchTags } from './searchTags';
|
|
7
|
+
import { searchTagsByUser } from './searchTagsByUser';
|
|
7
8
|
import { updateTag } from './updateTag';
|
|
8
9
|
export class TagsRepository extends BaseRepository {
|
|
9
10
|
/**
|
|
@@ -66,5 +67,17 @@ export class TagsRepository extends BaseRepository {
|
|
|
66
67
|
this.logger.trace(result, 'TagRepository::bulkCreateTags result');
|
|
67
68
|
return result;
|
|
68
69
|
}
|
|
70
|
+
/**
|
|
71
|
+
* Search for tags by a given user
|
|
72
|
+
* @param {SearchTagsByUserParams} params containing information to search for tags by user
|
|
73
|
+
* @returns {Tag[]} the tags found
|
|
74
|
+
*/
|
|
75
|
+
async searchTagsByUser(params) {
|
|
76
|
+
this.logger.trace(params, `TagRepository::searchTagsByUser started with params`);
|
|
77
|
+
const novaDataSource = new NovaDataSource(this.novaDataSourceConfig, this.logger, this.replicaNovaDataSourceConfig);
|
|
78
|
+
const result = await searchTagsByUser(novaDataSource, params, this.logger);
|
|
79
|
+
this.logger.trace(result, 'TagRepository::searchTagsByUser result');
|
|
80
|
+
return result;
|
|
81
|
+
}
|
|
69
82
|
}
|
|
70
83
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/repositories/tags/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/repositories/tags/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,6 +23,11 @@ export const searchTags = async (novaDataSource, params, logger) => {
|
|
|
23
23
|
if (filters.tagIds?.length) {
|
|
24
24
|
queryBuilder = queryBuilder.andWhere('id IN (:...tagIds)', { tagIds: filters.tagIds });
|
|
25
25
|
}
|
|
26
|
+
if (filters.metadata) {
|
|
27
|
+
queryBuilder = queryBuilder.andWhere('JSON_CONTAINS(metadata, :metadata)', {
|
|
28
|
+
metadata: JSON.stringify(filters.metadata),
|
|
29
|
+
});
|
|
30
|
+
}
|
|
26
31
|
// counting before applying pagination
|
|
27
32
|
const tagCount = await queryBuilder.getCount();
|
|
28
33
|
const limit = pagingOptions?.pageSize ?? 50;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"searchTags.js","sourceRoot":"","sources":["../../../src/repositories/tags/searchTags.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAA;AAGpC,OAAO,EAEL,kCAAkC,GAEnC,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAA;AAEjE,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,EAC7B,cAA8B,EAC9B,MAAwB,EACxB,MAAc,EACU,EAAE;IAC1B,IAAI,kBAAkB,CAAmB,MAAM,EAAE,kCAAkC,CAAC,EAAE;QACpF,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,wDAAwD,CAAC,CAAA;QACjF,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,CAAA;KACnC;IAED,4CAA4C;IAC5C,MAAM,aAAa,GAAG,cAAc,CAAC,2BAA2B,CAAC,MAAM,CAAC,CAAA;IAExE,OAAO,cAAc,CAAC,SAAS,CAC7B,KAAK,EAAE,UAA0B,EAAE,WAAyB,EAA0B,EAAE;QACtF,MAAM,cAAc,GAAG,UAAU,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA;QAEpD,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,MAAM,CAAA;QACzC,IAAI,YAAY,GAAG,cAAc;aAC9B,kBAAkB,EAAE;aACpB,KAAK,CAAC,sBAAsB,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAA;QAEhE,IAAI,WAAW,EAAE;YACf,YAAY,CAAC,cAAc,CAAC,WAAW,CAAC,CAAA;SACzC;QAED,IAAI,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE;YACzB,YAAY,GAAG,YAAY,CAAC,QAAQ,CAAC,qBAAqB,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAA;SACtF;QAED,IAAI,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE;YAC1B,YAAY,GAAG,YAAY,CAAC,QAAQ,CAAC,oBAAoB,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;SACvF;QAED,sCAAsC;QACtC,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,QAAQ,EAAE,CAAA;QAE9C,MAAM,KAAK,GAAG,aAAa,EAAE,QAAQ,IAAI,EAAE,CAAA;QAC3C,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QAEzB,MAAM,WAAW,GAAG,CAAC,aAAa,EAAE,SAAS,IAAI,CAAC,CAAC,GAAG,KAAK,CAAA;QAC3D,YAAY,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;QAEhC,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,OAAO,EAAE,CAAA;QAEzC,OAAO;YACL,IAAI;YACJ,UAAU,EAAE,QAAQ;SACJ,CAAA;IACpB,CAAC,EACD,4BAA4B,EAC5B,aAAa,CACd,CAAA;AACH,CAAC,CAAA"}
|
|
1
|
+
{"version":3,"file":"searchTags.js","sourceRoot":"","sources":["../../../src/repositories/tags/searchTags.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAA;AAGpC,OAAO,EAEL,kCAAkC,GAEnC,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAA;AAEjE,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,EAC7B,cAA8B,EAC9B,MAAwB,EACxB,MAAc,EACU,EAAE;IAC1B,IAAI,kBAAkB,CAAmB,MAAM,EAAE,kCAAkC,CAAC,EAAE;QACpF,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,wDAAwD,CAAC,CAAA;QACjF,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,CAAA;KACnC;IAED,4CAA4C;IAC5C,MAAM,aAAa,GAAG,cAAc,CAAC,2BAA2B,CAAC,MAAM,CAAC,CAAA;IAExE,OAAO,cAAc,CAAC,SAAS,CAC7B,KAAK,EAAE,UAA0B,EAAE,WAAyB,EAA0B,EAAE;QACtF,MAAM,cAAc,GAAG,UAAU,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA;QAEpD,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,MAAM,CAAA;QACzC,IAAI,YAAY,GAAG,cAAc;aAC9B,kBAAkB,EAAE;aACpB,KAAK,CAAC,sBAAsB,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAA;QAEhE,IAAI,WAAW,EAAE;YACf,YAAY,CAAC,cAAc,CAAC,WAAW,CAAC,CAAA;SACzC;QAED,IAAI,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE;YACzB,YAAY,GAAG,YAAY,CAAC,QAAQ,CAAC,qBAAqB,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAA;SACtF;QAED,IAAI,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE;YAC1B,YAAY,GAAG,YAAY,CAAC,QAAQ,CAAC,oBAAoB,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;SACvF;QAED,IAAI,OAAO,CAAC,QAAQ,EAAE;YACpB,YAAY,GAAG,YAAY,CAAC,QAAQ,CAAC,oCAAoC,EAAE;gBACzE,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC;aAC3C,CAAC,CAAA;SACH;QAED,sCAAsC;QACtC,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,QAAQ,EAAE,CAAA;QAE9C,MAAM,KAAK,GAAG,aAAa,EAAE,QAAQ,IAAI,EAAE,CAAA;QAC3C,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QAEzB,MAAM,WAAW,GAAG,CAAC,aAAa,EAAE,SAAS,IAAI,CAAC,CAAC,GAAG,KAAK,CAAA;QAC3D,YAAY,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;QAEhC,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,OAAO,EAAE,CAAA;QAEzC,OAAO;YACL,IAAI;YACJ,UAAU,EAAE,QAAQ;SACJ,CAAA;IACpB,CAAC,EACD,4BAA4B,EAC5B,aAAa,CACd,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { NovaDataSource } from '../../novaDataSource';
|
|
2
|
+
import { Logger } from '../../types/logger';
|
|
3
|
+
import { GetTagsResult, SearchTagsByUserParams } from '../../types/tag';
|
|
4
|
+
export declare const searchTagsByUser: (novaDataSource: NovaDataSource, params: SearchTagsByUserParams, logger: Logger) => Promise<GetTagsResult>;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { EntityTag, Tag } from '../../entities';
|
|
2
|
+
import { oneRequiredSearchTagsByUserParamsAttributes, requiredSearchTagsByUserParamsAttributes, } from '../../types/tag';
|
|
3
|
+
import { allAttributesAreNull, anyAttributeIsNull } from '../../utils/paramsValidators';
|
|
4
|
+
import { getUserById } from '../users/getUserById';
|
|
5
|
+
export const searchTagsByUser = async (novaDataSource, params, logger) => {
|
|
6
|
+
if (anyAttributeIsNull(params, requiredSearchTagsByUserParamsAttributes) ||
|
|
7
|
+
allAttributesAreNull(params, oneRequiredSearchTagsByUserParamsAttributes)) {
|
|
8
|
+
logger.warn({ params }, 'TagsRepository::searchTags missing required parameters');
|
|
9
|
+
return { tags: [], totalCount: 0 };
|
|
10
|
+
}
|
|
11
|
+
// Force the query to run on master or slave
|
|
12
|
+
const dbQueryRunner = novaDataSource.createQueryRunnerFromParams(params);
|
|
13
|
+
const { filters, pagingOptions } = params;
|
|
14
|
+
let userId = filters.userNumberId;
|
|
15
|
+
if (!filters.userNumberId) {
|
|
16
|
+
const user = await getUserById(novaDataSource, { filters: { id: filters.userId } }, logger);
|
|
17
|
+
userId = user?.numberId;
|
|
18
|
+
}
|
|
19
|
+
return novaDataSource.safeQuery(async (dataSource, queryRunner) => {
|
|
20
|
+
const tagsRepository = dataSource.getRepository(Tag);
|
|
21
|
+
let queryBuilder = tagsRepository
|
|
22
|
+
.createQueryBuilder('tag')
|
|
23
|
+
.where('tag.clientId = :clientId', { clientId: filters.clientId });
|
|
24
|
+
if (queryRunner) {
|
|
25
|
+
queryBuilder.setQueryRunner(queryRunner);
|
|
26
|
+
}
|
|
27
|
+
queryBuilder.innerJoin(EntityTag, 'entityTag', "entityTag.tagId = tag.id AND entityTag.entityType = 'User' AND entityTag.entityId = :userId", { userId });
|
|
28
|
+
if (filters.metadata) {
|
|
29
|
+
queryBuilder = queryBuilder.andWhere('JSON_CONTAINS(tag.metadata, :metadata)', {
|
|
30
|
+
metadata: JSON.stringify(filters.metadata),
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
// counting before applying pagination
|
|
34
|
+
const tagCount = await queryBuilder.getCount();
|
|
35
|
+
const limit = pagingOptions?.pageSize ?? 50;
|
|
36
|
+
queryBuilder.limit(limit);
|
|
37
|
+
const globalIndex = (pagingOptions?.pageIndex ?? 0) * limit;
|
|
38
|
+
queryBuilder.offset(globalIndex);
|
|
39
|
+
const tags = await queryBuilder.getMany();
|
|
40
|
+
return {
|
|
41
|
+
tags,
|
|
42
|
+
totalCount: tagCount,
|
|
43
|
+
};
|
|
44
|
+
}, 'TagsRepository::searchTags', dbQueryRunner);
|
|
45
|
+
};
|
|
46
|
+
//# sourceMappingURL=searchTagsByUser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"searchTagsByUser.js","sourceRoot":"","sources":["../../../src/repositories/tags/searchTagsByUser.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAA;AAG/C,OAAO,EAEL,2CAA2C,EAC3C,wCAAwC,GAEzC,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAA;AACvF,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAElD,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EACnC,cAA8B,EAC9B,MAA8B,EAC9B,MAAc,EACU,EAAE;IAC1B,IACE,kBAAkB,CAAyB,MAAM,EAAE,wCAAwC,CAAC;QAC5F,oBAAoB,CAClB,MAAM,EACN,2CAA2C,CAC5C,EACD;QACA,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,wDAAwD,CAAC,CAAA;QACjF,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,CAAA;KACnC;IAED,4CAA4C;IAC5C,MAAM,aAAa,GAAG,cAAc,CAAC,2BAA2B,CAAC,MAAM,CAAC,CAAA;IAExE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,MAAM,CAAA;IAEzC,IAAI,MAAM,GAAG,OAAO,CAAC,YAAY,CAAA;IACjC,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE;QACzB,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,CAAA;QAC3F,MAAM,GAAG,IAAI,EAAE,QAAQ,CAAA;KACxB;IAED,OAAO,cAAc,CAAC,SAAS,CAC7B,KAAK,EAAE,UAA0B,EAAE,WAAyB,EAA0B,EAAE;QACtF,MAAM,cAAc,GAAG,UAAU,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA;QAEpD,IAAI,YAAY,GAAG,cAAc;aAC9B,kBAAkB,CAAC,KAAK,CAAC;aACzB,KAAK,CAAC,0BAA0B,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAA;QAEpE,IAAI,WAAW,EAAE;YACf,YAAY,CAAC,cAAc,CAAC,WAAW,CAAC,CAAA;SACzC;QAED,YAAY,CAAC,SAAS,CACpB,SAAS,EACT,WAAW,EACX,6FAA6F,EAC7F,EAAE,MAAM,EAAE,CACX,CAAA;QAED,IAAI,OAAO,CAAC,QAAQ,EAAE;YACpB,YAAY,GAAG,YAAY,CAAC,QAAQ,CAAC,wCAAwC,EAAE;gBAC7E,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC;aAC3C,CAAC,CAAA;SACH;QAED,sCAAsC;QACtC,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,QAAQ,EAAE,CAAA;QAE9C,MAAM,KAAK,GAAG,aAAa,EAAE,QAAQ,IAAI,EAAE,CAAA;QAC3C,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QAEzB,MAAM,WAAW,GAAG,CAAC,aAAa,EAAE,SAAS,IAAI,CAAC,CAAC,GAAG,KAAK,CAAA;QAC3D,YAAY,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;QAEhC,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,OAAO,EAAE,CAAA;QAEzC,OAAO;YACL,IAAI;YACJ,UAAU,EAAE,QAAQ;SACJ,CAAA;IACpB,CAAC,EACD,4BAA4B,EAC5B,aAAa,CACd,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -21,6 +21,7 @@ export const updateTag = async (novaDataSource, params, logger) => {
|
|
|
21
21
|
color: values.color,
|
|
22
22
|
description: values.description,
|
|
23
23
|
name: values.name,
|
|
24
|
+
metadata: values.metadata,
|
|
24
25
|
})
|
|
25
26
|
.where('id = :id', { id: filters.tagId })
|
|
26
27
|
.andWhere('clientId = :clientId', { clientId: filters.clientId })
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"updateTag.js","sourceRoot":"","sources":["../../../src/repositories/tags/updateTag.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAA;AAGpC,OAAO,EAAE,iCAAiC,EAAmB,MAAM,iBAAiB,CAAA;AACpF,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAA;AACvE,OAAO,EAAE,GAAG,EAAE,MAAM,sBAAsB,CAAA;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAA;AAEjE,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,EAC5B,cAA8B,EAC9B,MAAuB,EACvB,MAAc,EACI,EAAE;IACpB,IACE,kBAAkB,CAAC,MAAM,EAAE,iCAAiC,CAAC;QAC7D,CAAC,oBAAoB,CAAC,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,EACnE;QACA,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,sDAAsD,CAAC,CAAA;QAC/E,OAAO,KAAK,CAAA;KACb;IAED,OAAO,cAAc,CAAC,SAAS,CAAC,KAAK,EAAE,cAA8B,EAAoB,EAAE;QACzF,MAAM,cAAc,GAAG,cAAc,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA;QACxD,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CAAA;QAClC,MAAM,YAAY,GAAG,MAAM,cAAc;aACtC,kBAAkB,EAAE;aACpB,MAAM,CAAC,GAAG,CAAC;aACX,GAAG,CAAC;YACH,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,UAAU,EAAE,GAAG,EAAE;YACjB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,IAAI,EAAE,MAAM,CAAC,IAAI;
|
|
1
|
+
{"version":3,"file":"updateTag.js","sourceRoot":"","sources":["../../../src/repositories/tags/updateTag.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAA;AAGpC,OAAO,EAAE,iCAAiC,EAAmB,MAAM,iBAAiB,CAAA;AACpF,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAA;AACvE,OAAO,EAAE,GAAG,EAAE,MAAM,sBAAsB,CAAA;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAA;AAEjE,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,EAC5B,cAA8B,EAC9B,MAAuB,EACvB,MAAc,EACI,EAAE;IACpB,IACE,kBAAkB,CAAC,MAAM,EAAE,iCAAiC,CAAC;QAC7D,CAAC,oBAAoB,CAAC,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,EACnE;QACA,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,sDAAsD,CAAC,CAAA;QAC/E,OAAO,KAAK,CAAA;KACb;IAED,OAAO,cAAc,CAAC,SAAS,CAAC,KAAK,EAAE,cAA8B,EAAoB,EAAE;QACzF,MAAM,cAAc,GAAG,cAAc,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA;QACxD,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CAAA;QAClC,MAAM,YAAY,GAAG,MAAM,cAAc;aACtC,kBAAkB,EAAE;aACpB,MAAM,CAAC,GAAG,CAAC;aACX,GAAG,CAAC;YACH,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,UAAU,EAAE,GAAG,EAAE;YACjB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;SAC1B,CAAC;aACD,KAAK,CAAC,UAAU,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC;aACxC,QAAQ,CAAC,sBAAsB,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC;aAChE,OAAO,EAAE,CAAA;QAEZ,OAAO,YAAY,CAAC,QAAQ,GAAG,CAAC,CAAA;IAClC,CAAC,EAAE,gCAAgC,CAAC,CAAA;AACtC,CAAC,CAAA"}
|