Этот проект представляет собой серверную часть системы учета продукции для небольшой фермы. Система разработана для упрощения процесса записи и контроля над собранными товарами на ферме.
- Java 17
- Spring Web
- Spring Data Jpa
- Spring Security
- Spring Validation
- Spring Mail
- Spring Boot
- Postgresql
- Swagger
- Liquibase
- Mapstruct
- Maven
- Docker
Были выполнены все доп задания
Для корректной работы приложения необходимо передать environment параметры. Для настройки Spring Mail используются следующие параметры:
MAIL_HOST
MAIL_PORT
MAIL_USERNAME
MAIL_PASSWORD
STARTTLS_ENABLE
Также в проекте есть бин ReportService
, который нуждается в настройке.
Его параметр:
ADMIN_EMAIL
- Email адрес, на который будут приходить отчеты.
Для настройки бина JwtService
необходимо указать параметр:
SECRET_KEY
- Ключ для подписи токенов.
Кроме того, в приложении автоматически создается пользователь с правами администратора. Для этого необходимо настроить Liquibase. Его параметры:
LIQUIBASE_ADMIN_NAME
- Имя администратораLIQUIBASE_ADMIN_SURNAME
- Фамилия администратораLIQUIBASE_ADMIN_PATRONYMIC
- Отчество администратораLIQUIBASE_ADMIN_EMAIL
- Email администратораLIQUIBASE_ADMIN_PASSWORD
- Пароль администратора
Запустить приложение можно командой docker compose -f compose-prod.yml up
, добавив перед этим
.env
файл с environment переменными в корень проекта.
Эндпойнты разбиты по пяти категориям:
- auth - Для регистрации, авторизации и прочих операций, связанных с безопасностью.
- grade - Для операций, связанных с оценкой работы пользователей.
- harvest - Для операций, связанных с нормой сбора урожая.
- product - Для операций, связанных с товарами.
- report - Для операций, связанных с отчетами работников по сбору товаров.
POST /auth/register
- регистрация нового пользователя.
В тело подается json вида:
{
"email": "user@mail.ru",
"password": "passwd",
"name": "alex",
"surname": "johnson",
"patronymic": "james",
"role": "USER"
}
POST /auth/login
- вход в аккаунт.
В тело подается json вида:
{
"email": "user@mail.ru",
"password": "passwd"
}
В cookie сохраняются access_token
и refresh_token
с jwt токенами.
POST /auth/block/{userEmail}
- заблокировать профиль выбранного пользователя.
POST /auth/unblock/{userEmail}
- разблокировать профиль выбранного пользователя.
POST /grade
- оценить работу пользователя за текущий день.
В тело подается json вида:
{
"user": "user@mail.ru",
"grade": 5
}
GET /grade
- получить все оценки.
GET /grade/{userEmail}
- получить все оценки выбранного пользователя.
POST /harvest
- установить норму сбора урожая на определенную дату.
В тело подается json вида:
{
"product": "milk",
"rate": 10,
"date": "20.03.2024"
}
GET /harvest
- получить список всех норм сбора урожая.
GET /harvest/date/{date}
- получить список всех норм сбора урожая по определенной дате.
GET /harvest/product/{product}
- получить список всех норм сбора урожая по определенному продукту.
POST /product
- создать новый товар.
В тело подается json вида:
{
"name": "milk",
"amount": 50,
"measure": "LITER"
}
DELETE /product/{productName}
- удалить товар.
GET /product
- получить список всех товаров.
POST /report
- создать отчет по собранному товару.
В тело подается json вида:
{
"product": "milk",
"amount": 4
}
GET /report/stat
- получить общую статистику по ферме за определенные промежутки времени.
В тело подается json вида:
{
"start_date": "20.02.2024",
"end_date": "20.03.2024"
}
GET /report/stat/{userEmail}
- получить статистику по работнику за определенные промежутки времени.
В тело подается json вида:
{
"start_date": "20.02.2024",
"end_date": "20.03.2024"
}
GET /swagger-ui/index.html
- swagger ui