Files
todo/server.js
T
2026-08-06 09:34:37 +05:30

94 lines
2.2 KiB
JavaScript

const express = require("express");
const fs = require("fs");
const path = require("path");
const app = express();
const PORT = 3005;
const DATA_FILE = path.join(__dirname, "todos.json");
app.use(express.json());
app.use(express.static("public"));
// Load todos
// Load todos
function loadTodos() {
if (!fs.existsSync(DATA_FILE)) {
// ✅ Create file with empty array if missing
fs.writeFileSync(DATA_FILE, "[]", "utf-8");
return [];
}
const data = fs.readFileSync(DATA_FILE, "utf-8");
if (!data.trim()) return []; // ✅ handle empty file
try {
return JSON.parse(data);
} catch (err) {
console.error("Error parsing todos.json:", err);
return []; // fallback
}
}
// Delete todo
app.delete("/api/todos/:id", (req, res) => {
let todos = loadTodos();
todos = todos.filter((todo) => todo.id != req.params.id);
saveTodos(todos);
res.json({ success: true });
});
// Save todos
function saveTodos(todos) {
fs.writeFileSync(DATA_FILE, JSON.stringify(todos, null, 2));
}
// Get all todos
app.get("/api/todos", (req, res) => {
res.json(loadTodos());
});
function formatDateTime(isoString) {
const d = new Date(isoString);
const date = d.toLocaleDateString(); // e.g. 8/4/2026
const time = d.toLocaleTimeString("en-US", {
hour: "2-digit",
minute: "2-digit",
second: "2-digit",
hour12: true,
}); // e.g. 05:30:33 PM
return `${date} ${time}`;
}
// Add new todo
app.post("/api/todos", (req, res) => {
const todos = loadTodos();
const now = new Date();
const newTodo = {
id: Date.now(),
text: req.body.text || "",
// ✅ use formatted date+time
date: req.body.date ? formatDateTime(req.body.date) : formatDateTime(now),
title: req.body.title || "",
status: "pending",
private: req.body.private || false,
};
todos.push(newTodo);
saveTodos(todos);
res.json(newTodo);
});
// Update todo (status, privacy)
app.put("/api/todos/:id", (req, res) => {
let todos = loadTodos();
todos = todos.map((todo) =>
todo.id == req.params.id ? { ...todo, ...req.body } : todo,
);
saveTodos(todos);
res.json({ success: true });
});
app.listen(PORT, () =>
console.log(`Server running at http://localhost:${PORT}`),
);