Files
profile-rest-service/README.md
2023-06-11 00:23:46 +03:00

7.5 KiB
Raw Permalink Blame History

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

Общее описание

В качестве тестового задания необходимо реализовать RESTfull приложение

  1. При разработке использовать spring boot остальное на ваше усмотрение, желательно придерживаться экосистемы spring.
  2. При разработке использовать в качестве базы Postgres
  3. cross-origin должно быть отключено.
  4. доступ к сервису возможен только при наличии токена secret во всех остальных случаях кроме “GET /exit” возвращать 401 название и реализация на ваше усмотрение, инструкция для передачи токена должна прилагаться в месте с тестовым заданием.
  5. сервис должен запускаться на 8010 порту
  6. name и email должны быть регистронезависимые
  7. Добавить фильтр при регистрации на проверку уникальности поля email в случае если Email есть в базе возвращать 409 статус
  8. к исходникам должен прилагаться артефакт приложения
  9. Для данного приложения реализуйте и подключил OpenApi (swagger)
  10. Версия java не выше 11
  11. Сборщик Maven

Описание endpoints

POST /profiles/set

Создает запись профиля и присваивает ему id

Request:

принимает json следующей структурой:

{
 "name": string
 "email": string
 "age": int
}

Responses:

в случае успеха возвращает id записи пользователя

status 200

{
 "idUser": int
}

В случае не корректного email

status 400

{
 "msg": string
}

В случае если email уже передавался (реализовать через фильтр)

status 403

{
 “msg”: string
}

GET /profiles/last

Возвращает последний созданный профиль

Responses:

status 200

{
 "id": int
 "name": string
 "email": string
 "age": int
 "created": timestamp
}

GET /profiles

Возвращает все созданные профили

Responses:

status 200

[{
 "id": int
 "name": string
 "email": string
 "age": int
 "created": timestamp
}...]

###GET /profiles/{ID}

Возвращает профиль по его ID

Responses:

status 200

{
 "id": int
 "name": string
 "email": string
 "age": int
 "created": timestamp
}

status 404

в случае если запись не найдена

{
 "msg": string
}

POST /profiles/get

Возвращает профиль по email

Request:

принимает json следующей структурой:

{
 "email": string
}

Responses:

status 200

{
 'id": int
 "name": string
 "email": string
 "age": int
 "created": timestamp
}

status 404

в случае если запись не найдена

{
 "msg": string
}

GET /error/last

Возвращает сообщение последней ошибки

Responses:

status 200

{
 "msg": string
 "created": timestamp
}

Не обязательная часть задания:

GET /exit

Производит закрытия приложение с редиректом на страницу /exit-success (название вариативно) с надписью ‘приложение закрыто’ допускаются и другие варианты информирования о закрытие.


Комментарий к выполненной работе

Программу можно запустить в нескольких режимах используя профили spring boot

  1. DEFAULT - в данном режиме используется база данных postgresql с настройками по умолчанию, а именно url:jdbc:postgresql://localhost/test, username: test, password: test. Для запуска используем следующие параметры java -jar restsrv.jar
  2. DEMO - в данном режиме используется база данных H2 DB. Для запуска используем следующие параметры java -jar restsrv.jar --spring.profiles.active=demo
  3. PRODUCTION - в данном режиме используется база данных postgresql c альтернативными настройками прописанными в файле application-prod.properties, данный файл должен находиться в том же каталоге где и запускаемый jar-файл программы. Для запуска используем следующие параметры java -jar restsrv.jar --spring.profiles.active=prod

Пример содержимого файла application-prod.properties

RESTSRV_PGSQL_DB_HOST=jdbc:postgresql://localhost
RESTSRV_PGSQL_DB_PORT=5432
RESTSRV_PGSQL_DB_NAME=test
RESTSRV_PGSQL_DB_USER=test
RESTSRV_PGSQL_DB_PASSWORD=test

Так же для запуска программы в linux, можно воспользоваться скриптом restsrv_linux.sh , при этом запускаемый jar-файл должен называться restsrv.jar и находиться в том же каталоге, где и скрипт. Выполните restsrv_linux.sh --help для получения помощи. При запуске в режиме PRODUCTION будет выполнена проверка на наличие файла application-prod.properties, если он не найден, то запустится интерактивный режим, где будет предложено заполнить необходимые данные.

Работа с программой

Инициализация БД

Если работа ведётся с postgresql воспользуйтесь файлами ddl-postgresql.sql и schema-postgresql.sql см. каталог init_postgresql_db

Работа с токеном безопасности.

По условию задания, доступ к эндпоинтам сервиса осуществляется при помощи токена secret . В каждом звпросе, в заголовке запроса, должна присутствовать следующая строка Authorization: Bearer secret , без данной записи в заголовке, при обращении к защищенным эндпоинтам будет возвращаться код 401.

Прочее

В программе используется OpenApi c ui, для доступа к ui используем http://localhost:8010/swagger-ui/index.html , в представлении json используем http://localhost:8010/v3/api-docs


Тестовое задание выполнил

Александров А.А. (alexandrov@resprojects.ru)

ссылка на профиль hh.ru - https://hh.ru/resume/7cdada75ff015e78530039ed1f366c4b4a5273