🌊 Modified settings model schema

This commit is contained in:
2023-09-13 22:09:25 -05:00
parent f4e2db5a5f
commit 1fff931941
2 changed files with 79 additions and 32 deletions

View File

@@ -1,21 +1,28 @@
const mongoose = require("mongoose"); const mongoose = require("mongoose");
const paginate = require("mongoose-paginate-v2"); const paginate = require("mongoose-paginate-v2");
const SettingsScehma = mongoose.Schema({ const HostSchema = mongoose.Schema({
directConnect: { _id: false,
client: {
host: {
username: String, username: String,
password: String, password: String,
hostname: String, hostname: String,
port: String, port: String,
protocol: String, protocol: String,
}, });
const SettingsScehma = mongoose.Schema({
directConnect: {
client: {
host: HostSchema,
airDCPPUserSettings: Object, airDCPPUserSettings: Object,
hubs: Array, hubs: Array,
}, },
}, },
bittorrent: {
client: {
name: String,
host: HostSchema,
},
},
}); });
const Settings = mongoose.model("Settings", SettingsScehma); const Settings = mongoose.model("Settings", SettingsScehma);

View File

@@ -42,43 +42,83 @@ export default class SettingsService extends Service {
params: {}, params: {},
async handler( async handler(
ctx: Context<{ ctx: Context<{
settingsPayload: { settingsPayload?: {
host: object; protocol: string;
airDCPPUserSettings: object; hostname: string;
hubs: []; port: string;
username: string;
password: string;
_id?: string;
airDCPPUserSettings?: object;
hubs?: [];
}; };
settingsObjectId: string; settingsObjectId?: string;
settingsKey: string;
}> }>
) { ) {
console.log("varan bhat", ctx.params); let query = {};
const { host, airDCPPUserSettings, hubs } = const { settingsKey, settingsObjectId } = ctx.params;
const { hostname, protocol, port, username, password } =
ctx.params.settingsPayload; ctx.params.settingsPayload;
let query = {
host,
airDCPPUserSettings,
hubs,
};
const keysToUpdate = pickBy(query, identity);
let updateQuery = {};
map(Object.keys(keysToUpdate), (key) => { switch (settingsKey) {
updateQuery[`directConnect.client.${key}`] = case "bittorrent":
query[key]; console.log(
}); `Recieved settings for ${settingsKey}, building query...`
);
query = {
bittorrent: {
client: {
host: {
hostname,
protocol,
port,
username,
password,
},
name: "qbittorrent",
},
},
};
break;
case "directConnect":
const { hubs, airDCPPUserSettings } =
ctx.params.settingsPayload;
query = {
directConnect: {
client: {
host: {
hostname,
protocol,
port,
username,
password,
},
hubs,
airDCPPUserSettings,
},
},
};
break;
default:
return false;
}
const options = { const options = {
upsert: true, upsert: true,
new: true,
setDefaultsOnInsert: true, setDefaultsOnInsert: true,
}; };
const filter = { const filter = {
_id: new ObjectId(ctx.params.settingsObjectId), _id: settingsObjectId,
}; };
const result = Settings.findOneAndUpdate(
filter, const result = await Settings.updateOne(
{ $set: updateQuery }, {},
query,
options options
); );
console.log(result);
return result; return result;
}, },
}, },