Added project

This commit is contained in:
2023-06-11 00:23:46 +03:00
parent 7a8ca16c1f
commit 366ce44813
36 changed files with 2274 additions and 23 deletions

234
README.md
View File

@@ -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