69 lines
No EOL
1.9 KiB
JavaScript
69 lines
No EOL
1.9 KiB
JavaScript
import { getCollection } from '../../utils/db.js'
|
|
|
|
export default defineEventHandler(async (event) => {
|
|
try {
|
|
const data = await readBody(event)
|
|
|
|
// Migrate transactions
|
|
if (data.transactions && data.transactions.length > 0) {
|
|
const transactionsCollection = await getCollection('transactions')
|
|
|
|
// Clear existing transactions
|
|
await transactionsCollection.deleteMany({})
|
|
|
|
// Convert and insert transactions
|
|
const mongoTransactions = data.transactions.map(transaction => ({
|
|
...transaction,
|
|
_id: transaction.id,
|
|
id: undefined,
|
|
date: new Date(transaction.date),
|
|
endDate: transaction.endDate ? new Date(transaction.endDate) : null,
|
|
createdAt: new Date(),
|
|
updatedAt: new Date()
|
|
}))
|
|
|
|
await transactionsCollection.insertMany(mongoTransactions)
|
|
}
|
|
|
|
// Migrate balance
|
|
if (data.balance !== undefined) {
|
|
const balancesCollection = await getCollection('balances')
|
|
|
|
const balanceData = {
|
|
type: 'current',
|
|
currentBalance: data.balance,
|
|
accountBalances: data.accountBalances || {
|
|
manual: {
|
|
rbc_cad: 0,
|
|
td_cad: 0,
|
|
millennium_eur: 0
|
|
},
|
|
wise: {
|
|
jennie: [],
|
|
henry: []
|
|
}
|
|
},
|
|
updatedAt: new Date()
|
|
}
|
|
|
|
await balancesCollection.replaceOne(
|
|
{ type: 'current' },
|
|
balanceData,
|
|
{ upsert: true }
|
|
)
|
|
}
|
|
|
|
return {
|
|
success: true,
|
|
message: 'Data migrated successfully',
|
|
transactionsCount: data.transactions?.length || 0,
|
|
balance: data.balance || 0
|
|
}
|
|
} catch (error) {
|
|
console.error('Error migrating localStorage data:', error)
|
|
throw createError({
|
|
statusCode: 500,
|
|
statusMessage: 'Failed to migrate data'
|
|
})
|
|
}
|
|
}) |