public toDeviceResource()

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;
    }