generated from Real-Dev-Squad/website-template
-
Notifications
You must be signed in to change notification settings - Fork 201
/
extensionRequests.js
89 lines (79 loc) · 2.86 KB
/
extensionRequests.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
const firestore = require("../utils/firestore");
const extensionRequestsModel = firestore.collection("extensionRequests");
const { buildExtensionRequests, formatExtensionRequest } = require("../utils/extensionRequests");
/**
* Create Extension Request
* @param extensionRequestData { Object }: Body of the extension request
*/
const createExtensionRequest = async (extensionRequestData) => {
try {
const request = {
timestamp: (new Date().getTime() / 1000).toFixed(0),
...extensionRequestData,
};
return await extensionRequestsModel.add(request);
} catch (err) {
logger.error("Error in adding extension requests", err);
throw err;
}
};
/**
* Updates Extension Request
*
* @param extensionRequestData { Object }: extension request data object to be stored in DB
* @param extensionRequestId { string }: extensionRequestId which will be used to update the task in DB
* @return {extensionRequestResult : Object}
*/
const updateExtensionRequest = async (extensionRequestData, extensionRequestId) => {
try {
const extensionRequest = await extensionRequestsModel.doc(extensionRequestId).get();
await extensionRequestsModel.doc(extensionRequestId).set({
...extensionRequest.data(),
...extensionRequestData,
});
return extensionRequestId;
} catch (err) {
logger.error("Error in updating task", err);
throw err;
}
};
/**
* Fetch all Extension Requests
* @param extensionRequestquery { Object }: Body of the extension request
* @return {Promise<ExtensionRequest|Array>}
*/
const fetchExtensionRequests = async (extensionRequestquery, userId = null) => {
try {
let extensionRequestsSnapshot = extensionRequestsModel;
if (userId) {
extensionRequestsSnapshot = extensionRequestsModel.where("assignee", "==", userId);
}
Object.entries(extensionRequestquery).forEach(([key, value]) => {
if (value) extensionRequestsSnapshot = extensionRequestsSnapshot.where(key, "==", value);
});
extensionRequestsSnapshot = await extensionRequestsSnapshot.get();
const requests = buildExtensionRequests(extensionRequestsSnapshot);
const promises = requests.map((request) => formatExtensionRequest(request));
const updatedRequests = await Promise.all(promises);
return updatedRequests;
} catch (err) {
logger.error("error getting extension requests", err);
throw err;
}
};
const fetchExtensionRequest = async (extensionRequestId) => {
try {
const extensionRequest = await extensionRequestsModel.doc(extensionRequestId).get();
const extensionRequestData = await formatExtensionRequest(extensionRequest.data());
return { extensionRequestData };
} catch (err) {
logger.error("Error retrieving extension request data", err);
throw err;
}
};
module.exports = {
createExtensionRequest,
fetchExtensionRequests,
fetchExtensionRequest,
updateExtensionRequest,
};