From 9fd3ae1c227bceaf78b199d956ebd9dec54cdd01 Mon Sep 17 00:00:00 2001 From: ShreyashKira Date: Wed, 5 Aug 2020 21:31:45 +0530 Subject: [PATCH 1/3] support for . notation in set command --- src/Main.js | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/src/Main.js b/src/Main.js index 0d7f192..121fd9b 100644 --- a/src/Main.js +++ b/src/Main.js @@ -3,7 +3,7 @@ const Schema = require("./Schema"); const Error = require("./Error"); const fs = require("fs"); const Util = require("./Util"); - +const _ = require("lodash"); /** * Quick mongodb wrapper */ @@ -36,6 +36,7 @@ class Database extends Base { async set(key, value) { if (!Util.isKey(key)) throw new Error("Invalid key specified!", "KeyError"); if (!Util.isValue(value)) throw new Error("Invalid value specified!", "ValueError"); + if(!key.includes('.')) { let raw = await this.schema.findOne({ ID: key }); @@ -57,6 +58,32 @@ class Database extends Base { }); return raw.data; } + } else { + const subkey = key.split('.').shift(); + let raw = await this.schema.findOne({ + ID: subkey + }); + if(!raw) { + const setValue = _.set({}, key.split('.').slice(1).join('.'), value); + let data = new this.schema({ + ID: subkey, + data: setValue + }); + await data.save() + .catch(e => { + return this.emit("error", e); + }); + return data.data; + } else { + const setValue = _.set(raw, key.split('.').slice(1).join('.'), value); + raw.data = setValue; + await raw.save() + .catch(e => { + return this.emit("error", e); + }); + return raw.data; + } + } } /** From 205cca563007a1389a5335ce327be8e780567b48 Mon Sep 17 00:00:00 2001 From: ShreyashKira Date: Wed, 5 Aug 2020 21:42:58 +0530 Subject: [PATCH 2/3] get data by . notation --- src/Main.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/Main.js b/src/Main.js index 121fd9b..573b860 100644 --- a/src/Main.js +++ b/src/Main.js @@ -127,12 +127,27 @@ class Database extends Base { */ async get(key) { if (!Util.isKey(key)) throw new Error("Invalid key specified!", "KeyError"); + if(!key.includes('.')) { let get = await this.schema.findOne({ ID: key }) .catch(e => { return this.emit("error", e); }); if (!get) return null; return get.data; + } else { + const subkey = key.split('.').shift(); + let get = await this.schema.findOne({ ID: subkey }) + .catch(e => { + return this.emit("error", e); + }); + if (!get) return null; + const data = key.split('.').slice(1).reduce((a, b) => a[b], get) + .catch(e => { + return this.emit("error", e); + }); + if(!data) return null; + return data; + } } /** From 502917542200c4e5f9fdcf959138d8048cafa8ee Mon Sep 17 00:00:00 2001 From: ShreyashKira Date: Thu, 6 Aug 2020 19:01:29 +0530 Subject: [PATCH 3/3] solve small get error now everything is tested --- src/Main.js | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/Main.js b/src/Main.js index 573b860..9c99908 100644 --- a/src/Main.js +++ b/src/Main.js @@ -141,10 +141,7 @@ class Database extends Base { return this.emit("error", e); }); if (!get) return null; - const data = key.split('.').slice(1).reduce((a, b) => a[b], get) - .catch(e => { - return this.emit("error", e); - }); + const data = key.split('.').slice(1).reduce((a, b) => a[b], get.data) if(!data) return null; return data; }