🌊 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 paginate = require("mongoose-paginate-v2");
const HostSchema = mongoose.Schema({
_id: false,
username: String,
password: String,
hostname: String,
port: String,
protocol: String,
});
const SettingsScehma = mongoose.Schema({
directConnect: {
client: {
host: {
username: String,
password: String,
hostname: String,
port: String,
protocol: String,
},
host: HostSchema,
airDCPPUserSettings: Object,
hubs: Array,
},
},
bittorrent: {
client: {
name: String,
host: HostSchema,
},
},
});
const Settings = mongoose.model("Settings", SettingsScehma);

View File

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