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

233 lines
7.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Тестовое задание
## Общее описание
В качестве тестового задания необходимо реализовать RESTfull приложение
1. При разработке использовать spring boot остальное на ваше усмотрение, желательно придерживаться экосистемы spring.
1. При разработке использовать в качестве базы Postgres
1. cross-origin должно быть отключено.
1. доступ к сервису возможен только при наличии токена secret во всех остальных случаях кроме “GET /exit” возвращать 401 название и реализация на ваше усмотрение, инструкция для передачи токена должна прилагаться в месте с тестовым заданием.
1. сервис должен запускаться на 8010 порту
1. name и email должны быть регистронезависимые
1. Добавить фильтр при регистрации на проверку уникальности поля email в случае если Email есть в базе возвращать 409 статус
1. к исходникам должен прилагаться артефакт приложения
1. Для данного приложения реализуйте и подключил OpenApi (swagger)
1. Версия java не выше 11
1. Сборщик 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`
1. **DEMO** - в данном режиме используется база данных H2 DB. Для запуска используем следующие параметры `java -jar restsrv.jar --spring.profiles.active=demo`
1. **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