generated from Real-Dev-Squad/website-template
-
Notifications
You must be signed in to change notification settings - Fork 256
/
stocks.js
104 lines (97 loc) · 2.34 KB
/
stocks.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
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
const firestore = require("../utils/firestore");
const stocksModel = firestore.collection("stocks");
const userStocksModel = firestore.collection("user-stocks");
/**
* Adds Stocks
*
* @param stockData { Object }: stock data object to be stored in DB
* @return {Promise<{stockId: string}>}
*/
const addStock = async (stockData) => {
try {
const { id } = await stocksModel.add(stockData);
return { id, stockData };
} catch (err) {
logger.error("Error in creating stock", err);
throw err;
}
};
/**
* Fetch all stocks
*
* @return {Promise<stocks|Array>}
*/
const fetchStocks = async () => {
try {
const stockSnapshot = await stocksModel.get();
const stocks = [];
stockSnapshot.forEach((stock) => {
stocks.push({
id: stock.id,
...stock.data(),
});
});
return stocks;
} catch (err) {
logger.error("error getting stocks", err);
throw err;
}
};
/**
* Fetches the user stocks
* @return {Promise<userStocks|object>}
*/
const fetchUserStocks = async (userId, stockId = null) => {
try {
let userStocksRef = "";
const query = userStocksModel.where("userId", "==", userId);
if (stockId) {
userStocksRef = await query.where("stockId", "==", stockId).get();
const [userStocks] = userStocksRef.docs;
if (userStocks) {
return { id: userStocks.id, ...userStocks.data() };
}
return {};
}
userStocksRef = await query.get();
const userStocks = [];
userStocksRef.forEach((stock) => {
userStocks.push({
id: stock.id,
...stock.data(),
});
});
return userStocks;
} catch (err) {
logger.error("Error retrieving user stocks", err);
throw err;
}
};
/**
* Update Users Stocks
* @return {Promise<userStocks|object>}
*/
const updateUserStocks = async (userId, stockData) => {
try {
const userStocks = await fetchUserStocks(userId, stockData.stockId);
if (!userStocks.id) {
await userStocksModel.add({
userId,
...stockData,
});
return true;
}
const userStocksRef = userStocksModel.doc(userStocks.id);
const res = await userStocksRef.update(stockData);
return !!res;
} catch (err) {
logger.error("Error updating users stocks", err);
throw err;
}
};
module.exports = {
addStock,
fetchStocks,
fetchUserStocks,
updateUserStocks,
};