smena javascript
Тестовое задание для frontend-разработчика javascript
Задача - реализовать одностраничное приложение (SPA), в котором пользователь может зарегистрироваться и просмотреть личную информацию о себе.
Для простоты разработки данного приложения в виде backend-части в данном репозитории представлен файл app.js. backend-часть дополнять и изменять не нужно. Процесс запуска api на вашей машине описан ниже. Авторизация и регистрация на backend-части реализована через JSON Web Token.
Требования
Приложение должно состоять из следующих страниц:
/login- страница с формой входа/register- страница с формой регистрации/- Главная страница с информацией о пользователе.
Описание страницы /login
Здесь содержится форма авторизации пользователя.
Также должен быть предусмотрен переход на страницу /register в виде кнопки.
Описание страницы /register
Здесь содержится форма регистрации пользователя.
Также должен быть предусмотрен переход на страницу /login в виде кнопки.
Описание страницы / - Главная страница
Здесь содержится информация о пользователе - его аватар, текст о себе, имя пользователя.
Желательно оформить в виде карточки.
Технические требования
- Убедитесь, что у вас стоит Node.js последней LTS версии: https://nodejs.org/en/
- Приложение должно быть написано на
javascript. - Используемый фреймворк -
Vuejs. - Компонентная библиотека -
Vuetify.js
Запуск API
- Убедитесь, что у вас стоит последняя node LTS версии. Ссылка для скачивания: https://nodejs.org/en/
- В консоли открыть папку
frontend - Устанавливаем зависимости api - в консоли запускаем команду
npm install - Запускаем api - в консоли запускаем команду
node app.js
В результате в консоли получаем output:
Сервер с API стартовал по адресу http://localhost:8080
При выполнении запросов к api в консоли будут возникать логи, удобно для тестирования приложения.
Запрос с jwt-токеном
Чтобы отправить запрос с токеном нужно указать заголовок Authorization: Bearer ${токен пользователя}
Примечания
- Реализацию frontend-части следует делать
в отдельном репозитории, а не в этом репозитории. Этот репозиторий содержит в себе только backend-часть в виде api. - Во время разработки приложения не стоит изобретать велосипеды. Для компонентов формы и карточек предусмотрена библиотека
Vuetify.js. - При работе с
Vue.jsследует использоватьVuex,Vue-cli,Vue-router - При перезапуске backend-части приложения список пользователей сбрасывается к стандартному состоянию!
- Написанные unit/e2e-тесты будут плюсом. Для юнитов у нас используется
jest, для e2e -cypress - Использование соверменного javascript-синтаксиса будет плюсом (ES5+ фишки)
Результат проделанной работы
Результат данного тестового задания следует опубликовать на github.com в виде репозитория с публичным доступом
Описание endpoint'ов API
Ниже будут представлены все возможные endpoint'ы api.
Важные замечания:
- По умолчанию api запускается по адресу
http://localhost:8080 - При перезапуске api пользователи сбрасываются в стандартное состояние
- Для теста api можно использовать
postmanили любую другую утилиту, которая умеет слать http-запросы
/login/ - авторизация пользователя
Данный эндпоинт принимает запросы на авторизацию пользователей. Метод HTTP-запроса - POST
Тело запроса (в виде json)
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
| username | String | + | Имя пользователя |
| password | String | + | Пароль |
Возможные ответы эндпоинта
200 - успешная авторизация
| Поле | Тип | Описание | Значение |
|---|---|---|---|
| token | String | JWT-токен пользователя | %сгенерированный jwt-токен% |
| error | String | Ошибка, если таковая имеется | null |
401 - неправильные имя пользователя/пароль
| Поле | Тип | Описание | Значение |
|---|---|---|---|
| token | String | Токен | null |
| error | null | Ошибка | "Введите правильные имя пользователя/пароль" |
/register/ - регистрация пользователя
Данный эндпоинт принимает запросы на авторизацию пользователей. Метод HTTP-запроса - POST
Тело запроса (в виде json)
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
| username | String | + | Имя пользователя |
| password | String | + | Пароль |
Возможные ответы эндпоинтa
200 - успешная регистрация
| Поле | Тип | Описание | Значение |
|---|---|---|---|
| message | String | Сообщение | "Пользователь успешно зарегистрирован" |
401 - регистрация не удалась
| Поле | Тип | Описание | Значение |
|---|---|---|---|
| message | String | Сообщение | "Пользователь с таким именем уже зарегистрирован" |
/about/ - Информация о пользователе
Данный эндпоинт возвращает информацию о пользователе, которая есть на сервере Метод HTTP-запроса - GET
Возможные ответы эндпоинтa
200 - успешное получение информации
| Поле | Тип | Описание | Значение |
|---|---|---|---|
| id | Integer | id пользователя | %id пользователя% |
| username | String | Имя пользователя | %имя пользователя% |
| avatar | String | http-ссылка на картинку с аватаркой пользователя | %avatar% |
| about | String | Текст "о пользователе" | %текст в api% |
401 - пользователь не авторизован
Если в заголовке не передавать jwt-токен, либо jwt-токен был просрочен - вернется ответ
400 - не удалось получить информацию
| Поле | Тип | Описание | Значение |
|---|---|---|---|
| message | String | Сообщение | "Не удалось получить информацию о пользователе" |
Полезные ссылки
- https://vuejs.org/ - Vuejs
- https://cli.vuejs.org/ - Vue-cli
- https://vuetifyjs.com/ - Vuetifyjs
- https://router.vuejs.org/- Vue-router
- https://www.getpostman.com/ - postman