94 lines
2.2 KiB
JavaScript
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}`),
|
|
);
|