2023-03-27 05:52:21 +00:00
|
|
|
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`);
|
2023-01-22 09:53:09 +00:00
|
|
|
|
2023-03-27 05:52:21 +00:00
|
|
|
/* 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
|
2023-01-22 09:53:09 +00:00
|
|
|
|
2023-03-27 05:52:21 +00:00
|
|
|
*/
|
|
|
|
const Odmdb = {};
|
2023-01-22 09:53:09 +00:00
|
|
|
/*
|
|
|
|
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
|
|
|
|
|
|
|
|
*/
|
2023-03-27 05:52:21 +00:00
|
|
|
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"}}
|
2023-01-22 09:53:09 +00:00
|
|
|
|
2023-03-27 05:52:21 +00:00
|
|
|
*/
|
|
|
|
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;
|