Техническое задание
Необходимо реализовать сервис для социальной сети.
Основные функции сервиса:
- регистрация нового пользователя;
- авторизация существующего пользователя;
- пользователь может искать других пользователей;
- пользователь может добавлять других пользователей в «друзья»;
- пользователь может удалять других пользователей из «друзей»;
- пользователь может получить список своих друзей;
Технологический стек:
- java 11+;
- база данных для хранения данных пользователей(любая на выбор);
- UI реализовывать не требуется (можно использовать swagger);
- unit-tests (опционально);*
Критерии завершения:
- Приложение написано и загружено в гит-репозиторий на проверку.
- Необходимо также подготовить инструкцию по запуску (README file).
- Опционально можно развернуть приложение на облачном сервисе (не обязательно).*
В качестве базы данных я использовал H2. Язык - Java 17. Сборщик проектов - Maven. Используемые зависимости: Spring (Boot, Web, Security, Data JPA), Java JWT, Lombok. Запуск проекта осуществляется через метод main класса S7TaskApplication. При запуске создаются нужные таблицы в БД и добавляются туда четыре тестовых пользователя. У пользователей могут быть одна или две роли: ROLE_ADMIN и ROLE_USER, а так же для всех неавторизованных пользователей доступна регистрация и авторизация. Доступ к остальному API приложения выдаётся на основании JSON Web Token, который выдаётся при авторизации.
Список тестовых пользователей:
username: "KanyeWest"
password: "god"
role: ROLE_ADMINusername: "WillSmith"
password: "1234"
role: ROLE_USERusername: "JohnSnow"
password: "1234"
role: ROLE_USERusername: "JohnTravolta"
password: "vincent"
role: ROLE_USER
Для работы с приложением нужен любой HTTP-клиент для работы с REST API. Я использовал Postman.
Тип контента тела запроса: x-www-form-urlencoded.
Чтобы зарегестрировать нового пользователя в приложении, нужно отправить на адрес
localhost:8092/api
POST запрос с телом (username и password должны состоять как минимум из 3 символов и
содержать только цифры и латинские буквы):
{
"username": "username",
"password": "password"
}
Чтобы авторизоваться в приложении, нужно отправить на адрес
localhost:8092/api/login
POST запрос с телом:
{
"username": "username",
"password": "password"
}
В ответ придёт access token в формате:
{
"access_token": "access_token"
}
в последующих запросах этот самый access token следует отправлять в headers в формате:
Authorization:access_token
Чтобы получить список имён всех пользователей приложения, нужно отправить на адрес
localhost:8092/api/users
GET запрос с access token пользователя, добавленным в headers, как показано выше.
Если всё успешно, то вернётся JSON файл со списком тестовых пользователей.
[
"KanyeWest",
"WillSmith",
"JohnSnow",
"JohnTravolta"
]
Чтобы получить список имён всех пользователей приложения, содержащих определённую строку, нужно отправить на адрес
localhost:8092/api/users/yourString, где yourString - ваша строка, GET запрос с access token пользователя,
добавленным в headers. Например запрос localhost:8092/api/users/john выдаст:
[
"JohnSnow",
"JohnTravolta"
]
Чтобы добавить пользователя в друзья, нужно отправить PUT запрос с access token в headers по адресу
localhost:8092/api/user/friends/friendUsername, где friendUsername - это username пользователя, которого нужно добавить в друзья.
Если ответ сервера true - то друг добавлен в список, false - не добавлен.
Чтобы удалить пользователя из друзей, нужно отправить DELETE запрос с access token в headers по адресу
localhost:8092/api/user/friends/notFriendAnymoreUsername, где notFriendAnymoreUsername - это username пользователя, которого нужно удалить из друзей.
Если ответ сервера true - то друг удалён из списка, false - не удалён.
Чтобы получить список друзей пользователя, нужно отправить GET запрос с access token в headers по адресу
localhost:8092/api/user/friends.
Чтобы получить список всех пользователей, нужно отправить GET запрос с его access token в headers по адресу
localhost:8092/api/admin/users и, соответственно, иметь ROLE_ADMIN.
Чтобы редактировать имя или/и пароль пользователя, нужно отправить PUT запрос access token в headers по адресу
localhost:8092/api/admin/user/{id}, где id - это id пользователя, которого надо поменять, и телом:
{
"username": "newUsername",
"password": "newPassword"
}
Чтобы удалить пользователя, нужно отправить DELETE запрос access token в headers по адресу
localhost:8092/api/admin/user/{id}, где id - это id пользователя, которого надо удалить: