Спецификация проекта Список дел

В этом проекте мы создадим простой, но очень полезный сервис — Список дел (To‑Do List).

Он позволит добавлять задачи, отмечать выполненные и получать актуальный список.

Такой проект поможет вам закрепить навыки работы с основными узлами, научиться хранить и обрабатывать данные, а также лучше понять, как строить практичные сценарии автоматизации.

Для хранения списка мы будем использовать базу данных MongoDB. У вас появится еще один навык.

Этот проект станет основой для более сложных сценариев, которые мы будем разбирать в следующих главах с использованием AI.

Область применения

Например, вы собираетесь в магазин и заранее добавляете в список покупок: молоко, хлеб, овощи, кофе. Когда что‑то куплено, отмечаете это в списке.

Цель проекта

Создать простой сервис для управления списком дел, который позволяет:

  • Добавлять новые задачи
  • Редактировать существующие задачи
  • Отмечать задачи как выполненные
  • Получать актуальный список задач
  • Удалять задачи

Сущность Task и ее свойства

В этом проекте мы будем работать с одной сущностью — Task.

Самые необходимые свойства задачи:

  • _id: уникальный идентификатор задачи (string)
  • title: заголовок задачи (string)
  • completed: статус выполнения задачи (boolean, по умолчанию false)
  • createdAt: дата создания задачи в миллисекундах прошедших с 1 января 1970 года (number)
  • updatedAt: дата последнего обновления задачи в миллисекундах прошедших с 1 января 1970 года (number)

Формат даты

Существуют разные форматы даты, но в этом проекте мы будем использовать timestamp — количество миллисекунд, прошедших с 1 января 1970 года.

Формат timestamp в миллисекундах позволяет легко сравнивать даты и сортировать задачи по времени создания или обновления потому что это просто число.

Создание записи

POST /todo — создать новую задачу

Тело запроса:

{
  "title": "Learn JavaScript"
}

Ответ: созданная задача с уникальным _id и completed: false.

Пример ответа:

{
  "title": "Learn JavaScript",
  "complete": false,
  "createdAt": 1755060418448,
  "_id": "689c18c3003402dd6240a7d7"
}

Получение всех записей

GET /todo — получить список всех задач

Ответ: массив всех задач.

Пример ответа:

[
  {
    "_id": "689c18c3003402dd6240a7d7",
    "title": "Learn JavaScript",
    "complete": false,
    "createdAt": 1755060418448
  },
  {
    "_id": "689c195e003402dd6240a7d8",
    "title": "Buy milk",
    "complete": false,
    "createdAt": 1755060574173
  },
  {
    "_id": "689c195e003402dd6240a7d9",
    "title": "Buy bread",
    "complete": false,
    "createdAt": 1755060574207
  },
  {
    "_id": "689c195e003402dd6240a7da",
    "title": "Buy apples",
    "complete": false,
    "createdAt": 1755060574222
  }
]

Обновление записи

PATCH /todo — обновить существующую задачу

В теле запроса нужно указать _id задачи, которую нужно обновить, и новые значения свойств title или completed.

Обновление только одного свойства, например, только completed

{
  "_id": "689c18c3003402dd6240a7d7",
  "completed": true
}

Обновление только заголовка задачи:

{
  "_id": "689c18c3003402dd6240a7d7",
  "title": "Learn JavaScript and Node.js"
}

Обновление нескольких свойств сразу:

{
  "_id": "689c18c3003402dd6240a7d7",
  "title": "Learn JavaScript and Node.js",
  "completed": true
}

Ответ: обновленная задача.

Пример ответа:

{
  "title": "Byu milk and tea",
  "complete": false,
  "createdAt": 1755060574207,
  "updatedAt": 1755062552352
}

Добавляется новое свойство updatedAt с текущей датой в формате timestamp.

Удаление записи

DELETE /todo — удалить задачу

Тело запроса:

{
  "_id": "66bda1f47f3d2c001e3c1b23"
}

Ответ: сообщение об успешном удалении.

Пример ответа:

[
  {
    "deletedCount": 1
  }
]

Все запросы на один адрес

Все запросы к сервису будут отправляться на один адрес: /todo.

Различие только в методах HTTP.

Отличие в методах позволяет серверу понять, на кого перенаправить запрос.