| 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' }; |
| } |
| }, |
| }; |
|
|