1'use server';23import fs from 'fs/promises';45export interface Todo {6 id: number;7 title: string;8 description: string;9 dueDate: string;10 isComplete: boolean;11}1213export async function getTodos(): Promise<Todo[]> {14 try {15 let contents = await fs.readFile('todos.json', 'utf8');16 return JSON.parse(contents);17 } catch {18 await fs.writeFile('todos.json', '[]');19 return [];20 }21}2223export async function getTodo(id: number): Promise<Todo | undefined> {24 let todos = await getTodos();25 return todos.find(todo => todo.id === id);26}2728export async function createTodo(formData: FormData) {29 let todos = await getTodos();30 let title = formData.get('title');31 let description = formData.get('description');32 let dueDate = formData.get('dueDate');33 let id = todos.length > 0 ? Math.max(...todos.map(todo => todo.id)) + 1 : 0;34 todos.push({35 id,36 title: typeof title === 'string' ? title : '',37 description: typeof description === 'string' ? description : '',38 dueDate: typeof dueDate === 'string' ? dueDate : new Date().toISOString(),39 isComplete: false,40 });41 await fs.writeFile('todos.json', JSON.stringify(todos));42}4344export async function updateTodo(id: number, formData: FormData) {45 let todos = await getTodos();46 let title = formData.get('title');47 let description = formData.get('description');48 let dueDate = formData.get('dueDate');49 let todo = todos.find(todo => todo.id === id);50 if (todo) {51 todo.title = typeof title === 'string' ? title : '';52 todo.description = typeof description === 'string' ? description : '';53 todo.dueDate =54 typeof dueDate === 'string' ? dueDate : new Date().toISOString();55 await fs.writeFile('todos.json', JSON.stringify(todos));56 }57}5859export async function setTodoComplete(id: number, isComplete: boolean) {60 let todos = await getTodos();61 let todo = todos.find(todo => todo.id === id);62 if (todo) {63 todo.isComplete = isComplete;64 await fs.writeFile('todos.json', JSON.stringify(todos));65 }66}6768export async function deleteTodo(id: number) {69 let todos = await getTodos();70 let index = todos.findIndex(todo => todo.id === id);71 if (index >= 0) {72 todos.splice(index, 1);73 await fs.writeFile('todos.json', JSON.stringify(todos));74 }75}
Findings
✓ No findings reported for this file.