UNPKG

metusbase

Version:

This package is an NPM module that makes using JSON and Mongo fast, secure and easy. Developer: mete52

90 lines (89 loc) 2.75 kB
import { Schema, model } from "mongoose"; const DataSchema = new Schema({ key: { type: String, required: true, unique: true }, value: { type: Schema.Types.Mixed, default: {} }, }); const DataModel = model("metusbase", DataSchema); export class MongoDatabase { async set(key, value) { const existing = await DataModel.findOne({ key }); if (existing) { existing.value = value; await existing.save(); } else { await DataModel.create({ key, value }); } } async get(key) { const data = await DataModel.findOne({ key }); return data ? data.value : null; } async getAll() { const all = await DataModel.find(); const result = {}; all.forEach((doc) => { result[doc.key] = doc.value; }); return result; } async has(key) { const exists = await DataModel.exists({ key }); return !!exists; } async delete(key) { await DataModel.deleteOne({ key }); } async deleteAll(message) { if (!message) { return "You must provide a confirmation message to delete all data."; } await DataModel.deleteMany({}); } async push(key, value) { const existing = await DataModel.findOne({ key }); if (!existing) { await DataModel.create({ key, value: [value] }); return; } if (!Array.isArray(existing.value)) { existing.value = []; } existing.value.push(value); await existing.save(); } async unpush(key, value) { const existing = await DataModel.findOne({ key }); if (!existing || !Array.isArray(existing.value)) return; if (value === undefined) { existing.value = []; } else { existing.value = existing.value.filter((item) => item !== value); } await existing.save(); } async add(key, value) { const existing = await DataModel.findOne({ key }); if (!existing) { await DataModel.create({ key, value }); } else { const current = typeof existing.value === "number" ? existing.value : 0; existing.value = current + value; await existing.save(); } } async subtract(key, value) { const existing = await DataModel.findOne({ key }); if (!existing) { await DataModel.create({ key, value: -value }); } else { const current = typeof existing.value === "number" ? existing.value : 0; existing.value = current - value; await existing.save(); } } }