Skip to content

Commit 65de2a4

Browse files
authored
Get Task dependency (#1099)
* get dependsOn on taskdata * added task-list test * retry ECONNRESET error * retry ECONNRESET error * change task to taskdata
1 parent a4952ed commit 65de2a4

File tree

3 files changed

+23
-5
lines changed

3 files changed

+23
-5
lines changed

controllers/tasks.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -153,12 +153,14 @@ const getSelfTasks = async (req, res) => {
153153
const getTask = async (req, res) => {
154154
try {
155155
const taskId = req.params.id;
156-
const { taskData } = await tasks.fetchTask(taskId);
157-
156+
const { taskData, dependencyDocReference } = await tasks.fetchTask(taskId);
158157
if (!taskData) {
159158
return res.boom.notFound("Task not found");
160159
}
161-
return res.json({ message: "task returned successfully", taskData });
160+
return res.json({
161+
message: "task returned successfully",
162+
taskData: { ...taskData, dependsOn: dependencyDocReference },
163+
});
162164
} catch (err) {
163165
return res.boom.badImplementation(INTERNAL_SERVER_ERROR);
164166
}

models/tasks.js

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ const { OLD_ACTIVE, OLD_BLOCKED, OLD_PENDING, OLD_COMPLETED } = TASK_STATUS_OLD;
1717
const updateTask = async (taskData, taskId = null) => {
1818
try {
1919
taskData = await toFirestoreData(taskData);
20+
2021
if (taskId) {
2122
const task = await tasksModel.doc(taskId).get();
2223
if (taskData.status === "VERIFIED") {
@@ -73,8 +74,15 @@ const fetchTasks = async () => {
7374
const tasks = buildTasks(tasksSnapshot);
7475
const promises = tasks.map(async (task) => fromFirestoreData(task));
7576
const updatedTasks = await Promise.all(promises);
76-
const taskList = updatedTasks.map((task) => {
77+
const taskList = updatedTasks.map(async (task) => {
7778
task.status = TASK_STATUS[task.status.toUpperCase()] || task.status;
79+
const taskId = task.id;
80+
const dependencySnapshot = await dependencyModel.where("taskId", "==", taskId).get();
81+
task.dependsOn = [];
82+
dependencySnapshot.docs.forEach((doc) => {
83+
const dependsId = doc.get("dependsId");
84+
task.dependsOn.push(dependsId);
85+
});
7886
return task;
7987
});
8088
return taskList;
@@ -116,11 +124,16 @@ const fetchActiveTaskMembers = async () => {
116124
const fetchTask = async (taskId) => {
117125
try {
118126
const task = await tasksModel.doc(taskId).get();
127+
const dependencySnapshot = await dependencyModel.where("taskId", "==", taskId).get();
128+
const dependencyDocReference = dependencySnapshot.docs.map((doc) => {
129+
const dependsId = doc.get("dependsId");
130+
return dependsId;
131+
});
119132
const taskData = await fromFirestoreData(task.data());
120133
if (taskData?.status) {
121134
taskData.status = TASK_STATUS[taskData.status.toUpperCase()] || task.status;
122135
}
123-
return { taskData };
136+
return { taskData, dependencyDocReference };
124137
} catch (err) {
125138
logger.error("Error retrieving task data", err);
126139
throw err;

test/integration/tasks.test.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,7 @@ describe("Tasks", function () {
158158
expect(res.body).to.be.a("object");
159159
expect(res.body.message).to.equal("Tasks returned successfully!");
160160
expect(res.body.tasks).to.be.a("array");
161+
expect(res.body.tasks[0].dependsOn).to.be.a("array");
161162
const taskWithParticipants = res.body.tasks[0];
162163

163164
if (taskWithParticipants.type === "group") {
@@ -185,6 +186,8 @@ describe("Tasks", function () {
185186
expect(res.body).to.be.a("object");
186187
expect(res.body.message).to.be.equal("task returned successfully");
187188
expect(res.body.taskData).to.be.a("object");
189+
expect(res.body.taskData.dependsOn).to.be.a("array");
190+
188191
return done();
189192
});
190193
});

0 commit comments

Comments
 (0)