commited\
This commit is contained in:
@@ -0,0 +1,93 @@
|
||||
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}`),
|
||||
);
|
||||
Reference in New Issue
Block a user