From b2b35aedc0e7d6ecfb0fd7b3a705c61fa8ed7406 Mon Sep 17 00:00:00 2001 From: Rishi Ghan Date: Mon, 27 Nov 2023 02:14:16 -0500 Subject: [PATCH] =?UTF-8?q?=F0=9F=8F=97=EF=B8=8F=20Fixed=20a=20mongo=20upd?= =?UTF-8?q?ate=20query?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- services/settings.service.ts | 59 ++++++++++++++++++++---------------- 1 file changed, 33 insertions(+), 26 deletions(-) diff --git a/services/settings.service.ts b/services/settings.service.ts index 95c5e4e..2e9ee64 100644 --- a/services/settings.service.ts +++ b/services/settings.service.ts @@ -8,7 +8,7 @@ import { } from "moleculer"; import { DbMixin } from "../mixins/db.mixin"; import Settings from "../models/settings.model"; -import { isEmpty, pickBy, identity, map } from "lodash"; +import { isEmpty, pickBy, identity, map, isNil } from "lodash"; const ObjectId = require("mongoose").Types.ObjectId; export default class SettingsService extends Service { @@ -57,7 +57,6 @@ export default class SettingsService extends Service { }> ) { try { - console.log(ctx.params); let query = {}; const { settingsKey, settingsObjectId } = ctx.params; @@ -68,6 +67,16 @@ export default class SettingsService extends Service { username, password, } = ctx.params.settingsPayload; + const host = { + hostname, + protocol, + port, + username, + password, + }; + const undefinedPropsInHostname = Object.values( + host + ).filter((value) => value === undefined); // Update, depending what key was passed in params // 1. Construct the update query @@ -79,13 +88,7 @@ export default class SettingsService extends Service { query = { bittorrent: { client: { - host: { - hostname, - protocol, - port, - username, - password, - }, + ...(host && host), name: "qbittorrent", }, }, @@ -98,20 +101,21 @@ export default class SettingsService extends Service { const { hubs, airDCPPUserSettings } = ctx.params.settingsPayload; query = { - directConnect: { - client: { - host: { - hostname, - protocol, - port, - username, - password, - }, - hubs, - airDCPPUserSettings, + ...(undefinedPropsInHostname.length === + 0 && { + $set: { + "directConnect.client.host": + host, }, - }, + }), + ...(!isNil(hubs) && { + $set: { + "directConnect.client.hubs": + hubs, + }, + }), }; + console.log(JSON.stringify(query, null, 4)); break; default: @@ -124,17 +128,20 @@ export default class SettingsService extends Service { setDefaultsOnInsert: true, returnDocument: "after", }; - const filter = { - _id: settingsObjectId, - }; + const filter = settingsObjectId + ? { _id: settingsObjectId } + : {}; + // 3. Execute the mongo query const result = await Settings.findOneAndUpdate( - {}, + filter, query, options ); return result; - } catch (err) {} + } catch (err) { + return err; + } }, }, deleteSettings: {