/nextjs-apollo-sqlite

99 Lighthouse Perfomance - TypeScript/Apollo/Next.js/PM2/Styled-Components/Sqlite

Primary LanguageTypeScript

Тестовое задание.

Сделать веб-приложение состоящее из формы регистрации, авторизации, и страницы личного кабинета, которая отображается в случае успешной авторизации.

На странице регистрации и авторизации нужно ввести только логин и пароль. При регистрации пароль повторить 2 раза. Логины должны быть уникальные и не повторяться.

После успешного входа, в личном кабинете, пользователь видит надпись "Привет, <your_login>!" И список всех остальных пользователей, и рядом с каждым из них есть кнопка "Удалить", которая должна удалять выбранного пользователя. Также должна быть кнопка для выхода из личного кабинета и для удаления собственного аккаунта.

Требования:

  1. Весь front-end должен быть сделать на React. Это должно быть SPA и страница не должна перезагружаться при переходах между формами, удалениями пользователей и выходе из личного кабинета.

  2. Если пользователь авторизован, то при перезагрузке всей страницы авторизация не должна исчезать. То есть надо открыть сессию как-либо.

  3. Back-end должен быть сделан на Node.js 10.

  4. Все данные на сервере должны храниться в SQLite. База данных должна создаваться при старте приложения, если ее нет, или использоваться та, что была создана ранее. То есть при перезапуске сервера данные исчезать не должны.

  5. Все должно быть сделано в GIT-репозитории, выложено в сеть (например на GitHub). Нам нужно будет прислать лишь ссылку на репозиторий, по которой мы сможем его скачать.

  6. В корне проекта должен быть файл 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

  1. Код должен одинаково запускаться как на 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.