| const { logger } = require('@librechat/data-schemas'); |
| const { Preset } = require('~/db/models'); |
|
|
| const getPreset = async (user, presetId) => { |
| try { |
| return await Preset.findOne({ user, presetId }).lean(); |
| } catch (error) { |
| logger.error('[getPreset] Error getting single preset', error); |
| return { message: 'Error getting single preset' }; |
| } |
| }; |
|
|
| module.exports = { |
| getPreset, |
| getPresets: async (user, filter) => { |
| try { |
| const presets = await Preset.find({ ...filter, user }).lean(); |
| const defaultValue = 10000; |
|
|
| presets.sort((a, b) => { |
| let orderA = a.order !== undefined ? a.order : defaultValue; |
| let orderB = b.order !== undefined ? b.order : defaultValue; |
|
|
| if (orderA !== orderB) { |
| return orderA - orderB; |
| } |
|
|
| return b.updatedAt - a.updatedAt; |
| }); |
|
|
| return presets; |
| } catch (error) { |
| logger.error('[getPresets] Error getting presets', error); |
| return { message: 'Error retrieving presets' }; |
| } |
| }, |
| savePreset: async (user, { presetId, newPresetId, defaultPreset, ...preset }) => { |
| try { |
| const setter = { $set: {} }; |
| const { user: _, ...cleanPreset } = preset; |
| const update = { presetId, ...cleanPreset }; |
| if (preset.tools && Array.isArray(preset.tools)) { |
| update.tools = |
| preset.tools |
| .map((tool) => tool?.pluginKey ?? tool) |
| .filter((toolName) => typeof toolName === 'string') ?? []; |
| } |
| if (newPresetId) { |
| update.presetId = newPresetId; |
| } |
|
|
| if (defaultPreset) { |
| update.defaultPreset = defaultPreset; |
| update.order = 0; |
|
|
| const currentDefault = await Preset.findOne({ defaultPreset: true, user }); |
|
|
| if (currentDefault && currentDefault.presetId !== presetId) { |
| await Preset.findByIdAndUpdate(currentDefault._id, { |
| $unset: { defaultPreset: '', order: '' }, |
| }); |
| } |
| } else if (defaultPreset === false) { |
| update.defaultPreset = undefined; |
| update.order = undefined; |
| setter['$unset'] = { defaultPreset: '', order: '' }; |
| } |
|
|
| setter.$set = update; |
| return await Preset.findOneAndUpdate({ presetId, user }, setter, { new: true, upsert: true }); |
| } catch (error) { |
| logger.error('[savePreset] Error saving preset', error); |
| return { message: 'Error saving preset' }; |
| } |
| }, |
| deletePresets: async (user, filter) => { |
| |
| |
| let deleteCount = await Preset.deleteMany({ ...filter, user }); |
| return deleteCount; |
| }, |
| }; |
|
|