63 lines
1.2 KiB
JavaScript
63 lines
1.2 KiB
JavaScript
const fs = require("fs");
|
|
|
|
class TaskService {
|
|
constructor(filePath) {
|
|
this.filePath = filePath;
|
|
}
|
|
|
|
completeTask(taskName, userName) {
|
|
const raw = fs.readFileSync(this.filePath, "utf8");
|
|
const state = JSON.parse(raw);
|
|
const task = state.tasks.find((item) => item.name === taskName);
|
|
|
|
if (!task) {
|
|
throw new Error("Task not found");
|
|
}
|
|
|
|
if (task.completed) {
|
|
return {
|
|
message: "Task already complete",
|
|
pointsAwarded: 0,
|
|
badge: null
|
|
};
|
|
}
|
|
|
|
task.completed = true;
|
|
task.completedAt = new Date().toISOString();
|
|
|
|
let pointsAwarded = 10;
|
|
|
|
if (userName && userName.toLowerCase() === "ada") {
|
|
pointsAwarded = pointsAwarded + 5;
|
|
}
|
|
|
|
if (new Date().getDay() === 5) {
|
|
pointsAwarded = pointsAwarded * 2;
|
|
}
|
|
|
|
state.points = state.points + pointsAwarded;
|
|
|
|
let badge = null;
|
|
|
|
if (state.points > 50) {
|
|
badge = "consistency-star";
|
|
}
|
|
|
|
fs.writeFileSync(this.filePath, JSON.stringify(state, null, 2));
|
|
|
|
if (badge) {
|
|
console.log("Awarded badge:", badge);
|
|
}
|
|
|
|
return {
|
|
message: "Task completed",
|
|
pointsAwarded,
|
|
badge
|
|
};
|
|
}
|
|
}
|
|
|
|
module.exports = {
|
|
TaskService
|
|
};
|