Тестовое задание.
Сделать веб-приложение состоящее из формы регистрации, авторизации, и страницы личного кабинета, которая отображается в случае успешной авторизации.
На странице регистрации и авторизации нужно ввести только логин и пароль. При регистрации пароль повторить 2 раза. Логины должны быть уникальные и не повторяться.
После успешного входа, в личном кабинете, пользователь видит надпись "Привет, <your_login>!" И список всех остальных пользователей, и рядом с каждым из них есть кнопка "Удалить", которая должна удалять выбранного пользователя. Также должна быть кнопка для выхода из личного кабинета и для удаления собственного аккаунта.
Требования:
-
Весь front-end должен быть сделать на React. Это должно быть SPA и страница не должна перезагружаться при переходах между формами, удалениями пользователей и выходе из личного кабинета.
-
Если пользователь авторизован, то при перезагрузке всей страницы авторизация не должна исчезать. То есть надо открыть сессию как-либо.
-
Back-end должен быть сделан на Node.js 10.
-
Все данные на сервере должны храниться в SQLite. База данных должна создаваться при старте приложения, если ее нет, или использоваться та, что была создана ранее. То есть при перезапуске сервера данные исчезать не должны.
-
Все должно быть сделано в GIT-репозитории, выложено в сеть (например на GitHub). Нам нужно будет прислать лишь ссылку на репозиторий, по которой мы сможем его скачать.
-
В корне проекта должен быть файл README.md, в котором надо поместить краткое описание проекта, а также команды (npm-скрипты) для запуска кода в отладочном и промышленном режиме. Например, чтобы запустить код в отладочном режиме, надо выполнить
npm install
npm run dev
В промышленном serverless:
npm install
npm run build
npm run start
В промышленном локально где есть Node:
npm install
npm run build
npm run localProdCluster
Можно использовать yarn вместо npm
- Код должен одинаково запускаться как на Linux, так и на Windows. НЕ ДОЛЖНО БЫТЬ НИКАКИХ ОСОБЫХ ТРЕБОВАНИЙ ДЛЯ ЗАПУСКА, кроме глобально установленного Node.js 10 и npm, а также пакетов, которые легко поставить через npm, вроде yarn, pm2, nodemon. SQLite ставится как локальный пакет. То есть, условно серия команд
Должна приводить к запуску проекта на любой машине подключенной к сети, с установленным Node.js. Конкретные команды (а также требования к глобальным пакетам) могут быть иными, их надо четко обозначить в README.md
Будет плюсом:
- Использование Redux (Redux-Thunk, Redux-Saga) для хранения состояния. ✔️
- Использование чистого SQL для создания БД и работы с данными. ✔️
- Использование React Router на клиенте. ✔️
- Добавление постраничного разбиения списка пользователей в личном кабинете. ❌
- Хранение паролей в хэшированном виде, например с использованием bcrypt. ✔️
- Добавление серверного рендеринга. ✔️
- Динамическая валидация полей на клиенте, например логин от 3 до 15 символов, пароль от 5 до 100. ✔️
- Использование pm2 для запуска в промышленном режиме. ✔️
- Искапсуляция CSS: CSS in JS, CSS modules и пр. ✔️
ПРИМЕЧАНИЕ.
Не стоит пытаться выполнить все доп. задания, некоторые из них, типа серверного рендеринга, могут существенно усложнить жизнь, если вы не используете чего-то вроде Next.js и никогда не делали этого раньше.
Предполагается, что хороший программист, который работал и front-end и с back-end, соединял React с сервером в процессе разработки, сможет сделать основное задание за 3 часа (владение SQL тоже должно быть нормальным). Хотя в некоторых случаях, может потребоваться пара дней, особенно если хочется сделать все плюсы.
Цель задания - продемонстрировать общие навыки создания full-stack приложения с нуля. Дизайн вылизывать не надо. Рекомендуется сначала сделать основное задание, а потом уже думать о плюсах, хотя некоторые из них, типа хэширования паролей, вероятно, делаются очень просто наряду с основным заданием.
Не предполагается вопросов-уточнений. Если что-то не обозначено в задании, то это остается на усмотрение испытуемого - конкретный Node.js фреймворк, место хранения сессии, библиотеки CSS, тип серверного API и пр. Можно использовать феймворки на базе React.