@openhps/core
Version:
Open Hybrid Positioning System - Core component
54 lines (48 loc) • 1.79 kB
text/typescript
import { SerializableMember, SerializableObject } from '../data/decorators';
import { DataObject } from '../data/object/DataObject';
import { DataService } from './DataService';
import { v5 as uuidv5 } from 'uuid';
export class NodeDataService<T extends NodeData | NodeData> extends DataService<string, T> {
/**
* Find node data
* @param {string} nodeUID Node identifier
* @param {DataObject} dataObject Data object to get node data for
* @returns {Promise<any>} Promise of node data for data object
*/
findData(nodeUID: string, dataObject: DataObject | string): Promise<any> {
return new Promise<any>((resolve) => {
this.findByUID(this.getUID(nodeUID, typeof dataObject === 'string' ? dataObject : dataObject.uid))
.then((nodeData) => {
resolve(nodeData.data);
})
.catch(() => {
resolve(undefined);
});
});
}
insertData(nodeUID: string, dataObject: DataObject | string, data: any): Promise<T> {
const uid = this.getUID(nodeUID, typeof dataObject === 'string' ? dataObject : dataObject.uid);
return this.insert(uid, new NodeData(uid, data) as T);
}
protected getUID(nodeUID: string, dataObjectUID: string): string {
return uuidv5(dataObjectUID + nodeUID, '97b9cc7e-19ca-4f20-8190-161d7b39e93a');
}
}
()
export class NodeData {
()
uid: string;
({
serializer: (data) => {
return data;
},
deserializer: (json) => {
return json;
},
})
data: any;
constructor(uid?: string, data: any = {}) {
this.uid = uid;
this.data = data;
}
}