const path = require('path');
nv_create_dirs('./nv-content/data/');
const db_usermeta = new NV_Database(path.join(process.cwd(),"./nv-content/data/usermeta.json"),{
columns: ['user_id','key','value'],
index: 'id',
references: ['value'],
});
nvdb.usermeta = db_usermeta;
const db_mediameta = new NV_Database(path.join(process.cwd(),"./nv-content/data/mediameta.json"),{
columns: ['media_id','key','value'],
index: 'id',
references: ['value'],
});
nvdb.mediameta = db_mediameta;
const db_postmeta = new NV_Database(path.join(process.cwd(),"./nv-content/data/postmeta.json"),{
columns: ['post_id','key','value'],
index: 'id',
references: ['value'],
});
nvdb.postmeta = db_postmeta;
const db_termmeta = new NV_Database(path.join(process.cwd(),"./nv-content/data/termmeta.json"),{
columns: ['term_id','key','value'],
index: 'id',
references: ['value'],
});
nvdb.termmeta = db_termmeta;
const db_commentmeta = new NV_Database(path.join(process.cwd(),"./nv-content/data/commentmeta.json"),{
columns: ['comment_id','key','value'],
index: 'id',
references: ['value'],
});
nvdb.commentmeta = db_commentmeta;
var get_database = meta_type => {
switch(meta_type) {
case 'user': return db_usermeta;
case 'media': return db_mediameta;
case 'post': return db_postmeta;
case 'term': return db_termmeta;
case 'comment': return db_commentmeta;
default: return null;
}
}
global.update_metadata = (meta_type, object_id, key, value)=>{
var db_meta = get_database(meta_type);
if (!db_meta || !object_id || !key ) {return new NV_Error('参数错误');}
var filter_func = r=>r[`${meta_type}_id`] == object_id && r.key == key;
filter_func._nvdb_reference = true;
var meta = db_meta.find(filter_func)[0];
value = apply_filters(`update_${meta_type}_metadata`, value, object_id, key);
if (meta) {
db_meta.setColumn(filter_func,{value})
} else {
var new_meta = {key,value};
new_meta[`${meta_type}_id`] = object_id;
db_meta.insert(new_meta);
}
}
global.get_metadata = (meta_type, object_id, key)=>{
var db_meta = get_database(meta_type);
if ( !db_meta || !object_id ) {return new NV_Error('参数错误');}
var result = null;
if ( key == undefined || key == null ) {
//没key,所有这个object_id的meta
result = {};
var filter_func = r=>r[`${meta_type}_id`] == object_id;
filter_func._nvdb_reference = true;
db_meta.find(filter_func).forEach(meta=>{
result[meta.key] = meta.value;
})
} else {
//有key:val
var filter_func = r=>r[`${meta_type}_id`] == object_id && r.key == key;
filter_func._nvdb_reference = true;
var meta = db_meta.find(filter_func)[0];
if (meta) {
result = meta.value;
}
}
return apply_filters(`get_${meta_type}_metadata`,nv_remove_reference(result), object_id, key);
}
global.delete_metadata = (meta_type, object_id, key)=>{
var db_meta = get_database(meta_type);
if ( !db_meta || !object_id ) {return new NV_Error('参数错误');}
if ( key == undefined || key == null ) {
//没key,清除所有
var filter_func = r=>r[`${meta_type}_id`] == object_id
} else {
//有key,清指定
var filter_func = r=>r[`${meta_type}_id`] == object_id && r.key == key
}
filter_func._nvdb_reference = true;
db_meta.drop(filter_func);
do_action(`delete_${meta_type}_metadata`, object_id, key);
}