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:
Danny Avila 2025-05-30 13:13:10 -04:00
parent eb368fcb70
commit 20ad7d52f3
No known key found for this signature in database
GPG key ID: BF31EEB2C5CA0956
46 changed files with 61 additions and 66 deletions

View file

@ -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 };

View file

@ -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
View file

@ -0,0 +1,5 @@
const mongoose = require('mongoose');
const { createModels } = require('@librechat/data-schemas');
const models = createModels(mongoose);
module.exports = { ...models };

View file

@ -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,

View file

@ -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.

View file

@ -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;

View file

@ -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,

View file

@ -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.

View file

@ -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.

View file

@ -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.

View file

@ -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.

View file

@ -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();
/**

View file

@ -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 {

View file

@ -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.

View file

@ -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

View file

@ -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.

View file

@ -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', () =>

View file

@ -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) {

View file

@ -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.

View file

@ -1,6 +1,6 @@
const mongoose = require('mongoose');
const ToolCall = mongoose.models.ToolCall;
const ToolCall = require('~/db/models').ToolCall;
/**
* Create a new tool call

View file

@ -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;

View file

@ -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');

View file

@ -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);

View file

@ -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 }) {

View file

@ -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

View file

@ -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.

View file

@ -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', () => ({

View file

@ -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 {

View file

@ -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(

View file

@ -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.

View file

@ -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} */

View file

@ -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.

View file

@ -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');

View file

@ -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.';

View file

@ -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.

View file

@ -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);

View file

@ -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.

View file

@ -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).

View file

@ -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';

View file

@ -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');

View file

@ -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 = () =>

View file

@ -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,

View file

@ -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;

View file

@ -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;

View file

@ -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();

View file

@ -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() {