From 973bbe93be56861979e17c78d8b7700be2574620 Mon Sep 17 00:00:00 2001 From: Rishi Ghan Date: Tue, 23 Nov 2021 09:37:45 -0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=8D=92=20Selective=20update=20through=20f?= =?UTF-8?q?indOneAndUpdate=20for=20settings?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- models/settings.model.ts | 17 +++++---- services/settings.service.ts | 73 +++++++++++++++++++++++++++--------- 2 files changed, 64 insertions(+), 26 deletions(-) diff --git a/models/settings.model.ts b/models/settings.model.ts index b193eaa..7e12dc0 100644 --- a/models/settings.model.ts +++ b/models/settings.model.ts @@ -4,14 +4,15 @@ const paginate = require("mongoose-paginate-v2"); const SettingsScehma = mongoose.Schema({ directConnect: { client: { - name: String, - version: String, - airdcppUserSettings: Object, - hostname: String, - protocol: String, - username: String, - password: String, - hubs: [{}], + host: { + username: String, + password: String, + hostname: String, + protocol: String, + }, + airDCPPUserSettings: Object, + + hubs: Array, }, }, }); diff --git a/services/settings.service.ts b/services/settings.service.ts index 5f1b256..a094e13 100644 --- a/services/settings.service.ts +++ b/services/settings.service.ts @@ -8,7 +8,17 @@ import { } from "moleculer"; import { DbMixin } from "../mixins/db.mixin"; import Settings from "../models/settings.model"; -import { isEmpty } from "lodash"; +import { + isEmpty, + isUndefined, + pick, + pickBy, + identity, + map, + omitBy, + isNil, +} from "lodash"; +const ObjectId = require("mongoose").Types.ObjectId; export default class SettingsService extends Service { // @ts-ignore @@ -45,31 +55,58 @@ export default class SettingsService extends Service { params: {}, async handler( ctx: Context<{ - settingsObject: { - hostname: string; - protocol: string; - username: string; - password: string; + settingsPayload: { + host: object; + airDCPPUserSettings: object; + hubs: []; }; - airdcppUserSettings: object; + settingsObjectId: string; }> ) { - console.log(ctx.params); - const { settingsObject, airdcppUserSettings } = - ctx.params; + console.log("varan bhat", ctx.params); + const { host, airDCPPUserSettings, hubs } = + ctx.params.settingsPayload; + let query = { + host, + airDCPPUserSettings, + hubs, + }; + const keysToUpdate = pickBy(query, identity); + let updateQuery = {}; - const result = await Settings.create({ - directConnect: { - client: { - ...settingsObject, - airdcppUserSettings, - }, - }, + map(Object.keys(keysToUpdate), (key) => { + updateQuery[`directConnect.client.${key}`] = + query[key]; }); - console.log("ASDASD", result); + const options = { + upsert: true, + new: true, + setDefaultsOnInsert: true, + }; + const filter = { + _id: new ObjectId( + ctx.params.settingsObjectId + ), + }; + const result = Settings.findOneAndUpdate( + filter, + { $set: updateQuery }, + options + ); + return result; }, }, + deleteSettings: { + rest: "POST /deleteSettings", + params: {}, + async handler(ctx: Context<{}>) { + return await Settings.remove( + {}, + (result) => result + ); + }, + }, }, methods: {}, },