# All files todo.js

100% Statements 32/32
100% Branches 6/6
100% Functions 9/9
100% Lines 30/30

Press n or j to go to the next uncovered block, b, p or k for the previous block.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    651x
    1x

    1x

    28x
    28x
    16x

    13x

    19x

    13x
    13x
    5x

    13x
    13x
    13x

    2x

    3x
    3x
    3x
    1x

    2x
    2x
    2x

    4x
    4x
    4x
    1x

    3x
    3x
    3x

    1x

     const fs = require('fs');
    const path = require('path');

    const TODO_FILE = path.join(__dirname, 'todos.json');

    function loadTodos() {
      try {
        const data = fs.readFileSync(TODO_FILE, 'utf8');
        return JSON.parse(data);
      } catch (error) {
        return [];
      }
    }

    function saveTodos(todos) {
      fs.writeFileSync(TODO_FILE, JSON.stringify(todos, null, 2));
    }

    function addTodo(task) {
      const todos = loadTodos();
      const newTodo = {
        id: todos.length > 0 ? Math.max(...todos.map(t => t.id)) + 1 : 1,
        task,
        completed: false
      };
      todos.push(newTodo);
      saveTodos(todos);
      return newTodo;
    }

    function listTodos() {
      return loadTodos();
    }

    function completeTodo(id) {
      const todos = loadTodos();
      const todo = todos.find(t => t.id === id);
      if (!todo) {
        return null;
      }
      todo.completed = true;
      saveTodos(todos);
      return todo;
    }

    function deleteTodo(id) {
      const todos = loadTodos();
      const index = todos.findIndex(t => t.id === id);
      if (index === -1) {
        return null;
      }
      const deleted = todos.splice(index, 1)[0];
      saveTodos(todos);
      return deleted;
    }

    module.exports = {
      addTodo,
      listTodos,
      completeTodo,
      deleteTodo,
      loadTodos,
      saveTodos
    };