🏗️ Fixed a mongo update query

This commit is contained in:
2023-11-27 02:14:16 -05:00
parent f35e3ccbe0
commit b2b35aedc0

View File

@@ -8,7 +8,7 @@ import {
} from "moleculer"; } from "moleculer";
import { DbMixin } from "../mixins/db.mixin"; import { DbMixin } from "../mixins/db.mixin";
import Settings from "../models/settings.model"; 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; const ObjectId = require("mongoose").Types.ObjectId;
export default class SettingsService extends Service { export default class SettingsService extends Service {
@@ -57,7 +57,6 @@ export default class SettingsService extends Service {
}> }>
) { ) {
try { try {
console.log(ctx.params);
let query = {}; let query = {};
const { settingsKey, settingsObjectId } = const { settingsKey, settingsObjectId } =
ctx.params; ctx.params;
@@ -68,6 +67,16 @@ export default class SettingsService extends Service {
username, username,
password, password,
} = ctx.params.settingsPayload; } = 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 // Update, depending what key was passed in params
// 1. Construct the update query // 1. Construct the update query
@@ -79,13 +88,7 @@ export default class SettingsService extends Service {
query = { query = {
bittorrent: { bittorrent: {
client: { client: {
host: { ...(host && host),
hostname,
protocol,
port,
username,
password,
},
name: "qbittorrent", name: "qbittorrent",
}, },
}, },
@@ -98,20 +101,21 @@ export default class SettingsService extends Service {
const { hubs, airDCPPUserSettings } = const { hubs, airDCPPUserSettings } =
ctx.params.settingsPayload; ctx.params.settingsPayload;
query = { query = {
directConnect: { ...(undefinedPropsInHostname.length ===
client: { 0 && {
host: { $set: {
hostname, "directConnect.client.host":
protocol, host,
port,
username,
password,
},
hubs,
airDCPPUserSettings,
}, },
}, }),
...(!isNil(hubs) && {
$set: {
"directConnect.client.hubs":
hubs,
},
}),
}; };
console.log(JSON.stringify(query, null, 4));
break; break;
default: default:
@@ -124,17 +128,20 @@ export default class SettingsService extends Service {
setDefaultsOnInsert: true, setDefaultsOnInsert: true,
returnDocument: "after", returnDocument: "after",
}; };
const filter = { const filter = settingsObjectId
_id: settingsObjectId, ? { _id: settingsObjectId }
}; : {};
// 3. Execute the mongo query // 3. Execute the mongo query
const result = await Settings.findOneAndUpdate( const result = await Settings.findOneAndUpdate(
{}, filter,
query, query,
options options
); );
return result; return result;
} catch (err) {} } catch (err) {
return err;
}
}, },
}, },
deleteSettings: { deleteSettings: {