|
const mongoose = require('mongoose'); |
|
const major = [0, 0]; |
|
const minor = [0, 0]; |
|
const patch = [0, 5]; |
|
|
|
const configSchema = mongoose.Schema( |
|
{ |
|
tag: { |
|
type: String, |
|
required: true, |
|
validate: { |
|
validator: function (tag) { |
|
const [part1, part2, part3] = tag.replace('v', '').split('.').map(Number); |
|
|
|
|
|
if (isNaN(part1) || isNaN(part2) || isNaN(part3)) { |
|
return false; |
|
} |
|
|
|
|
|
if (part1 < major[0] || part1 > major[1]) { |
|
return false; |
|
} |
|
if (part2 < minor[0] || part2 > minor[1]) { |
|
return false; |
|
} |
|
if (part3 < patch[0] || part3 > patch[1]) { |
|
return false; |
|
} |
|
return true; |
|
}, |
|
message: 'Invalid tag value', |
|
}, |
|
}, |
|
searchEnabled: { |
|
type: Boolean, |
|
default: false, |
|
}, |
|
usersEnabled: { |
|
type: Boolean, |
|
default: false, |
|
}, |
|
startupCounts: { |
|
type: Number, |
|
default: 0, |
|
}, |
|
}, |
|
{ timestamps: true }, |
|
); |
|
|
|
|
|
configSchema.methods.incrementCount = function () { |
|
this.startupCounts += 1; |
|
}; |
|
|
|
|
|
configSchema.statics.findByTag = async function (tag) { |
|
return await this.findOne({ tag }).lean(); |
|
}; |
|
|
|
configSchema.statics.updateByTag = async function (tag, update) { |
|
return await this.findOneAndUpdate({ tag }, update, { new: true }); |
|
}; |
|
|
|
const Config = mongoose.models.Config || mongoose.model('Config', configSchema); |
|
|
|
module.exports = { |
|
getConfigs: async (filter) => { |
|
try { |
|
return await Config.find(filter).lean(); |
|
} catch (error) { |
|
console.error(error); |
|
return { config: 'Error getting configs' }; |
|
} |
|
}, |
|
deleteConfigs: async (filter) => { |
|
try { |
|
return await Config.deleteMany(filter); |
|
} catch (error) { |
|
console.error(error); |
|
return { config: 'Error deleting configs' }; |
|
} |
|
}, |
|
}; |
|
|