mirror of
https://github.com/danny-avila/LibreChat.git
synced 2025-12-20 02:10:15 +01:00
refactor(db): streamline model imports and remove unused model exports
- Removed the export of models from the database connection module to simplify the structure. - Updated various files to import models directly from the new centralized models module. - Ensured consistency across the codebase by replacing mongoose model references with the new import paths.
This commit is contained in:
parent
eb368fcb70
commit
20ad7d52f3
46 changed files with 61 additions and 66 deletions
|
|
@ -3,6 +3,6 @@ const { createModels } = require('@librechat/data-schemas');
|
|||
const { connectDb } = require('./connect');
|
||||
const indexSync = require('./indexSync');
|
||||
|
||||
const models = createModels(mongoose);
|
||||
createModels(mongoose);
|
||||
|
||||
module.exports = { connectDb, indexSync, ...models };
|
||||
module.exports = { connectDb, indexSync };
|
||||
|
|
|
|||
|
|
@ -1,8 +1,9 @@
|
|||
const mongoose = require('mongoose');
|
||||
const { MeiliSearch } = require('meilisearch');
|
||||
const { isEnabled } = require('~/server/utils');
|
||||
const { logger } = require('@librechat/data-schemas');
|
||||
|
||||
const { isEnabled } = require('~/server/utils');
|
||||
|
||||
const Conversation = mongoose.models.Conversation;
|
||||
const Message = mongoose.models.Message;
|
||||
|
||||
|
|
|
|||
5
api/db/models.js
Normal file
5
api/db/models.js
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
const mongoose = require('mongoose');
|
||||
const { createModels } = require('@librechat/data-schemas');
|
||||
const models = createModels(mongoose);
|
||||
|
||||
module.exports = { ...models };
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
const mongoose = require('mongoose');
|
||||
const Action = mongoose.models.Action;
|
||||
const Action = require('~/db/models').Action;
|
||||
|
||||
/**
|
||||
* Update an action with new data without overwriting existing properties,
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ const {
|
|||
const getLogStores = require('~/cache/getLogStores');
|
||||
const { getActions } = require('./Action');
|
||||
|
||||
const Agent = mongoose.models.Agent;
|
||||
const Agent = require('~/db/models').Agent;
|
||||
|
||||
/**
|
||||
* Create an agent with the provided data.
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ const {
|
|||
removeAgentResourceFiles,
|
||||
} = require('./Agent');
|
||||
|
||||
const Agent = mongoose.models.Agent;
|
||||
const Agent = require('~/db/models').Agent;
|
||||
|
||||
describe('Agent Resource File Operations', () => {
|
||||
let mongoServer;
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
const mongoose = require('mongoose');
|
||||
const Assistant = mongoose.models.Assistant;
|
||||
const Assistant = require('~/db/models').Assistant;
|
||||
|
||||
/**
|
||||
* Update an assistant with new data without overwriting existing properties,
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
const mongoose = require('mongoose');
|
||||
const { logger } = require('@librechat/data-schemas');
|
||||
|
||||
const Banner = mongoose.models.Banner;
|
||||
const Banner = require('~/db/models').Banner;
|
||||
|
||||
/**
|
||||
* Retrieves the current active banner.
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ const mongoose = require('mongoose');
|
|||
const { logger } = require('@librechat/data-schemas');
|
||||
const { getMessages, deleteMessages } = require('./Message');
|
||||
|
||||
const Conversation = mongoose.models.Conversation;
|
||||
const Conversation = require('~/db/models').Conversation;
|
||||
|
||||
/**
|
||||
* Searches for a conversation by conversationId and returns a lean document with only conversationId and user.
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
const mongoose = require('mongoose');
|
||||
const { logger } = require('@librechat/data-schemas');
|
||||
|
||||
const ConversationTag = mongoose.models.ConversationTag;
|
||||
const Conversation = mongoose.models.Conversation;
|
||||
const ConversationTag = require('~/db/models').ConversationTag;
|
||||
const Conversation = require('~/db/models').Conversation;
|
||||
|
||||
/**
|
||||
* Retrieves all conversation tags for a user.
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ const mongoose = require('mongoose');
|
|||
const { logger } = require('@librechat/data-schemas');
|
||||
const { EToolResources } = require('librechat-data-provider');
|
||||
|
||||
const File = mongoose.models.File;
|
||||
const File = require('~/db/models').File;
|
||||
|
||||
/**
|
||||
* Finds a file by its file_id with additional query options.
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ const { z } = require('zod');
|
|||
const mongoose = require('mongoose');
|
||||
const { logger } = require('@librechat/data-schemas');
|
||||
|
||||
const Message = mongoose.models.Message;
|
||||
const Message = require('~/db/models').Message;
|
||||
const idSchema = z.string().uuid();
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
const mongoose = require('mongoose');
|
||||
const { logger } = require('@librechat/data-schemas');
|
||||
|
||||
const Preset = mongoose.models.Preset;
|
||||
const Preset = require('~/db/models').Preset;
|
||||
|
||||
const getPreset = async (user, presetId) => {
|
||||
try {
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
const mongoose = require('mongoose');
|
||||
const { GLOBAL_PROJECT_NAME } = require('librechat-data-provider').Constants;
|
||||
|
||||
const Project = mongoose.models.Project;
|
||||
const Project = require('~/db/models').Project;
|
||||
|
||||
/**
|
||||
* Retrieve a project by ID and convert the found project document to a plain object.
|
||||
|
|
|
|||
|
|
@ -10,8 +10,8 @@ const {
|
|||
} = require('./Project');
|
||||
const { escapeRegExp } = require('~/server/utils');
|
||||
|
||||
const PromptGroup = mongoose.models.PromptGroup;
|
||||
const Prompt = mongoose.models.Prompt;
|
||||
const PromptGroup = require('~/db/models').PromptGroup;
|
||||
const Prompt = require('~/db/models').Prompt;
|
||||
|
||||
/**
|
||||
* Create a pipeline for the aggregation to get prompt groups
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ const mongoose = require('mongoose');
|
|||
const { logger } = require('@librechat/data-schemas');
|
||||
const getLogStores = require('~/cache/getLogStores');
|
||||
|
||||
const Role = mongoose.models.Role;
|
||||
const Role = require('~/db/models').Role;
|
||||
|
||||
/**
|
||||
* Retrieve a role by name and convert the found role document to a plain object.
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ const {
|
|||
const { getRoleByName, updateAccessPermissions, initializeRoles } = require('~/models/Role');
|
||||
const getLogStores = require('~/cache/getLogStores');
|
||||
|
||||
const Role = mongoose.models.Role;
|
||||
const Role = require('~/db/models').Role;
|
||||
|
||||
// Mock the cache
|
||||
jest.mock('~/cache/getLogStores', () =>
|
||||
|
|
|
|||
|
|
@ -4,8 +4,8 @@ const { Constants } = require('librechat-data-provider');
|
|||
const { logger } = require('@librechat/data-schemas');
|
||||
const { getMessages } = require('./Message');
|
||||
|
||||
const Conversation = mongoose.models.Conversation;
|
||||
const SharedLink = mongoose.models.SharedLink;
|
||||
const Conversation = require('~/db/models').Conversation;
|
||||
const SharedLink = require('~/db/models').SharedLink;
|
||||
|
||||
class ShareServiceError extends Error {
|
||||
constructor(message, code) {
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
const mongoose = require('mongoose');
|
||||
const { encryptV2 } = require('~/server/utils/crypto');
|
||||
|
||||
const Token = mongoose.models.Token;
|
||||
const Token = require('~/db/models').Token;
|
||||
|
||||
/**
|
||||
* Handles the OAuth token by creating or updating the token.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
const mongoose = require('mongoose');
|
||||
|
||||
const ToolCall = mongoose.models.ToolCall;
|
||||
const ToolCall = require('~/db/models').ToolCall;
|
||||
|
||||
/**
|
||||
* Create a new tool call
|
||||
|
|
|
|||
|
|
@ -3,8 +3,8 @@ const { logger } = require('@librechat/data-schemas');
|
|||
const { getBalanceConfig } = require('~/server/services/Config');
|
||||
const { getMultiplier, getCacheMultiplier } = require('./tx');
|
||||
|
||||
const Transaction = mongoose.models.Transaction;
|
||||
const Balance = mongoose.models.Balance;
|
||||
const Transaction = require('~/db/models').Transaction;
|
||||
const Balance = require('~/db/models').Balance;
|
||||
|
||||
const cancelRate = 1.15;
|
||||
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ const { spendTokens, spendStructuredTokens } = require('./spendTokens');
|
|||
const { getBalanceConfig } = require('~/server/services/Config');
|
||||
const { getMultiplier, getCacheMultiplier } = require('./tx');
|
||||
const { createTransaction } = require('./Transaction');
|
||||
const Balance = mongoose.models.Balance;
|
||||
const Balance = require('~/db/models').Balance;
|
||||
|
||||
// Mock the custom config module so we can control the balance flag.
|
||||
jest.mock('~/server/services/Config');
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ const { createAutoRefillTransaction } = require('./Transaction');
|
|||
const { logViolation } = require('~/cache');
|
||||
const { getMultiplier } = require('./tx');
|
||||
|
||||
const Balance = mongoose.models.Balance;
|
||||
const Balance = require('~/db/models').Balance;
|
||||
|
||||
function isInvalidDate(date) {
|
||||
return isNaN(date);
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ const mongoose = require('mongoose');
|
|||
const { MongoMemoryServer } = require('mongodb-memory-server');
|
||||
const { getMessages, bulkSaveMessages } = require('./Message');
|
||||
|
||||
const Message = mongoose.models.Message;
|
||||
const Message = require('~/db/models').Message;
|
||||
|
||||
// Original version of buildTree function
|
||||
function buildTree({ messages, fileMap }) {
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ const mongoose = require('mongoose');
|
|||
const { logger } = require('@librechat/data-schemas');
|
||||
const { getRandomValues, hashToken } = require('~/server/utils/crypto');
|
||||
|
||||
const Token = mongoose.models.Token;
|
||||
const Token = require('~/db/models').Token;
|
||||
|
||||
/**
|
||||
* @module inviteUser
|
||||
|
|
|
|||
|
|
@ -1,5 +1,4 @@
|
|||
const { logger } = require('~/config');
|
||||
const db = require('db/connect');
|
||||
const { createTransaction, createStructuredTransaction } = require('./Transaction');
|
||||
/**
|
||||
* Creates up to two transactions to record the spending of tokens.
|
||||
|
|
|
|||
|
|
@ -2,8 +2,8 @@ const mongoose = require('mongoose');
|
|||
const { MongoMemoryServer } = require('mongodb-memory-server');
|
||||
const { spendTokens, spendStructuredTokens } = require('./spendTokens');
|
||||
const { createTransaction, createAutoRefillTransaction } = require('./Transaction');
|
||||
const Transaction = mongoose.models.Transaction;
|
||||
const Balance = mongoose.models.Balance;
|
||||
const Transaction = require('~/db/models').Transaction;
|
||||
const Balance = require('~/db/models').Balance;
|
||||
|
||||
// Mock the logger to prevent console output during tests
|
||||
jest.mock('~/config', () => ({
|
||||
|
|
|
|||
|
|
@ -13,8 +13,8 @@ const {
|
|||
const { getOpenIdConfig } = require('~/strategies');
|
||||
const { isEnabled } = require('~/server/utils');
|
||||
|
||||
const Session = mongoose.models.Session;
|
||||
const User = mongoose.models.User;
|
||||
const Session = require('~/db/models').Session;
|
||||
const User = require('~/db/models').User;
|
||||
|
||||
const registrationController = async (req, res) => {
|
||||
try {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
const mongoose = require('mongoose');
|
||||
|
||||
const Balance = mongoose.models.Balance;
|
||||
const Balance = require('~/db/models').Balance;
|
||||
|
||||
async function balanceController(req, res) {
|
||||
const balanceData = await Balance.findOne(
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ const {
|
|||
const { encryptV3 } = require('~/server/utils/crypto');
|
||||
const safeAppTitle = (process.env.APP_TITLE || 'LibreChat').replace(/\s+/g, '');
|
||||
|
||||
const User = mongoose.models.User;
|
||||
const User = require('~/db/models').User;
|
||||
|
||||
/**
|
||||
* Enable 2FA for the user by generating a new TOTP secret and backup codes.
|
||||
|
|
|
|||
|
|
@ -15,10 +15,10 @@ const { processDeleteRequest } = require('~/server/services/Files/process');
|
|||
const { deleteAllSharedLinks } = require('~/models/Share');
|
||||
const { deleteToolCalls } = require('~/models/ToolCall');
|
||||
|
||||
const Transaction = mongoose.models.Transaction;
|
||||
const Session = mongoose.models.Session;
|
||||
const Balance = mongoose.models.Balance;
|
||||
const User = mongoose.models.User;
|
||||
const Transaction = require('~/db/models').Transaction;
|
||||
const Session = require('~/db/models').Session;
|
||||
const Balance = require('~/db/models').Balance;
|
||||
const User = require('~/db/models').User;
|
||||
|
||||
const getUserController = async (req, res) => {
|
||||
/** @type {MongoUser} */
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ const {
|
|||
const { setAuthTokens } = require('~/server/services/AuthService');
|
||||
const { logger } = require('@librechat/data-schemas');
|
||||
|
||||
const User = mongoose.models.User;
|
||||
const User = require('~/db/models').User;
|
||||
|
||||
/**
|
||||
* Verifies the 2FA code during login using a temporary token.
|
||||
|
|
|
|||
|
|
@ -9,8 +9,9 @@ const passport = require('passport');
|
|||
const mongoSanitize = require('express-mongo-sanitize');
|
||||
const fs = require('fs');
|
||||
const cookieParser = require('cookie-parser');
|
||||
const { connectDb, indexSync } = require('~/db');
|
||||
|
||||
const { jwtLogin, passportLogin } = require('~/strategies');
|
||||
const { connectDb, indexSync, getModels } = require('db');
|
||||
const { isEnabled } = require('~/server/utils');
|
||||
const { ldapLogin } = require('~/strategies');
|
||||
const { logger } = require('~/config');
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ const keyvMongo = require('~/cache/keyvMongo');
|
|||
const denyRequest = require('./denyRequest');
|
||||
const { getLogStores } = require('~/cache');
|
||||
|
||||
const User = mongoose.models.User;
|
||||
const User = require('~/db/models').User;
|
||||
|
||||
const banCache = new Keyv({ store: keyvMongo, namespace: ViolationTypes.BAN, ttl: 0 });
|
||||
const message = 'Your account has been temporarily banned due to violations of our service.';
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ const mongoose = require('mongoose');
|
|||
const { logger } = require('@librechat/data-schemas');
|
||||
const { getBalanceConfig } = require('~/server/services/Config');
|
||||
|
||||
const Balance = mongoose.models.Balance;
|
||||
const Balance = require('~/db/models').Balance;
|
||||
|
||||
/**
|
||||
* Middleware to synchronize user balance settings with current balance configuration.
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ const { cleanUpPrimaryKeyValue } = require('~/lib/utils/misc');
|
|||
const { getConvosQueried } = require('~/models/Conversation');
|
||||
const { countTokens } = require('~/server/utils');
|
||||
|
||||
const Message = mongoose.models.Message;
|
||||
const Message = require('~/db/models').Message;
|
||||
|
||||
const router = express.Router();
|
||||
router.use(requireJwtAuth);
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ const mongoose = require('mongoose');
|
|||
const { encrypt, decrypt } = require('~/server/utils/');
|
||||
const { logger } = require('~/config');
|
||||
|
||||
const PluginAuth = mongoose.models.PluginAuth;
|
||||
const PluginAuth = require('~/db/models').PluginAuth;
|
||||
|
||||
/**
|
||||
* Asynchronously retrieves and decrypts the authentication value for a user's plugin, based on a specified authentication field.
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ const { ErrorTypes } = require('librechat-data-provider');
|
|||
const { encrypt, decrypt } = require('~/server/utils/crypto');
|
||||
const { updateUser } = require('~/models');
|
||||
|
||||
const Key = mongoose.models.Key;
|
||||
const Key = require('~/db/models').Key;
|
||||
|
||||
/**
|
||||
* Updates the plugins for a user based on the action specified (install/uninstall).
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ const mongoose = require('mongoose');
|
|||
const { webcrypto } = require('node:crypto');
|
||||
const { hashBackupCode, decryptV3, decryptV2 } = require('~/server/utils/crypto');
|
||||
|
||||
const User = mongoose.models.User;
|
||||
const User = require('~/db/models').User;
|
||||
|
||||
// Base32 alphabet for TOTP secret encoding.
|
||||
const BASE32_ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567';
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ const { createSocialUser, handleExistingUser } = require('./process');
|
|||
const { isEnabled } = require('~/server/utils');
|
||||
const socialLogin = require('./socialLogin');
|
||||
|
||||
const User = mongoose.models.User;
|
||||
const User = require('~/db/models').User;
|
||||
|
||||
// Mocking external dependencies
|
||||
jest.mock('jsonwebtoken');
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ const { logger } = require('@librechat/data-schemas');
|
|||
const { SystemRoles } = require('librechat-data-provider');
|
||||
const { Strategy: JwtStrategy, ExtractJwt } = require('passport-jwt');
|
||||
|
||||
const User = mongoose.models.User;
|
||||
const User = require('~/db/models').User;
|
||||
|
||||
// JWT strategy
|
||||
const jwtLogin = () =>
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ const { createUser, findUser, updateUser } = require('~/models');
|
|||
const { getBalanceConfig } = require('~/server/services/Config');
|
||||
const { isEnabled } = require('~/server/utils');
|
||||
|
||||
const User = mongoose.models.User;
|
||||
const User = require('~/db/models').User;
|
||||
|
||||
const {
|
||||
LDAP_URL,
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ const { isEnabled, checkEmailConfig } = require('~/server/utils');
|
|||
const { comparePassword } = require('~/models');
|
||||
const { loginSchema } = require('./validators');
|
||||
|
||||
const User = mongoose.models.User;
|
||||
const User = require('~/db/models').User;
|
||||
|
||||
// Unix timestamp for 2024-06-07 15:20:18 Eastern Time
|
||||
const verificationEnabledTimestamp = 1717788018;
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ const { getStrategyFunctions } = require('~/server/services/Files/strategies');
|
|||
const getLogStores = require('~/cache/getLogStores');
|
||||
const { isEnabled } = require('~/server/utils');
|
||||
|
||||
const User = mongoose.models.User;
|
||||
const User = require('~/db/models').User;
|
||||
|
||||
/**
|
||||
* @typedef {import('openid-client').ClientMetadata} ClientMetadata
|
||||
|
|
@ -38,7 +38,6 @@ class CustomOpenIDStrategy extends OpenIDStrategy {
|
|||
}
|
||||
}
|
||||
|
||||
const db = require('db/connect');
|
||||
const { getBalanceConfig } = require('~/server/services/Config');
|
||||
|
||||
let crypto;
|
||||
|
|
|
|||
|
|
@ -17,16 +17,6 @@ const mockModels = {
|
|||
},
|
||||
};
|
||||
|
||||
jest.mock('~/db/connect', () => {
|
||||
return {
|
||||
getModels: jest.fn(() => mockModels),
|
||||
connectDb: jest.fn(),
|
||||
get models() {
|
||||
return mockModels;
|
||||
},
|
||||
};
|
||||
});
|
||||
|
||||
jest.mock('~/server/services/Config', () => ({
|
||||
getBalanceConfig: jest.fn(),
|
||||
}));
|
||||
|
|
@ -132,7 +122,7 @@ describe('setupOpenId', () => {
|
|||
picture: 'https://example.com/avatar.png',
|
||||
}),
|
||||
};
|
||||
const User = mongoose.models.User;
|
||||
const User = require('~/db/models').User;
|
||||
beforeEach(async () => {
|
||||
// Clear previous mock calls and reset implementations
|
||||
jest.clearAllMocks();
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ const moduleAlias = require('module-alias');
|
|||
const basePath = path.resolve(__dirname, '..', 'api');
|
||||
moduleAlias.addAlias('~', basePath);
|
||||
|
||||
const { connectDb } = require('db/connect');
|
||||
const { connectDb } = require('~/db/connect');
|
||||
require('./helpers');
|
||||
|
||||
async function connect() {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue