forked from aguaholic/holiday-planner
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmodels.js
More file actions
145 lines (131 loc) · 3.59 KB
/
models.js
File metadata and controls
145 lines (131 loc) · 3.59 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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
import dbConnect from './database.js';
import { getCityImage } from './opentrip.js';
const get = async () => {
const db = await dbConnect();
const collection = db.collection('users');
return await collection.find().toArray();
};
const updateFavorites = async (userEmail, siteData) => {
try {
const db = await dbConnect();
const collection = db.collection('users');
await collection.updateOne({ email: userEmail }, { $addToSet: { favorites: siteData } });
return await collection.findOne({ email: userEmail }, {});
}
catch {
throw new Error('Id was not found')
}
};
const getFavorites = async userEmail => {
try {
const db = await dbConnect();
const collection = db.collection('users');
const result = await collection.findOne({ email: userEmail }, {});
return result.favorites;
}
catch {
throw new Error('User was not found')
}
};
const deleteOneFavorite = async (userEmail, siteId) => {
try {
const db = await dbConnect();
const collection = db.collection('users');
await collection.updateOne({ email: userEmail }, { $pull: { favorites: { siteId: siteId }} });
const result = await collection.findOne({ email: userEmail }, {});
return result.favorites;
} catch(e) {
console.error(e)
}
};
const addToList = async (userEmail, siteData) => {
try {
const db = await dbConnect();
const collection = db.collection('users');
const user = await collection.findOne({ "email": userEmail, "lists.listName": siteData.city });
if(!user) {
const image = await getCityImage(siteData.city);
await collection.updateOne({ email: userEmail }, { $addToSet: { lists: { listName: siteData.city, image }} });
};
await collection.updateOne(
{ "email": userEmail, "lists.listName": siteData.city },
{ "$addToSet": { "lists.$.sites": siteData} }
);
const result = await collection.findOne({ email: userEmail }, {});
return result.favorites;
} catch(e) {
console.error(e)
}
}
const deleteFromList = async (email, list, id) => {
try {
const db = await dbConnect();
const collection = db.collection('users');
await collection.updateOne(
{ "email": email, "lists.listName": list },
{ "$pull": { "lists.$.sites": {siteId: id}} })
return;
} catch(e) {
console.error(e)
}
}
const deleteList = async (email, listName) => {
try {
const db = await dbConnect();
const collection = db.collection('users');
await collection.updateOne(
{ "email": email },
{ "$pull": { "lists": {listName: listName}} })
return;
} catch(e) {
console.error(e)
}
}
const getLists = async (userEmail) => {
try {
const db = await dbConnect();
const collection = db.collection('users');
const user = await collection.findOne({ 'email': userEmail }, {});
return user.lists;
} catch(e) {
console.error(e)
}
}
const createUser = async (user) => {
try {
const db = await dbConnect();
const collection = db.collection('users');
const dbUser = {
...user,
favorites: [],
lists: [],
};
return await collection.insertOne(dbUser);
} catch(e) {
console.error(e)
}
};
const findUser = async (user) => {
try{
const db = await dbConnect();
const collection = db.collection('users');
const userExists = await collection.findOne({ email: user.email });
if (!userExists) {
createUser(user)
}
} catch(e) {
console.error(e)
}
};
export {
get,
updateFavorites,
getFavorites,
deleteOneFavorite,
createUser,
findUser,
addToList,
getLists,
deleteFromList,
deleteList
};