| import logger from '~/config/winston'; |
|
|
| |
| |
| |
| |
| |
| |
| export const supportsTransactions = async ( |
| mongoose: typeof import('mongoose'), |
| ): Promise<boolean> => { |
| try { |
| const session = await mongoose.startSession(); |
| try { |
| session.startTransaction(); |
|
|
| await mongoose.connection.db?.collection('__transaction_test__').findOne({}, { session }); |
|
|
| await session.abortTransaction(); |
| logger.debug('MongoDB transactions are supported'); |
| return true; |
| } catch (transactionError: unknown) { |
| logger.debug( |
| 'MongoDB transactions not supported (transaction error):', |
| (transactionError as Error)?.message || 'Unknown error', |
| ); |
| return false; |
| } finally { |
| await session.endSession(); |
| } |
| } catch (error) { |
| logger.debug( |
| 'MongoDB transactions not supported (session error):', |
| (error as Error)?.message || 'Unknown error', |
| ); |
| return false; |
| } |
| }; |
|
|
| |
| |
| |
| |
| |
| |
| export const getTransactionSupport = async ( |
| mongoose: typeof import('mongoose'), |
| transactionSupportCache: boolean | null, |
| ): Promise<boolean> => { |
| let transactionsSupported = false; |
| if (transactionSupportCache === null) { |
| transactionsSupported = await supportsTransactions(mongoose); |
| } |
| return transactionsSupported; |
| }; |
|
|