Files
refactor-kata/kata/example-seam-drill/scenarios/characterization/code/taskService.js
T
2026-05-20 17:42:01 -06:00

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
};