Этот проект представляет собой систему управления задачами с поддержкой JWT-аутентификации и различными уровнями доступа. Включает два компонента: backend на базе Spring Boot и PostgreSQL для хранения данных. Для удобства запуска используется Docker Compose.
- Java 17
- Spring Boot
- Spring Security
- Spring Data JPA
- Spring AOP
- Hibernate Validator
- Liquibase
- Springdoc OpenAPI
- Swagger
- PostgreSQL
- MapStruct
- Lombok
- JUnit 5
- Testcontainers
- Регистрация нового пользователя.
- Аутентификация пользователя с получением JWT токена.
- Создание, обновление, получение и удаление задач.
- Фильтрация задач по различным параметрам (например, автору, исполнителю, статусу, приоритету).
- Добавление и удаление комментариев к задачам.
- Управление задачами с разными правами доступа для пользователей и администраторов.
-
POST /auth/sign-up
- Описание: Регистрация нового пользователя.
- Пример запроса:
{ "username": "user1", "password": "password123", "email": "user1@example.com" } - Ответ:
{ "token": "jwt_token_here" }
-
POST /auth/sign-in
- Описание: Аутентификация пользователя.
- Пример запроса:
{ "username": "user1", "password": "password123" } - Ответ:
{ "token": "jwt_token_here" }
-
POST /user/tasks
- Описание: Создание задачи.
- Пример запроса:
{ "title": "Новая задача", "description": "Описание задачи", "priority": "HIGH" } - Ответ:
{ "id": 1, "title": "Новая задача", "priority": "HIGH", "status": "PENDING" }
-
GET /user/tasks/{taskId}
- Описание: Получение задачи по ID.
- Ответ:
{ "id": 1, "title": "Новая задача", "description": "Описание задачи", "status": "PENDING" }
-
POST /admin/tasks
- Описание: Создание новой задачи.
- Пример запроса:
{ "title": "Задача для администратора", "description": "Описание задачи", "priority": "HIGH" } - Ответ:
{ "id": 2, "title": "Задача для администратора", "priority": "HIGH", "status": "PENDING" }
-
DELETE /admin/tasks/{taskId}
- Описание: Удаление задачи.
- Ответ:
{ "message": "Задача удалена" }
Для удобства работы с API, вы можете использовать Swagger UI. Просто откройте браузер и перейдите по следующему адресу, чтобы ознакомиться с документацией API и протестировать все эндпоинты:
Перед тем как начать, убедитесь, что у вас установлены следующие компоненты:
Клонируйте репозиторий на вашу локальную машину:
git clone <url-вашего-репозитория>
cd <папка-проекта>По умолчанию, все переменные уже заданы. Однако, при необходимости, их можно переопределить с помощью файла .env или передав при запуске Docker.
Создайте файл .env в корне проекта и добавьте в него следующие параметры:
SPRING_DATASOURCE_URL=jdbc:postgresql://db:5432/tmsdb
SPRING_DATASOURCE_USERNAME=userName
SPRING_DATASOURCE_PASSWORD=P@ssw0rd
JWT_SECRET=357638792F423F4428472B4B6250655368566D597133743677397A2443264629
JWT_EXPIRATION=86400000
JWT_TOKEN_PREFIX=Bearer
JWT_HEADER_STRING=Authorization
ADMIN_USERNAME=Admin
ADMIN_PASSWORD=Admim@*1
ADMIN_EMAIL=admin_mail@email.comМожно передавать переменные прямо в командной строке:
SPRING_DATASOURCE_URL=jdbc:postgresql://custom-db:5432/tmsdb docker-compose up -d --buildℹ️ Примечание: Если
.envне будет создан и переменные не переданы вручную, приложение возьмет значения по умолчанию изapplication.yml.
Запустите приложение с помощью Docker Compose:
docker-compose up -d --build- Флаг
-dзапускает контейнеры в фоновом режиме. - Флаг
--buildпересобирает контейнер при изменении кода.
После успешного запуска, убедитесь, что сервис работает:
-
Backend API будет доступен по адресу: http://localhost:8080
-
Swagger UI http://localhost:8080/swagger-ui
-
PostgreSQL будет работать на порту
5432. -
Администратор регистрируется при запуске приложения(username и пароль в переменных окружения).
Чтобы остановить и удалить контейнеры, выполните:
docker-compose downЕсли нужно удалить также созданные тома (данные БД):
docker-compose down -vЕсли хотите запустить проект без Docker, выполните следующие шаги:
- Установите PostgreSQL локально и создайте базу данных
tmsdb. - При необходимости, переопределите переменные окружения при запуске.
- Запустите Spring Boot-приложение:
SPRING_DATASOURCE_URL=jdbc:postgresql://localhost:5432/tmsdb SPRING_DATASOURCE_USERNAME=userName SPRING_DATASOURCE_PASSWORD=P@ssw0rd ./mvnw spring-boot:runℹ️ Примечание: Если переменные окружения не переданы, будут использоваться значения по умолчанию из
application.yml, гдеlocalhostуже установлен.
Теперь у вас есть готовая система управления задачами с поддержкой JWT-аутентификации, работающая как в контейнерах, так и локально. 🚀