Skip to content

UniBreakfast/test-task-fullstack-js

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Тестовое задание Fullstack JavaScript

(приступить к выполнению! (чеклист))

Задание рассчитано на 4-8 часов выполнения (при условии, что соискатель знаком с необходимыми технологиями, и ресёрч сводится к минимуму).

Использование фреймворков, библиотек или npm-модулей, написанных не Вами, не предполагается.

Использовать модули из стандартной поставки NodeJS нужно.


проект Proof of Concept "Front and Back on JS"

Back End

Сервер на NodeJS должен работать в качестве файлового сервера (выдавать файлы для работы Frontend-части) и принимать/отдавать данные по API (3 эндпоинта):

  1. POST для добавления нового сообщения
  2. POST для отправки следующего числа и получения среднего между ним и предыдущим в ответ
  3. GET для получения информации обо всех предыдущих числах и расчётах

Front End

Три страницы:

  1. О себе. Статический HTML с краткой информацией - несколько предложений, фотография.
  2. Доска сообщений с рендером предыдущих на стороне сервера (SSR) и формой добавления нового сообщения.
  3. Средние числа. Ввод числа в простую форму, отправка запроса на сервер, получение среднего числа в ответ, вывод результата над предыдущими. Рендер на стороне клиента (CSR).

Детали реализации

На всех страницах стили - предельно простой легко читаемый минимализм. Без изысков. Адаптив не нужен, но информация должна помещаться на экране по умолчанию.

страница Доска сообщений

  • при входе на страницу сервер формирует и выдаёт HTML-разметку с включением данных уже полученных сообщений (на старте сервера там одно захардкоденное сообщение)
  • каждое сообщение на экране состоит из значений полей text и author
  • кроме прошлых сообщений на странице находится форма размещения нового сообщения c теми же полями и кнопкой "разместить сообщение"
  • при отправке сообщения выполняется обновление страницы после которого новое сообщение должно появиться рядом с предыдующими (первым или последним - в зависимости от порядка сортировки)
  • сервер может хранить сообщения в массиве в памяти и/или (необязательно) в файле

страница Средние числа

  • пользователь вводит число в форму, сам отмечает, если число отрицательное и/или дробное (например галочками)
  • при нажатии кнопки "отправить и получить среднее" выполняется отправка запроса к серверу на второй API-эндпоинт
  • запрос и обработка ответа на клиенте посредством JavaScript без перезагрузок страницы
  • сервер в ответ присылает предыдущее число, последнее принятое от пользователя и среднее между ними
  • клиент выводит их под формой новой строкой (из неё должно быть понятно, где что)
  • данные предыдущих расчётов сдвигаются вниз
  • при входе/обновлении страницы приходящая от сервера HTML-разметка не содержит данных о предыдующих расчётах...
  • сразу после построения DOMa клиент отправляет запрос на третий эндпоинт, по получении ответа на который под формой выводится история предыдущих присланных и вычисленных чисел

Обязательно

  • сдача работы в виде ссылки на репозиторий на GitHub или аналог, убедительная история коммитов
  • все три страницы содержат ссылки для удобного перехода на две другие (и переход выполняется независимо от адреса локального или на хостинге) и на свой репозиторий проекта
  • сервер должен отдавать клиенту только публичные файлы (файлы бэкенда выдаваться не должны)
  • сервер не должен падать при запросах на получение отсутствующих файлов или на непредусмотренные API-эндпоинты

Желательно

  • страница 404, адекватно дающая понять, что запрошенного файла нет, стили на ней не принципиальны, но если они есть, то должны быть включены в разметку и не требовать отдельных запросов
  • отличимый префикс API-эндпоинтов
  • первый API-эндпоинт, принимающий новое сообщение, фиксирует дату его получения по серверному времени
  • второй API-эндпоинт, принимающий число и возвращающий среднее, учитывает знак и/или дробную часть числа, только если соответствующие флаги в форме были установлены, и отметки об этом были в пришедшем на сервер запросе (иначе берёт по модулю / отбрасывает дробную часть)
  • третий API-эндпоинт, отдающий информацию о предыдущих вычислениях, делает это в дружественном, понятном программистам виде (например, используя отформатированный JSON с ссответствующим нэймингом ключей объектов)
  • сервер не должен падать при некорректных данных / запросах с неправильными методами, вместо этого он должен отдавать предусмотренный отрицательный ответ без или с объяснением причин

и было бы здорово

  • деплой онлайн на Heroku (бесплатно) или любом другом сервисе, позволяющий проверить работу без скачивания/запуска у себя локально
  • учёт времени, затраченного на выполнение
  • фидбек по тестовому заданию, что было сложно, легко, интересно

и если очень захочется

(вне рамок времени, указанного вначале)

  • вывод сообщений с датами размещения в формате привычном для посетителей сайтов
  • работающие кнопки удаления сообщений с перезагрузкой страницы
  • валидация форм в браузере, проверка обязательных полей
  • валидация данных, приходящих на POST-эндпоинты
  • санитайзинг полей добавляемого сообщения на сервере и/или вывод их содержимого простым текстом (а не тэгами)
  • фон сообщений разных авторов разными оттенками, соответствующими указанному имени автора и не меняющимися при перезагрузке страницы
  • вывод статистики вычислений (максимальное, минимальное числа, амплитуда передаваемых чисел)
  • имитация сложности вычислений (небольшая искусственная задержка ответа сервера с отображением прелоадера)

(приступить к выполнению! (чеклист))