const glob = require("glob"); const path = require("path"); const fs = require("fs-extra"); //const config = require( '../tribes/townconf.js' ); const check = require(`../nationchains/socialworld/contracts/checkdata.js`); /* This manage Objects for indexing and check and act to CRUD objectpath/objects/schema/objectName.json /objectNames/searchindes/objectName_valueofkey_uuildlist.json /objectNames/uuid.json */ const Odmdb = {}; /* Input: metaobject => data mapper of Key: Value objname + an object {} + action check => get a valid or not answer objname + an object {} + action search => apply matching algo to find probalistic object id objname + action index => update /searcindex of objects concern */ Odmdb.schema = (objectPath, objectName) => { // Return schema if exist and objectpath contain objectName { status:200;data:schema} if (!fs.existsSync(`${objectPath}/${objectName}`)) return { status: 404, info: "|odmdb|objectpathnamedoesnotexist", moreinfo: `${objectPath}/${objectName}`, }; if (!fs.existsSync(`${objectPath}/schema/${objectName}.json`)) { return { status: 404, info: `|odmdb|schemanotfound`, moreinfo: `file not found ${objectPath}/schema/${objectName}.json`, }; } else { return { status: 200, data: fs.readJsonSync(`${objectPath}/schema/${objectName}.json`), }; } }; Odmdb.check = (objectPath, objectName, data) => { /* @objectPath path to the folder that contain /objects/objectName/ /objectsInfo/objectName_lg.json /objectsMeta/objectName.json @objectName name of object @data data to check based on objectsMeta definition */ const schema = Odmdb.schema(objectPath, objectName); if (schema.status != 200) return schema; console.log("SCHEMA for checking:"); console.log(schema.data); console.log("DATA to check:"); console.log(data); const validate = checkdata.schema.data(schema.data,data) /*const ajv = new Ajv({strict:"log"}); const validate = ajv.compile(schema.data); const valid = validate(data) console.log("valid:",valid) */ }; Odmdb.search = (objectPath, objectName, search) => { /* @search= { txt: string, algo: match | pattern | fuzzy fieldstring:[list of field], indexfilter:{index1:[val1,val2 | ] } } Return data:[uuids] example: search exact match hill in townId heavy search={txt:"hill",algo:"match",fieldstring:"toxnId"} light search={txt:"hill", algo:"match", indexfilter:{"key":"townId","value":[]}} light search={txt:"hill", algo:"match", indexfilter:{"key":"nationId","value":"ants"}} */ const schema = Odmdb.schema(objectPath, objectName); if (schema.status != 200) return schema; }; Odmdb.get = (objectPath, objectName, uuidprimarykeyList, fieldList) => { /* @uuidprimarykeyList list of uuid requested @fieldList key to return for each object Return objectName {status:200; data:{found:[{primarykey,field}],notfound:[uuid]} if all primarykey exist then data.notfound does not exist if all primarykey does not exist data.found does not exist */ const res = { status: 200, data: {} }; uuidprimarykeyList.forEach((id) => { if (fs.existsSync(`${objectPath}/${objectName}/${id}.json`)) { if (!res.data.found) res.data.found = []; const objectdata = fs.readJsonSync( `${objectPath}/${objectName}/${id}.json` ); if (!fieldList) { res.data.found.push(objectdata); } else { const objinfo = {}; fieldlList.forEach((k) => { if (objectdata[k]) objinfo[k] = objectdata[k]; }); res.data.found.push(objinfo); } } else { if (!res.data.notfound) res.data.notfound = []; } }); return res; }; Odmdb.create = (objectPath, objectName, data) => { /* Create an objects data into objectName @objectPath path to the folder that contain /objects/objectName/ /objectsInfo/objectName_lg.json /objectsMeta/objectName.json @objectName name of object @data data to check based on objectsMeta definition */ }; Odmdb.update = (objectPath, objectName, data) => { /* Create an objects data into objectName @objectPath path to the folder that contain /objects/objectName/ /objectsInfo/objectName_lg.json /objectsMeta/objectName.json @objectName name of object @data data to check based on objectsMeta definition */ }; Odmdb.delete = (objectPath, objectName, data) => { /* Create an objects data into objectName @objectPath path to the folder that contain /objects/objectName/ /objectsInfo/objectName_lg.json /objectsMeta/objectName.json @objectName name of object @data data to check based on objectsMeta definition */ }; console.log("test Odmdb"); console.log( Odmdb.check( "/media/phil/usbfarm/apxtrib/nationchains/socialworld/objects", "nations", { nationId: "123", status: "unchain" } ) ); module.exports = Odmdb;