1
0
forked from apxtri/apxtri
This commit is contained in:
philc 2024-04-02 21:45:18 +02:00
parent 3ad68d4872
commit 033232eba1
2 changed files with 58 additions and 69 deletions

View File

@ -232,7 +232,7 @@ Odmdb.Schema = (objectPathname, validschema, lg="en") => {
res.data.schema.properties[p].type == "object" && res.data.schema.properties[p].type == "object" &&
res.data.schema.properties[p]["$ref"] res.data.schema.properties[p]["$ref"]
) { ) {
const subschema = path.resolve(`${objectPathname}/${res.data.schema.properties[p]["$ref"]}.json`); const subschema = path.resolve(`../../${res.data.schema.properties[p]["$ref"]}.json`);
if (Object.keys(res.data.schema).length == 0) { if (Object.keys(res.data.schema).length == 0) {
res.status = 404; res.status = 404;
res.msg = "missingref"; res.msg = "missingref";
@ -250,7 +250,7 @@ Odmdb.Schema = (objectPathname, validschema, lg="en") => {
res.data.schema.properties[p].options && res.data.schema.properties[p].options &&
res.data.schema.properties[p].options["$ref"] res.data.schema.properties[p].options["$ref"]
) { ) {
const optionsfile = path.resolve(`${objectPathname}/${res.data.schema.properties[p].options["$ref"]}_${lg}.json`) const optionsfile = path.resolve(`../../${res.data.schema.properties[p].options["$ref"]}_${lg}.json`)
if (log) console.log(currentmod,"Lien vers options:", optionsfile) if (log) console.log(currentmod,"Lien vers options:", optionsfile)
if (!fs.existsSync(optionsfile)){ if (!fs.existsSync(optionsfile)){
res.status = 404; res.status = 404;

View File

@ -10,67 +10,74 @@ const isAuthenticated = require("../middlewares/isAuthenticated.js");
const router = express.Router(); const router = express.Router();
/** /**
* @api {get} /adminapi/odmdb/schemas - objects Get * @api {get} /adminapi/odmdb/schemas/:tribe - objects Get
* @apiGroup Odmdb * @apiGroup Odmdb
* @apiName getIndex * @apiName getIndex
* @apiDescription Get objects available result is store in data.apx.conf for schema conf of adminapi schema (pagans,towns,... ) and data.apx.objectnames as array of schema name. Schema related to tribe are store in data.tribe.conf and data.tribe.objectnames where tribe come from header.xtribe * @apiDescription Get objects available result is store in data.apx.conf for schema conf of adminapi schema (pagans,towns,... ) and data.apx.objectnames as array of schema name. Schema related to tribe are store in data.tribe.conf and data.tribe.objectnames where tribe come from header.xtribe
* * @apiParams {string} tribe to get list of schema related to tribe
* @apiSuccess {object} contain data.indexname * @apiSuccess {object} contain data.indexname
* @apiSuccessExample {json} Success-Response: * @apiSuccessExample {json} Success-Response:
* HTTP/1.1 200 OK * HTTP/1.1 200 OK
* {"status":200, "ref":"Odmdb", "msg":"objectslist", "data":{apx:{conf,objectnames:[]},tribe:{conf,objectnames:[]}}} * {"status":200, "ref":"Odmdb", "msg":"objectslist", "data":{apx:{conf,objectnames:[]},tribe:{conf,objectnames:[]}}}
*/ */
router.get("/schemas", checkHeaders, isAuthenticated, (req, res) => { router.get("/schemas/:tribe", checkHeaders, isAuthenticated, (req, res) => {
const data = { const data = {
tribe: req.session.header.xtribe, tribename: req.params.tribe,
apx: { conf: {}, objectnames: [] }, apx: { conf: {}, objectnames: [] },
tribe: { conf: {}, objectnames: [] }, tribe: { conf: {}, objectnames: [] },
}; };
glob.sync(`../schema/*.json`).forEach((f) => { let trb
const objectname = path.basename(f, ".json"); glob.sync(`..{/,/../${req.params.tribe}/}schema/*.json`).forEach(f=>{
const objectname=path.basename(f,".json");
console.log(f)
trb = (f.includes(req.params.tribe))? "tribe":"apx";
if (objectname == "conf") { if (objectname == "conf") {
data.apx.conf = fs.readJSONSync(f); data[trb].conf = fs.readJSONSync(f);
} else { } else {
data.apx.objectnames.push(objectname); data[trb].objectnames.push(objectname);
} }
}); })
glob
.sync(`../../${req.session.header.xtribe}/schema/*.json`)
.forEach((f) => {
const objectname = path.basename(f, ".json");
if (objectname == "conf") {
data.tribe.conf = fs.readJSONSync(f);
} else {
data.tribe.objectnames.push(objectname);
}
});
res.status(200).json({ status: 200, ref: "Odmdb", msg: "objectslist", data }); res.status(200).json({ status: 200, ref: "Odmdb", msg: "objectslist", data });
}); });
/** /**
* @api {get} /adminapi/odmdb/schema/:source/:objectname - Schema Get in the language header * @api {get} /adminapi/odmdb/schema/:tribe/:objectname - Schema Get in the language header
* @apiGroup Odmdb * @apiGroup Odmdb
* @apiName getIndex * @apiName getIndex
* @apiDescription Get schema in the requested language if login have accessright * @apiDescription Get schema in the requested language if login have accessright. object $ref or $id are replace by the relevant schema, option $ref are replace by enum list of authorised value
* *
* @apiParams {string} source (adminapi || tribe) looking for adminapi or in tribe (header.xtribe) * @apiParams {string} tribe (adminapi,smatchit,..) to looking for
* @apiParams {string} objectname requested must exist in adminapi or tribe * @apiParams {string} objectname requested must exist in adminapi or tribe
* @apiSuccess {object} contain data.schema * @apiSuccess {object} contain data.schema
* @apiSuccessExample {json} Success-Response: * @apiSuccessExample {json} Success-Response:
* HTTP/1.1 200 OK * HTTP/1.1 200 OK
* {"status":200, "ref":"Odmdb", "msg":"schema", "data":{schema,objectname,lg} * {"status":200, "ref":"Odmdb", "msg":"schema", "data":{schema,objectname,lg}
*/ */
router.get("/schema/:source/:objectname", checkHeaders, isAuthenticated, (req, res) => { router.get("/schema/:tribe/:objectname", checkHeaders, isAuthenticated, (req, res) => {
if (!['adminapi','tribe'].includes(req.params.source)){ const objectPathname=`../../${req.params.tribe}/objects/${req.params.objectname}`
res(406).json({status:406,ref:"Odmdb",msg:"mustbetribeoradminapi",data:{source:req.params.source}})
}else{
let objectPathname=`../../adminapi/objects/${req.params.objectname}`
if (req.params.source=="tribe"){
objectPathname=`../../${req.headers.xtribe}/objects/${req.params.objectname}`
}
console.log(objectPathname) console.log(objectPathname)
const retschema = Odmdb.Schema(objectPathname, true, req.header.xlang) const retschema = Odmdb.Schema(objectPathname, true, req.header.xlang)
res.status(retschema.status).json(retschema); res.status(retschema.status).json(retschema);
} });
/**
* @api {get} /adminapi/odmdb/options/:tribe/objects/options/:optionname - Get option list in header language
* @apiGroup Odmdb
* @apiName getOption
* @apiDescription Get schema in the requested language if login have accessright. object $ref or $id are replace by the relevant schema, option $ref are replace by enum list of authorised value
*
* @apiParams {string} tribe (adminapi,smatchit,..) to looking for
* @apiParams {string} objectname requested must exist in adminapi or tribe
* @apiSuccess {object} contain data.schema
* @apiSuccessExample {json} Success-Response:
* HTTP/1.1 200 OK
* {"status":200, "ref":"Odmdb", "msg":"schema", "data":{schema,objectname,lg}
*/
router.get("/options/:tribe/objects/options/:optionname", checkHeaders, isAuthenticated, (req, res) => {
const objectPathname=`../../${req.params.tribe}/objects/options/${req.params.optionname}_${req.header.xlang}.json`
if (fs.existsSync(objectPathname)){
res.status(200).json({status:200,ref:"Odmdb",msg:"optionfind",data:fs.readJsonSync(objectPathname)})
}else{
res.status(404).json({status:404,ref:"Odmdb",msg:"optionnotfound",data:{objectPathname}})
}
}); });
/** /**
@ -102,13 +109,7 @@ router.get(
isAuthenticated, isAuthenticated,
(req, res) => { (req, res) => {
console.log("passe"); console.log("passe");
// indexname = objectname_key_value.json const indexpath = `../../${req.params.tribe}/objects/${req.params.objectname}/idx/${req.params.indexname}`;
let objectLocation = "../nationchains/";
if (!conf.api.nationObjects.includes(req.params.objectname)) {
objectLocation += `tribes/${req.session.header.xtribe}/`;
// check if accessright
}
const indexpath = `${objectLocation}/${req.params.objectname}/idx/${req.params.indexname}`;
if (fs.existsSync(indexpath)) { if (fs.existsSync(indexpath)) {
res.status(200).json({ res.status(200).json({
ref: "Odmdb", ref: "Odmdb",
@ -129,13 +130,13 @@ router.get(
); );
/** /**
* @api {get} /adminapi/odmdb/rebuildidx/:objectname - index refresh all * @api {get} /adminapi/odmdb/rebuildidx/:tribe/:objectname - index refresh all
* @apiGroup Odmdb * @apiGroup Odmdb
* @apiName refreshAllIndex * @apiName refreshAllIndex
* @apiDescription Rebuild all index for an object, this can be usefull in case crash or any data conflict. * @apiDescription Rebuild all index for an object, this can be usefull in case crash or any data conflict.
* *
* @apiParam {string} objectname Mandatory * @apiParam {string} objectname Mandatory
* * @apiParam {string} tribe adminapi or tribe name (smatchit), where object is store
* @apiSuccess {object} indexfile content * @apiSuccess {object} indexfile content
* @apiSuccessExample {json} successreindex * @apiSuccessExample {json} successreindex
* HTTP/1.1 200 OK * HTTP/1.1 200 OK
@ -148,18 +149,14 @@ router.get(
* *
*/ */
router.get( router.get(
"/rebuildidx/:objectname", "/rebuildidx/:tribe/:objectname",
checkHeaders, checkHeaders,
isAuthenticated, isAuthenticated,
(req, res) => { (req, res) => {
console.log("reindex"); console.log("reindex");
// check validity and accessright // check validity and accessright
const objectPathname = conf.api.nationObjects.includes(
req.params.objectname const objectPathname=`../../${req.params.tribe}/objects/${req.params.objectname}`
)
? `../nationchains/${req.params.objectname}`
: `${conf.dirtown}/tribes/${req.session.header.xtribe}/${req.params.objectname}`;
//console.log(objectPathname);
if (!fs.existsSync(objectPathname)) { if (!fs.existsSync(objectPathname)) {
res.status(404).json({ res.status(404).json({
status: 404, status: 404,
@ -199,13 +196,13 @@ router.get(
); );
/** /**
* @api {post} /adminapi/odmdb/itm/:objectname - item Create * @api {post} /adminapi/odmdb/itm/:tribe/:objectname - item Create
* @apiGroup Odmdb * @apiGroup Odmdb
* @apiName postItm * @apiName postItm
* @apiPermission none * @apiPermission none
* @apiDescription Add an new item (data) into a collection of objectname items. Before Check data integrity with the relevant schema. * @apiDescription Add an new item (data) into a collection of objectname items. Before Check data integrity with the relevant schema.
* Then create a new primarykey. For multilanguage return see nationchains/model/lg/Odmdb_xx.json. * Then create a new primarykey. For multilanguage return see nationchains/model/lg/Odmdb_xx.json.
* * @apiParam {string} tribe adminapi or tribe name (smatchit), where object is store
* @apiParam {string} objectname Place where to create new item, schema and version are available in /objectname/conf.json * @apiParam {string} objectname Place where to create new item, schema and version are available in /objectname/conf.json
* *
* @apiBody {Object} data must pass Checkjson.js with schema * @apiBody {Object} data must pass Checkjson.js with schema
@ -225,23 +222,23 @@ router.get(
* {"status":404,"ref":"Odmdb","msg":"see nationchains/model/lg/Odmdb_xx.json","data":"object to render with msg"} * {"status":404,"ref":"Odmdb","msg":"see nationchains/model/lg/Odmdb_xx.json","data":"object to render with msg"}
* *
*/ */
router.post("/itm/:objectname", checkHeaders, isAuthenticated, (req, res) => { router.post("/itm/:tribe/:objectname", checkHeaders, isAuthenticated, (req, res) => {
// Create an item of an object with no specificities // Create an item of an object with no specificities
// if specificities then create a route / model that import odmdb // if specificities then create a route / model that import odmdb
const objectPathname=`../../${req.session.header.xtribe}/objects/${req.params.objectname}`; const objectPathname=`../../${req.params.tribe}/objects/${req.params.objectname}`;
const postitm=Odmdb.cud(objectPathname,"C",req.body,{xprofils:req.session.header.xprofils,xalias:req.session.header.xalias}); const postitm=Odmdb.cud(objectPathname,"C",req.body,{xprofils:req.session.header.xprofils,xalias:req.session.header.xalias});
res.status(postitm.status).json(postitm); res.status(postitm.status).json(postitm);
}); });
/** /**
* @api {put} /adminapi/odmdb/itm/:objectname - item Update * @api {put} /adminapi/odmdb/itm/:tribe/:objectname - item Update
* @apiGroup Odmdb * @apiGroup Odmdb
* @apiName putItm * @apiName putItm
* @apiPermission none * @apiPermission none
* @apiDescription Update an item (data) into a collection of objectname items. Before Check data integrity with the relevant schema. * @apiDescription Update an item (data) into a collection of objectname items. Before Check data integrity with the relevant schema.
* Then create a new primarykey. For multilanguage return see nationchains/model/lg/Odmdb_xx.json. * Then create a new primarykey. For multilanguage return see nationchains/model/lg/Odmdb_xx.json.
* * @apiParam {string} tribe adminapi or tribe name (smatchit), where object is store
* @apiParam {string} objectname Place where to create new item, schema and version are available in /objectname/conf.json * @apiParam {string} objectname Place where to create new item, schema and version are available in /objectname/conf.json
* *
* @apiBody {Object} data must pass Checkjson.js with schema * @apiBody {Object} data must pass Checkjson.js with schema
@ -261,10 +258,10 @@ router.post("/itm/:objectname", checkHeaders, isAuthenticated, (req, res) => {
* {"status":404,"ref":"Odmdb","msg":"see nationchains/model/lg/Odmdb_xx.json","data":"object to render with msg"} * {"status":404,"ref":"Odmdb","msg":"see nationchains/model/lg/Odmdb_xx.json","data":"object to render with msg"}
* *
*/ */
router.put("/itm/:objectname", checkHeaders, isAuthenticated, (req, res) => { router.put("/itm/:tribe/:objectname", checkHeaders, isAuthenticated, (req, res) => {
// Create an item of an object with no specificities // Create an item of an object with no specificities
// if specificities then create a route / model that import odmdb // if specificities then create a route / model that import odmdb
const objectPathname=`../../${req.session.header.xtribe}/objects/${req.params.objectname}`; const objectPathname=`../../${req.params.tribe}/objects/${req.params.objectname}`;
const postitm=Odmdb.cud(objectPathname,"U",req.body,{xprofils:req.session.header.xprofils,xalias:req.session.header.xalias}); const postitm=Odmdb.cud(objectPathname,"U",req.body,{xprofils:req.session.header.xprofils,xalias:req.session.header.xalias});
res.status(postitm.status).json(postitm); res.status(postitm.status).json(postitm);
}); });
@ -297,11 +294,11 @@ router.get(
); );
/** /**
* @api {get} /adminapi/odmdb/itm/:objectname/:primaryindex - item Get * @api {get} /adminapi/odmdb/itm/:tribe/:objectname/:primaryindex - item Get
* @apiGroup Odmdb * @apiGroup Odmdb
* @apiName getItemFromId * @apiName getItemFromId
* @apiDescription Get itm for a primaryid of an object * @apiDescription Get itm for a primaryid of an object
* * @apiParam {string} tribe adminapi or tribe name (smatchit), where object is store
* @apiParam {String} objectname name Mandatory if in conf.nationObjects then file is into nationchains/ else in /tribes/xtribe/objectname * @apiParam {String} objectname name Mandatory if in conf.nationObjects then file is into nationchains/ else in /tribes/xtribe/objectname
* @apiParam {String} primaryindex the unique id where item is store * @apiParam {String} primaryindex the unique id where item is store
* *
@ -319,19 +316,11 @@ router.get(
*/ */
// indexname = objectname_key_value.json // indexname = objectname_key_value.json
router.get( router.get(
"/itm/:objectname/:primaryindex", "/itm/:tribe/:objectname/:primaryindex",
checkHeaders, checkHeaders,
isAuthenticated, isAuthenticated,
(req, res) => { (req, res) => {
const objectName = req.params.objectname; const objectpath = `../../${req.params.tribe}/objects/${req.params.objectname}/itm/${req.params.primaryindex}.json`;
const objectId = req.params.primaryindex;
let objectLocation = "../nationchains/";
if (!conf.api.nationObjects.includes(objectName)) {
objectLocation += `tribes/${req.session.header.xtribe}/${objectName}`;
// check if accessright on object on item
// in case not res.status(403)
}
const objectpath = `${objectLocation}/${objectName}/itm/${objectId}`;
if (fs.existsSync(objectpath)) { if (fs.existsSync(objectpath)) {
res.status(200).json({ data: fs.readJsonSync(objectpath) }); res.status(200).json({ data: fs.readJsonSync(objectpath) });