Giter Site home page Giter Site logo

javascript-task-8's Introduction

Задача «Мессенджер»

Перед выполнением задания внимательно прочитайте:

Основное задание

🎉 Ура! В этой задаче можно пользоваться любыми внешними библиотеками! 🎉

Билли обидно, что у его друзей есть чатики без него. Поэтому он решил создать и всячески продвигать свой собственный мессенджер, в котором нет такого недостатка by design.

Киллер-фича данного мессенджера в том, что любой пользователь может читать все сообщения.

Мессенджер состоит из сервера и клиента. Сервер хранит сообщения, умеет отдавать их и добавлять новые. С клиента можно удобно смотреть и отправлять сообщения. При отправке сообщения можно указывать от кого и кому (а можно не указывать, тогда это анонимное сообщение для всех).

  1. Сервер будет отвечать на запросы по адресу http://localhost:8080. Сообщения - это объекты такого вида:

    {
        "from": "Вася",
        "to": "Игорь",
        "text": "Привет!"
    }
    

    Где все поля содержат непустые строки, а from и to могут отсутствовать.

    У сервера должна быть следующая функциональность:

    • Получение сообщений

      • Адрес: /messages
      • HTTP-метод: GET
      • Query-параметры: from, to

      Метод возвращает список сообщений, отфильтрованных по from и to:

      • Если указаны from и to, то возвращаются сообщения с этими from и to
      • Если указан только from, то возвращаются сообщения с этим from и любым to
      • Если указан только to, то возвращаются сообщения с этим to и любым from
      • Если не указаны ни from, ни to, то возвращаются все сообщения
    • Создание сообщений

      • Адрес: /messages
      • HTTP-метод: POST
      • Query-параметры: from, to
      • Содержимое тела запроса: { "text": "Какой-то текст" }

      Этот метод должен сохранять сообщение на сервере и отвечать созданным сообщением. Параметр from/to может быть не указан, в таком случае этого поля в сообщении не будет.

    • Все сообщения передаются в формате json, поэтому нужно выставлять соответствующий заголовок Content-Type

    • На любые другие адреса сервер должен отвечать кодом 404

  2. Сервер бесполезен, если им нельзя пользоваться, потому мы напишем консольный клиент для него.
    Интерфейс клиента следующий: node client.js [command] [--param1] [--param2]
    Сначала идет команда, которая определяет, хотим ли мы отправить сообщение (send) или получить (list).
    Далее передаются параметры в таком виде: --from=Вася --to Игорь --text "Привет, Игорь". Обратите внимание, что имя и значение параметра могут разделяться пробелом или символом =, а также параметры могут передаваться в произвольном порядке.

    • Команда list запрашивает у сервера сообщения, передавая параметры from и to. Полученнные сообщения выводятся на экран в следующем формате:

      format

      • Если есть поле from(to), то оно выводится после соответствующего заголовка, написанного красным (#f00) цветом
      • Поле text выводится после заголовка зеленого (#0f0) цвета
      • Сообщения должны разделяться дополнительным переводом строки
      • После последнего сообщения переводов строк быть не должно
    • Команда send отправляет на сервер сообщение, передавая параметры from, to и text. Добавленное сообщение выводится на экран в том же формате, как сообщения в команде list

    • Обратите внимание, что во всех командах, если from или to – пустая строка, то параметр не нужно передавать в запросе к серверу

Раскраска

Для того, чтобы красить текст в консоли, используйте мелки библиотеку chalk

Запуск

  1. Сначала необходимо запустить сервер командой node server.js
  2. Затем открыть вторую консоль и запускать клиент командой node client.js <command> <args>

Дополнительное задание (-10 к анонимности)

Иногда хочется начать жизнь в интернете с чистого листа, так что давайте дадим возможность сделать это! Для этого вам нужно:

  1. Придумать уникальный строковый идентификатор для каждого сообщения, который должен храниться в поле id.
  2. Добавить в сообщение поле edited типа Boolean, которое показывает, не менялся ли текст сообщения. Если сообщение не менялось, поле должно отсутствовать.
  3. Добавить серверу такую функциональность:
    • Удаление сообщений

      • Адрес: /messages/<id>,
      • HTTP-метод: DELETE

      Метод удаляет сообщение с заданным id и возвращает { "status": "ok" }.

    • Изменение сообщений

      • Адрес: /messages/<id>
      • HTTP-метод: PATCH
      • Содержимое тела запроса: { "text": "Какой-то текст" }

      Метод изменяет текст сообщения с заданным id, выставляет флаг edited: true и возвращает объект измененного сообщения. id при изменении должен сохраниться.

  4. Также необходимо доработать консольный интерфейс, добавив возможность подробного вывода и две новые команды: delete и edit.
    • Режим подробного вывода включается, если при вызове команды передать ключ -v. В этом режиме к каждому сообщению в начало добавляется строка ID: <id>, где ID окрашено в желтый (#ff0) цвет

    • Команда delete удаляет сообщение, принимая параметр id. После успешного удаления, команда печатает в консоль "DELETED"

    • Команда edit изменяет текст уже существующего сообщения, принимая параметры id и text. Измененное сообщение выводится на экран, к его тексту добавляется пометка (edited) серого (#777) цвета:

      edited

    • Команда list также должна добавлять при выводе измененных сообщений пометку (edited) серого (#777) цвета после их текста

anonim

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.