Added project
This commit is contained in:
234
README.md
234
README.md
@@ -1,3 +1,233 @@
|
||||
# profile-rest-service
|
||||
# Тестовое задание
|
||||
|
||||
Тестовое задание. В качестве тестового задания необходимо реализовать RESTfull приложение.
|
||||
## Общее описание
|
||||
|
||||
В качестве тестового задания необходимо реализовать 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
|
||||
Reference in New Issue
Block a user