-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtaskManager.js
More file actions
134 lines (114 loc) · 3.44 KB
/
Copy pathtaskManager.js
File metadata and controls
134 lines (114 loc) · 3.44 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
const { readJson, writeToJson, appendToJson } = require('./jsonUtil');
const Task = require('./task')
const { taskStatus } = require('./taskStatus');
async function fetchTasks() {
try {
const tasks = await readJson();
return tasks.map(data => new Task(
data.id,
data.description,
data.status,
data.createdAt,
data.updatedAt
));
} catch (error) {
console.log("Error fetching tasks:", error)
return [];
}
}
async function fetchTasksByStatus(status) {
if (!Object.values(taskStatus).includes(status)) {
console.error("Invalid status.");
return [];
}
try {
const tasks = await fetchTasks();
return tasks.filter(task => task.status === status);
} catch (error) {
console.log("Error fetching tasks", error);
return [];
}
}
async function generateTaskId() {
try {
const tasks = await fetchTasks();
return Math.max(...tasks.map(task => task.id)) + 1;
} catch (error) {
console.error("Error generating new task id:", error);
}
}
async function createTask(description) {
const id = await generateTaskId();
return new Task(
id,
description,
taskStatus.PENDING,
new Date().toLocaleString(),
null
);
}
async function addTask(description) {
const task = await createTask(description);
try {
await appendToJson(task);
console.log(`Task added successfully (ID: ${task.id})`)
} catch (error) {
console.error("Error saving task", error);
}
}
async function updateTaskStatus(id, newStatus) {
if (!Object.values(taskStatus).includes(newStatus)) {
console.error("Invalid status.");
return;
}
const tasks = await fetchTasks();
const task = tasks.find(task => task.id === Number(id));
if (!task) {
console.error(`No task found for id ${id}`);
return;
}
task.setStatus(newStatus);
task.setUpdatedAt(new Date().toLocaleString());
try {
await writeToJson(tasks);
console.log(`Task Id ${id} updated status to ${newStatus}`);
} catch (error) {
console.error("Error updating task status: ", error);
throw error;
}
}
async function updateTaskDescription(id, description) {
const tasks = await fetchTasks();
const task = tasks.find(task => task.id === Number(id));
if (!task) {
console.error(`No task found for id ${id}`);
return;
}
task.setDescription(description);
task.setUpdatedAt(new Date().toLocaleString());
try {
await writeToJson(tasks);
console.log(`Task Id ${id} updated description to ${description}`);
} catch (error) {
console.error("Error updating task description: ", error);
throw error;
}
}
async function deleteTask(id) {
const tasks = await fetchTasks();
const taskToRemove = tasks.find(task => task.id === Number(id));
if (!taskToRemove) {
console.error(`No task found for id ${id}`);
return;
}
const index = tasks.indexOf(taskToRemove);
tasks.splice(index, 1);
try {
await writeToJson(tasks);
console.log(`Task Id ${id} deleted.`);
} catch (error) {
console.error("Error deleting task: ", error);
throw error;
}
}
module.exports = {fetchTasks, fetchTasksByStatus, addTask, updateTaskStatus, updateTaskDescription, deleteTask};