diff --git a/models/settings.model.ts b/models/settings.model.ts index 1c11548..a60f75d 100644 --- a/models/settings.model.ts +++ b/models/settings.model.ts @@ -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); diff --git a/services/settings.service.ts b/services/settings.service.ts index 9ca5638..cf65ab3 100644 --- a/services/settings.service.ts +++ b/services/settings.service.ts @@ -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; }, },