Files
freeplanet_serverside/src/server/models/settings.js
Paolo Arena d62888083b Circuits...
Circuits Fido e Max Qta
Fixed error eslint: 7.0.0 is OK
2022-09-11 11:45:33 +02:00

182 lines
4.2 KiB
JavaScript
Executable File

const mongoose = require('mongoose').set('debug', process.env.DEBUG)
const Schema = mongoose.Schema;
const tools = require('../tools/general');
const { ObjectID } = require('mongodb');
mongoose.Promise = global.Promise;
mongoose.level = "F";
// Resolving error Unknown modifier: $pushAll
mongoose.plugin(schema => {
schema.options.usePushEach = true
});
const SettingsSchema = new Schema({
idapp: {
type: String,
},
key: {
type: String,
},
type: {
type: Number,
},
value_str: {
type: String,
},
value_date: {
type: Date,
},
value_num: {
type: Number,
},
value_bool: {
type: Boolean,
},
serv: {
type: Boolean,
default: false
},
crypted: {
type: Boolean,
default: false
}
});
SettingsSchema.statics.getFieldsForSearch = function () {
return [{ field: 'key', type: tools.FieldType.string },
{ field: 'value_str', type: tools.FieldType.string }, { field: 'value_num', type: tools.FieldType.number }]
};
SettingsSchema.statics.executeQueryTable = function (idapp, params) {
params.fieldsearch = this.getFieldsForSearch();
return tools.executeQueryTable(this, idapp, params);
};
SettingsSchema.statics.getValDbSettings = function (idapp, key, def) {
return Settings.findOne({ idapp, key })
.then((myrec) => {
// console.log('getValDbSettings', myrec, 'idapp', idapp);
if (!!myrec) {
if (myrec.type === tools.FieldType.date)
return myrec.value_date;
else if ((myrec.type === tools.FieldType.number) || (myrec.type === tools.FieldType.hours))
return myrec.value_num;
else if (myrec.type === tools.FieldType.boolean)
return myrec.value_bool;
else if (myrec.type === tools.FieldType.crypted)
return tools.decryptdata(myrec.value_str);
else
return myrec.value_str;
} else {
return def
}
}).catch((err) => {
console.error('getValDbSettings', err);
return def;
});
};
SettingsSchema.statics.DuplicateAllRecords = async function (idapporig, idappdest) {
return await tools.DuplicateAllRecords(this, idapporig, idappdest);
};
SettingsSchema.statics.findAllIdApp = async function (idapp, serv, crypted = false) {
const Settings = this;
try {
let myfind = '';
if (serv) {
myfind = {idapp, serv};
} else
myfind = {idapp};
// myfind = {...myfind, $or: [{ crypted: { $exists: false } }, { crypted: { $exists: true, $eq: crypted } }]};
const arrorig = await Settings.find(myfind).lean();
let myarr = []
if (!crypted) {
for (let rec of arrorig) {
if (rec.crypted) {
rec.value_str = ''
}
myarr.push({...rec});
}
} else {
myarr = [...arrorig];
}
return myarr;
}catch (e) {
console.error('Settings: findAllIdApp', e);
return null;
}
};
SettingsSchema.statics.setKeyNum = async function (idapp, key, value) {
const Settings = this;
let myrec = await Settings.findOne({ idapp, key });
if (!myrec) {
myrec = new Settings({ key });
myrec._id = new ObjectID();
myrec.idapp = idapp;
myrec.type = tools.FieldType.number;
myrec.value_num = value;
return await myrec.save();
} else {
myrec = await Settings.findOneAndUpdate({ idapp, key }, { $set: { value_num: value } }, { new: false });
}
return myrec
};
SettingsSchema.statics.setBool = async function (idapp, key, valbool) {
const Settings = this;
let myrec = await Settings.findOne({ idapp, key });
if (!myrec) {
myrec = new Settings({ key });
myrec._id = new ObjectID();
myrec.idapp = idapp;
myrec.type = tools.FieldType.boolean;
myrec.value_bool = valbool;
return await myrec.save();
} else {
myrec = await Settings.findOneAndUpdate({ idapp, key }, { $set: { value_bool: valbool } }, { new: false });
}
return myrec
};
SettingsSchema.statics.getKeyNum = async function (idapp, key, mydefault) {
const Settings = this;
const ret = await Settings.findOne({ idapp, key });
if (!!ret) {
return ret.value_num;
} else {
return mydefault;
}
};
const Settings = mongoose.model('Settings', SettingsSchema);
module.exports = { Settings };