in source/packages/services/assetlibrary/src/devices/devices.assembler.ts [243:323]
public toDeviceResource(item: DeviceItem, version: string): DeviceBaseResource {
logger.debug(
`device.assembler toDeviceResource: in: item: ${JSON.stringify(
item
)}, version:${version}`
);
if (item === undefined) {
logger.debug(`device.assembler toDeviceResource: exit: item: undefined`);
return undefined;
}
const assembleRelated = (from: RelatedEntityArrayMap, to: StringArrayMap) => {
if (from) {
for (const [relation, entities] of Object.entries(from)) {
if (to[relation] === undefined) {
to[relation] = [];
}
to[relation].push(...entities.map((entity) => entity.id));
}
}
};
let resource: DeviceBaseResource;
if (version.startsWith('1.')) {
// v1 specific...
resource = new Device10Resource();
const typedResource: Device10Resource = resource;
// populate version specific device info
if (item.groups) {
typedResource.groups = {};
assembleRelated(item.groups?.in, typedResource.groups);
assembleRelated(item.groups?.out, typedResource.groups);
} else {
delete typedResource.groups;
}
if (item.devices) {
typedResource.devices = {};
assembleRelated(item.devices?.in, typedResource.devices);
assembleRelated(item.devices?.out, typedResource.devices);
} else {
delete typedResource.devices;
}
} else {
// v2 specific...
resource = new Device20Resource();
const typedResource: Device20Resource = resource;
// populate version specific device info)
typedResource.groups = {};
if (item.groups?.in) {
typedResource.groups.in = {};
}
assembleRelated(item.groups?.in, typedResource.groups.in);
if (item.groups?.out) {
typedResource.groups.out = {};
}
assembleRelated(item.groups?.out, typedResource.groups.out);
if (item.devices?.in) {
typedResource.devices.in = {};
}
assembleRelated(item.devices?.in, typedResource.devices.in);
if (item.devices?.out) {
typedResource.devices.out = {};
}
assembleRelated(item.devices?.out, typedResource.devices.out);
}
// common properties
Object.keys(item).forEach((key) => {
if (key !== 'groups' && key !== 'devices') {
resource[key] = item[key];
}
});
logger.debug(
`device.assembler toDeviceResource: exit: resource: ${JSON.stringify(resource)}`
);
return resource;
}