@spytecgps/nova-orm 1.0.12 → 1.0.14
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/deviceStatus.d.ts +13 -0
- package/dist/entities/deviceStatus.js +62 -0
- package/dist/entities/index.d.ts +2 -1
- package/dist/entities/index.js +2 -1
- package/dist/index.js +1 -1
- package/dist/repositories/deviceStatus/getDeviceStatuses.d.ts +5 -0
- package/dist/repositories/deviceStatus/getDeviceStatuses.js +77 -0
- package/dist/repositories/deviceStatus/index.d.ts +27 -0
- package/dist/repositories/deviceStatus/index.js +40 -0
- package/dist/repositories/deviceStatus/upsertDeviceStatuses.d.ts +4 -0
- package/dist/repositories/deviceStatus/upsertDeviceStatuses.js +40 -0
- package/dist/repositories/index.d.ts +2 -1
- package/dist/repositories/index.js +2 -1
- package/dist/types/deviceStatus.d.ts +33 -0
- package/dist/types/deviceStatus.js +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { DeviceStatus } from '../../entities/deviceStatus';
|
|
2
|
+
import { NovaDataSource } from '../../novaDataSource';
|
|
3
|
+
import { GetDeviceStatusesParams } from '../../types/deviceStatus';
|
|
4
|
+
import { Logger } from '../../types/logger';
|
|
5
|
+
export declare const getDeviceStatuses: (novaDataSource: NovaDataSource, params: GetDeviceStatusesParams, logger: Logger) => Promise<DeviceStatus[]>;
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { ClientDeviceSetting, Device } from '../../entities';
|
|
2
|
+
import { DeviceStatus } from '../../entities/deviceStatus';
|
|
3
|
+
export const getDeviceStatuses = async (novaDataSource, params, logger) => {
|
|
4
|
+
if (!params?.filters?.imeiList?.length && !params?.filters?.clientId) {
|
|
5
|
+
logger.warn({ params }, 'DeviceStatusRepository::getDevice missing required parameters');
|
|
6
|
+
return [];
|
|
7
|
+
}
|
|
8
|
+
const dsResult = await novaDataSource.safeQuery(async (dataSource) => {
|
|
9
|
+
const deviceStatusRepository = dataSource.getRepository(DeviceStatus);
|
|
10
|
+
let queryBuilder = deviceStatusRepository.createQueryBuilder('deviceStatus');
|
|
11
|
+
if (params.filters.imeiList?.length) {
|
|
12
|
+
queryBuilder = queryBuilder.andWhere('deviceStatus.imei IN (:...imeis)', {
|
|
13
|
+
imeis: params.filters.imeiList,
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
if (params.filters.clientId) {
|
|
17
|
+
queryBuilder = queryBuilder.andWhere('deviceStatus.clientId = :clientId', {
|
|
18
|
+
clientId: params.filters.clientId,
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
if (params.filters.minSendTime) {
|
|
22
|
+
queryBuilder = queryBuilder.andWhere('deviceStatus.sendTime > :sendTimeMin', {
|
|
23
|
+
sendTimeMin: params.filters.minSendTime,
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
if (params.filters.deviceStatus || params.projectionOptions?.withDevice) {
|
|
27
|
+
queryBuilder = queryBuilder.leftJoinAndMapOne('deviceStatus.device', Device, 'device', 'deviceStatus.imei = device.imei and deviceStatus.clientId = device.clientId');
|
|
28
|
+
if (params.filters.deviceStatus) {
|
|
29
|
+
queryBuilder = queryBuilder.andWhere('device.status = :status', {
|
|
30
|
+
status: params.filters.deviceStatus,
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
if (params.projectionOptions?.withClient) {
|
|
35
|
+
queryBuilder = queryBuilder.leftJoinAndSelect('deviceStatus.client', 'client');
|
|
36
|
+
}
|
|
37
|
+
if (params.projectionOptions?.withClientDeviceSettings) {
|
|
38
|
+
queryBuilder = queryBuilder.leftJoinAndMapOne('deviceStatus.clientDeviceSetting', ClientDeviceSetting, 'clientDeviceSetting', 'deviceStatus.imei = clientDeviceSetting.imei and deviceStatus.clientId = clientDeviceSetting.clientId');
|
|
39
|
+
}
|
|
40
|
+
queryBuilder = queryBuilder
|
|
41
|
+
.limit(params.pagingOptions?.limit ?? 100)
|
|
42
|
+
.offset(params.pagingOptions?.offset ?? 0);
|
|
43
|
+
const deviceStatuses = await queryBuilder.getMany();
|
|
44
|
+
return deviceStatuses;
|
|
45
|
+
}, 'DeviceStatusRepository::getDevice');
|
|
46
|
+
dsResult.forEach(ds => {
|
|
47
|
+
if (params.projectionOptions?.deviceStatusProperties?.length) {
|
|
48
|
+
for (const key in ds.data) {
|
|
49
|
+
if (!params.projectionOptions?.deviceStatusProperties?.some(p => p == key)) {
|
|
50
|
+
delete ds.data[key];
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
if (params.projectionOptions?.deviceProperties?.length) {
|
|
55
|
+
for (const key in ds.device) {
|
|
56
|
+
if (!params.projectionOptions?.deviceProperties?.some(p => p == key)) {
|
|
57
|
+
delete ds.device[key];
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
if (params.projectionOptions?.clientProperties?.length) {
|
|
62
|
+
for (const key in ds.client) {
|
|
63
|
+
if (!params.projectionOptions?.clientProperties?.some(p => p == key)) {
|
|
64
|
+
delete ds.client[key];
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
if (params.projectionOptions?.clientDeviceSettingsProperties?.length) {
|
|
69
|
+
for (const key in ds.clientDeviceSetting) {
|
|
70
|
+
if (!params.projectionOptions?.clientDeviceSettingsProperties?.some(p => p == key)) {
|
|
71
|
+
delete ds.clientDeviceSetting[key];
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
return dsResult;
|
|
77
|
+
};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { DeviceStatus } from '../../entities/deviceStatus';
|
|
2
|
+
import { GetDeviceStatusesParams, UpsertDeviceStatusesParams } from '../../types/deviceStatus';
|
|
3
|
+
import { BaseRepository } from './../baseRepository';
|
|
4
|
+
export declare class DeviceStatusRepository extends BaseRepository {
|
|
5
|
+
/**
|
|
6
|
+
* Get device statuses
|
|
7
|
+
* @param {GetDeviceStatusesParams} params containing information to get device statuses
|
|
8
|
+
* - filters.deviceStatus: The device status
|
|
9
|
+
* - filters.clientId: The client id
|
|
10
|
+
* - filters.imeiList: The imei list
|
|
11
|
+
* - filters.minSendTime: The min send time
|
|
12
|
+
* - projectionOptions.deviceStatusProperties: The device status properties to get
|
|
13
|
+
* - projectionOptions.withDevice: Whether to get the device object
|
|
14
|
+
* - projectionOptions.deviceProperties: The device properties to get
|
|
15
|
+
* - projectionOptions.withClient: Whether to get the client object
|
|
16
|
+
* - projectionOptions.clientProperties: The client properties to get
|
|
17
|
+
* - projectionOptions.withClientDeviceSettings: Whether to get the client device settings
|
|
18
|
+
* - projectionOptions.clientDeviceSettingsProperties: The client device settings properties to get
|
|
19
|
+
*/
|
|
20
|
+
getDeviceStatuses(params: GetDeviceStatusesParams): Promise<DeviceStatus[]>;
|
|
21
|
+
/**
|
|
22
|
+
* Upsert the device status information
|
|
23
|
+
* @param {UpsertDeviceStatusesParams} params containing device statuses information
|
|
24
|
+
* - items: The device statuses entities to upsert
|
|
25
|
+
*/
|
|
26
|
+
upsertDeviceStatuses(params: UpsertDeviceStatusesParams): Promise<boolean>;
|
|
27
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { NovaDataSource } from '../../novaDataSource';
|
|
2
|
+
import { BaseRepository } from './../baseRepository';
|
|
3
|
+
import { getDeviceStatuses } from './getDeviceStatuses';
|
|
4
|
+
import { upsertDeviceStatuses } from './upsertDeviceStatuses';
|
|
5
|
+
export class DeviceStatusRepository extends BaseRepository {
|
|
6
|
+
/**
|
|
7
|
+
* Get device statuses
|
|
8
|
+
* @param {GetDeviceStatusesParams} params containing information to get device statuses
|
|
9
|
+
* - filters.deviceStatus: The device status
|
|
10
|
+
* - filters.clientId: The client id
|
|
11
|
+
* - filters.imeiList: The imei list
|
|
12
|
+
* - filters.minSendTime: The min send time
|
|
13
|
+
* - projectionOptions.deviceStatusProperties: The device status properties to get
|
|
14
|
+
* - projectionOptions.withDevice: Whether to get the device object
|
|
15
|
+
* - projectionOptions.deviceProperties: The device properties to get
|
|
16
|
+
* - projectionOptions.withClient: Whether to get the client object
|
|
17
|
+
* - projectionOptions.clientProperties: The client properties to get
|
|
18
|
+
* - projectionOptions.withClientDeviceSettings: Whether to get the client device settings
|
|
19
|
+
* - projectionOptions.clientDeviceSettingsProperties: The client device settings properties to get
|
|
20
|
+
*/
|
|
21
|
+
async getDeviceStatuses(params) {
|
|
22
|
+
this.logger.trace(params, 'DeviceStatusRepository::getDeviceStatus started with params');
|
|
23
|
+
const novaDataSource = new NovaDataSource(this.novaDataSourceConfig, this.logger);
|
|
24
|
+
const result = await getDeviceStatuses(novaDataSource, params, this.logger);
|
|
25
|
+
this.logger.trace(result, 'DeviceStatusRepository::getDeviceStatus result');
|
|
26
|
+
return result;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Upsert the device status information
|
|
30
|
+
* @param {UpsertDeviceStatusesParams} params containing device statuses information
|
|
31
|
+
* - items: The device statuses entities to upsert
|
|
32
|
+
*/
|
|
33
|
+
async upsertDeviceStatuses(params) {
|
|
34
|
+
this.logger.trace(params, 'DeviceStatusRepository::upsertDeviceStatus started with params');
|
|
35
|
+
const novaDataSource = new NovaDataSource(this.novaDataSourceConfig, this.logger);
|
|
36
|
+
const result = await upsertDeviceStatuses(novaDataSource, params, this.logger);
|
|
37
|
+
this.logger.trace({ result }, 'DeviceStatusRepository::upsertDeviceStatus result');
|
|
38
|
+
return result;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { NovaDataSource } from '../../novaDataSource';
|
|
2
|
+
import { UpsertDeviceStatusesParams } from '../../types/deviceStatus';
|
|
3
|
+
import { Logger } from '../../types/logger';
|
|
4
|
+
export declare const upsertDeviceStatuses: (novaDataSource: NovaDataSource, params: UpsertDeviceStatusesParams, logger: Logger) => Promise<boolean>;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { DeviceStatus } from '../../entities/deviceStatus';
|
|
2
|
+
export const upsertDeviceStatuses = async (novaDataSource, params, logger) => {
|
|
3
|
+
if (!params?.items?.length) {
|
|
4
|
+
logger.warn({ params }, 'DeviceStatusRepository::upsertDeviceStatus missing required parameters');
|
|
5
|
+
return false;
|
|
6
|
+
}
|
|
7
|
+
return novaDataSource.safeQuery(async (dataSource) => {
|
|
8
|
+
const deviceStatusRepository = dataSource.getRepository(DeviceStatus);
|
|
9
|
+
const deviceStatuses = params.items.map(item => {
|
|
10
|
+
return {
|
|
11
|
+
clientId: item.clientId,
|
|
12
|
+
imei: item.imei,
|
|
13
|
+
created: new Date(item.created),
|
|
14
|
+
sendTime: new Date(item.sendTime),
|
|
15
|
+
data: item,
|
|
16
|
+
};
|
|
17
|
+
});
|
|
18
|
+
const result = await deviceStatusRepository.upsert(deviceStatuses, {
|
|
19
|
+
conflictPaths: ['imei'],
|
|
20
|
+
});
|
|
21
|
+
// const values = deviceStatuses
|
|
22
|
+
// .map(
|
|
23
|
+
// d =>
|
|
24
|
+
// `(${d.imei}, '${d.clientId}', '${d.created}', '${d.sendTime}', '${JSON.stringify(
|
|
25
|
+
// d.data,
|
|
26
|
+
// )}')`,
|
|
27
|
+
// )
|
|
28
|
+
// .join(', ')
|
|
29
|
+
// const query = `
|
|
30
|
+
// INSERT INTO deviceStatus (imei, clientId, created, sendTime, data)
|
|
31
|
+
// VALUES ${values}
|
|
32
|
+
// ON DUPLICATE KEY UPDATE
|
|
33
|
+
// created = IF(VALUES(sendTime) > sendTime, VALUES(created), created),
|
|
34
|
+
// sendTime = IF(VALUES(sendTime) > sendTime, VALUES(sendTime), sendTime),
|
|
35
|
+
// data = IF(VALUES(sendTime) > sendTime, VALUES(data), data);
|
|
36
|
+
// `
|
|
37
|
+
// const result = await deviceStatusRepository.query(query)
|
|
38
|
+
return result?.raw?.affectedRows > 0;
|
|
39
|
+
}, 'DeviceStatusRepository::upsertDeviceStatus');
|
|
40
|
+
};
|
|
@@ -14,6 +14,7 @@ import { DeactivationsRepository } from './deactivations';
|
|
|
14
14
|
import { DeviceBehaviorsRepository } from './deviceBehaviors';
|
|
15
15
|
import { DevicePairingsRepository } from './devicePairings';
|
|
16
16
|
import { DevicesRepository } from './devices';
|
|
17
|
+
import { DeviceStatusRepository } from './deviceStatus';
|
|
17
18
|
import { FirmwaresRepository } from './firmwares';
|
|
18
19
|
import { NotificationRecipientsRepository } from './notificationRecipients';
|
|
19
20
|
import { PositionRepository } from './positions';
|
|
@@ -29,4 +30,4 @@ import { UserInvitationsRepository } from './userInvitations';
|
|
|
29
30
|
import { UserRatingRequestsRepository } from './userRatingRequests';
|
|
30
31
|
import { UserRegistrationAttemptsRepository } from './userRegistrationAttempts';
|
|
31
32
|
import { UsersRepository } from './users';
|
|
32
|
-
export { AcumaticaRepository, AempTokenRepository, AlertRepository, AlertTypesRepository, AppFeaturesRepository, AssetCategoriesRepository, BillingRepository, BlacklistRepository, BLEMeshConfigurationRepository, BoundariesRepository, ClientsRepository, CountriesRepository, DeactivationsRepository, DeviceBehaviorsRepository, DevicePairingsRepository, DevicesRepository, FirmwaresRepository, NotificationRecipientsRepository, PositionRepository, SecurityRepository, TasksRepository, TripRepository, UserActivationsRepository, UserAppFeedbackRepository, UserAppIncidentsRepository, UserConfigurationsRepository, UserDataDeletionRequestsRepository, UserInvitationsRepository, UserRatingRequestsRepository, UserRegistrationAttemptsRepository, UsersRepository, };
|
|
33
|
+
export { AcumaticaRepository, AempTokenRepository, AlertRepository, AlertTypesRepository, AppFeaturesRepository, AssetCategoriesRepository, BillingRepository, BlacklistRepository, BLEMeshConfigurationRepository, BoundariesRepository, ClientsRepository, CountriesRepository, DeactivationsRepository, DeviceStatusRepository, DeviceBehaviorsRepository, DevicePairingsRepository, DevicesRepository, FirmwaresRepository, NotificationRecipientsRepository, PositionRepository, SecurityRepository, TasksRepository, TripRepository, UserActivationsRepository, UserAppFeedbackRepository, UserAppIncidentsRepository, UserConfigurationsRepository, UserDataDeletionRequestsRepository, UserInvitationsRepository, UserRatingRequestsRepository, UserRegistrationAttemptsRepository, UsersRepository, };
|
|
@@ -14,6 +14,7 @@ import { DeactivationsRepository } from './deactivations';
|
|
|
14
14
|
import { DeviceBehaviorsRepository } from './deviceBehaviors';
|
|
15
15
|
import { DevicePairingsRepository } from './devicePairings';
|
|
16
16
|
import { DevicesRepository } from './devices';
|
|
17
|
+
import { DeviceStatusRepository } from './deviceStatus';
|
|
17
18
|
import { FirmwaresRepository } from './firmwares';
|
|
18
19
|
import { NotificationRecipientsRepository } from './notificationRecipients';
|
|
19
20
|
import { PositionRepository } from './positions';
|
|
@@ -29,4 +30,4 @@ import { UserInvitationsRepository } from './userInvitations';
|
|
|
29
30
|
import { UserRatingRequestsRepository } from './userRatingRequests';
|
|
30
31
|
import { UserRegistrationAttemptsRepository } from './userRegistrationAttempts';
|
|
31
32
|
import { UsersRepository } from './users';
|
|
32
|
-
export { AcumaticaRepository, AempTokenRepository, AlertRepository, AlertTypesRepository, AppFeaturesRepository, AssetCategoriesRepository, BillingRepository, BlacklistRepository, BLEMeshConfigurationRepository, BoundariesRepository, ClientsRepository, CountriesRepository, DeactivationsRepository, DeviceBehaviorsRepository, DevicePairingsRepository, DevicesRepository, FirmwaresRepository, NotificationRecipientsRepository, PositionRepository, SecurityRepository, TasksRepository, TripRepository, UserActivationsRepository, UserAppFeedbackRepository, UserAppIncidentsRepository, UserConfigurationsRepository, UserDataDeletionRequestsRepository, UserInvitationsRepository, UserRatingRequestsRepository, UserRegistrationAttemptsRepository, UsersRepository, };
|
|
33
|
+
export { AcumaticaRepository, AempTokenRepository, AlertRepository, AlertTypesRepository, AppFeaturesRepository, AssetCategoriesRepository, BillingRepository, BlacklistRepository, BLEMeshConfigurationRepository, BoundariesRepository, ClientsRepository, CountriesRepository, DeactivationsRepository, DeviceStatusRepository, DeviceBehaviorsRepository, DevicePairingsRepository, DevicesRepository, FirmwaresRepository, NotificationRecipientsRepository, PositionRepository, SecurityRepository, TasksRepository, TripRepository, UserActivationsRepository, UserAppFeedbackRepository, UserAppIncidentsRepository, UserConfigurationsRepository, UserDataDeletionRequestsRepository, UserInvitationsRepository, UserRatingRequestsRepository, UserRegistrationAttemptsRepository, UsersRepository, };
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Client, ClientDeviceSetting, Device } from '../entities';
|
|
2
|
+
import { Enums } from '.';
|
|
3
|
+
interface DeviceStatusEntity {
|
|
4
|
+
imei: string;
|
|
5
|
+
clientId: number;
|
|
6
|
+
created: string;
|
|
7
|
+
sendTime: string;
|
|
8
|
+
}
|
|
9
|
+
export interface GetDeviceStatusesParams {
|
|
10
|
+
filters: {
|
|
11
|
+
imeiList?: string[];
|
|
12
|
+
clientId?: number;
|
|
13
|
+
minSendTime?: Date;
|
|
14
|
+
deviceStatus?: Enums.DeviceStatus;
|
|
15
|
+
};
|
|
16
|
+
projectionOptions?: {
|
|
17
|
+
deviceStatusProperties?: string[];
|
|
18
|
+
withClient?: boolean;
|
|
19
|
+
clientProperties?: (keyof Client)[];
|
|
20
|
+
withDevice?: boolean;
|
|
21
|
+
deviceProperties?: (keyof Device)[];
|
|
22
|
+
withClientDeviceSettings?: boolean;
|
|
23
|
+
clientDeviceSettingsProperties?: (keyof ClientDeviceSetting)[];
|
|
24
|
+
};
|
|
25
|
+
pagingOptions?: {
|
|
26
|
+
limit?: number;
|
|
27
|
+
offset?: number;
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
export interface UpsertDeviceStatusesParams {
|
|
31
|
+
items: DeviceStatusEntity[];
|
|
32
|
+
}
|
|
33
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|