-
-
Notifications
You must be signed in to change notification settings - Fork 78
/
import-from-prod.js
78 lines (69 loc) 路 2.24 KB
/
import-from-prod.js
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
// You may want to clear the test database with `$ npm run docker:seed`
// before running this script.
const request = require('request');
const mongodb = require('mongodb');
const ObjectID = id => mongodb.ObjectID.createFromHexString(id);
// Parameters // TODO: get from command line arguments and/or env vars
const url = 'mongodb://localhost:27117';
const dbName = 'openwhyd_test';
const username = 'adrien';
const connectToDb = ({ url, dbName }) =>
new Promise((resolve, reject) =>
mongodb.MongoClient.connect(url, (err, client) => {
if (err) reject(err);
else resolve({ db: client.db(dbName), client });
})
);
const fetchUserData = ({ username }) =>
new Promise((resolve, reject) => {
const url = `https://openwhyd.org/${username}?format=json`;
console.log(`fetching tracks from ${url} ...`);
request(url, function(error, response, body) {
if (error) {
reject(error);
} else {
resolve({
posts: JSON.parse(body).map(post => ({
...post,
_id: ObjectID(post._id)
}))
});
}
});
});
function genUserFromPost({ post }) {
return {
_id: ObjectID(post.uId),
id: post.uId,
name: post.uNm
};
}
const insertUser = ({ db, user }) =>
new Promise((resolve, reject) => {
db.collection('user').insertOne(user, function(err, r) {
if (err) reject(err);
else resolve();
});
});
const insertPosts = ({ db, posts }) =>
new Promise((resolve, reject) => {
db.collection('post').insertMany(posts, function(err, r) {
if (err) reject(err);
else resolve();
});
});
(async () => {
console.log(`connecting to ${url}/${dbName} ...`);
const { db, client } = await connectToDb({ url, dbName });
const { posts } = await fetchUserData({ username }); // or require(`./../${username}.json`);
console.log(`imported ${posts.length} posts`);
const user = genUserFromPost({ post: posts[0] });
// console.log('genUserFromPost =>', user);
// await insertUser({ db, user }); // may cause E11000 duplicate key error collection: openwhyd_test.user, after seeding the db
console.log('inserted user');
await insertPosts({ db, posts });
client.close();
})().catch(err => {
console.error(err);
process.exit(1);
});