-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathimportData.js
More file actions
95 lines (76 loc) · 2.39 KB
/
Copy pathimportData.js
File metadata and controls
95 lines (76 loc) · 2.39 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
require('dotenv').config()
const mongoose = require('mongoose')
const fs = require('fs')
const bcrypt = require('bcrypt')
const User = require('./models/User')
const Transaction = require('./models/Transaction')
mongoose
.connect(process.env.REACT_APP_MONGO_URI)
.then(() => console.log('Conexión exitosa a MongoDB'))
.catch((err) => console.error('Error al conectar a MongoDB:', err))
const importUsers = async () => {
try {
const users = JSON.parse(
fs.readFileSync('./resources/userInsert.json', 'utf-8'),
)
const insertedUsers = []
const dniToUserIdMap = new Map()
for (const userData of users) {
if (!/^[0-9]{8}[A-Za-z]$/.test(userData.dni)) {
console.error(`DNI no válido: ${userData.dni}`)
continue
}
const user = new User(userData)
try {
const savedUser = await user.save()
insertedUsers.push(savedUser)
dniToUserIdMap.set(savedUser.dni, savedUser._id)
} catch (error) {
console.error('Error al guardar el usuario:', error)
}
}
return { insertedUsers, dniToUserIdMap }
} catch (error) {
console.error('Error al importar usuarios:', error)
}
}
const importTransactions = async (dniToUserIdMap) => {
try {
const transactions = JSON.parse(
fs.readFileSync('./resources/transactionInsert.json', 'utf-8'),
)
const transactionsToInsert = []
for (const transaction of transactions) {
const userId = dniToUserIdMap.get(transaction.dni)
if (userId) {
transaction.userId = userId
if (transaction.timestamp) {
transaction.createdAt = new Date(transaction.timestamp)
}
} else {
console.warn(
`Usuario no encontrado para la transacción con DNI: ${transaction.dni}`,
)
continue
}
delete transaction.dni
delete transaction.timestamp
transactionsToInsert.push(transaction)
}
if (transactionsToInsert.length > 0) {
await Transaction.insertMany(transactionsToInsert)
} else {
console.warn(
'No se importaron transacciones, ya que ninguna tenía un usuario asociado.',
)
}
} catch (error) {
console.error('Error al importar transacciones:', error)
}
}
const importData = async () => {
const { dniToUserIdMap } = await importUsers()
await importTransactions(dniToUserIdMap)
mongoose.connection.close()
}
importData()