Refactor bulk transaction handling in bulk.put.js to use bulk upsert operations

- Updated the transaction processing logic to clear existing transactions and perform bulk upserts instead of inserts.
- Enhanced the response to include counts of upserted and modified transactions.
This commit is contained in:
Jennie Robinson Faber 2025-08-23 15:05:01 +01:00
parent 35deda5963
commit c6214a34ff

View file

@ -5,26 +5,33 @@ export default defineEventHandler(async (event) => {
const transactions = await readBody(event) const transactions = await readBody(event)
const collection = await getCollection('transactions') const collection = await getCollection('transactions')
// Clear existing transactions and insert new ones // Clear existing transactions and upsert new ones
await collection.deleteMany({}) await collection.deleteMany({})
if (transactions.length > 0) { if (transactions.length > 0) {
// Convert transactions for MongoDB // Convert transactions for MongoDB and use bulk upsert operations
const mongoTransactions = transactions.map(transaction => ({ const bulkOps = transactions.map(transaction => ({
...transaction, replaceOne: {
_id: transaction.id, filter: { _id: transaction.id },
id: undefined, replacement: {
date: new Date(transaction.date), ...transaction,
endDate: transaction.endDate ? new Date(transaction.endDate) : null, _id: transaction.id,
createdAt: new Date(), id: undefined,
updatedAt: new Date() date: new Date(transaction.date),
endDate: transaction.endDate ? new Date(transaction.endDate) : null,
createdAt: new Date(),
updatedAt: new Date()
},
upsert: true
}
})) }))
const result = await collection.insertMany(mongoTransactions) const result = await collection.bulkWrite(bulkOps)
return { return {
success: true, success: true,
insertedCount: result.insertedCount insertedCount: result.upsertedCount,
modifiedCount: result.modifiedCount
} }
} }