mirror of
https://github.com/danny-avila/LibreChat.git
synced 2025-12-17 08:50:15 +01:00
26 lines
798 B
JavaScript
26 lines
798 B
JavaScript
|
|
const mongoose = require('mongoose');
|
||
|
|
/**
|
||
|
|
* Executes a database operation within a session.
|
||
|
|
* @param {() => Promise<any>} method - The method to execute. This method must accept a session as its first argument.
|
||
|
|
* @param {...any} args - Additional arguments to pass to the method.
|
||
|
|
* @returns {Promise<any>} - The result of the executed method.
|
||
|
|
*/
|
||
|
|
async function withSession(method, ...args) {
|
||
|
|
const session = await mongoose.startSession();
|
||
|
|
session.startTransaction();
|
||
|
|
try {
|
||
|
|
const result = await method(...args, session);
|
||
|
|
await session.commitTransaction();
|
||
|
|
return result;
|
||
|
|
} catch (error) {
|
||
|
|
if (session.inTransaction()) {
|
||
|
|
await session.abortTransaction();
|
||
|
|
}
|
||
|
|
throw error;
|
||
|
|
} finally {
|
||
|
|
await session.endSession();
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
module.exports = { withSession };
|