Микросервис для управления пользователями спортивной платформы.
- Регистрация и аутентификация (email/password, JWT)
- JWT авторизация
- RBAC (роли: участник, организатор, админ)
- Управление профилем пользователя
-
Создайте секретный ключ для JWT:
mkdir -p secrets head -c 64 /dev/urandom | base64 > secrets/jwt_secret.key
-
Соберите и запустите сервисы:
docker-compose up --build -d
-
Проверьте логи приложения:
docker-compose logs -f user-service
-
Проверьте доступность API:
- http://localhost:8080/
- Swagger (если включён): http://localhost:8080/swagger-ui/
SPRING_DATASOURCE_URL— строка подключения к БД (пример:jdbc:postgresql://userdb:5432/users)SPRING_DATASOURCE_USERNAME— имя пользователя БДSPRING_DATASOURCE_PASSWORD— пароль БДJWT_SECRET_PATH— путь к секретному ключу для JWT (по умолчанию/run/secrets/jwt_secret)
secrets:
jwt_secret:
file: ./secrets/jwt_secret.key
services:
userdb:
image: postgres:16-alpine
container_name: user-postgres
restart: unless-stopped
environment:
POSTGRES_DB: users
POSTGRES_USER: myuser
POSTGRES_PASSWORD: mypassword
ports:
- "5433:5432"
volumes:
- user_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U myuser -d users"]
interval: 10s
retries: 5
user-service:
build: .
container_name: user-service
restart: on-failure
depends_on:
userdb:
condition: service_healthy
environment:
SPRING_DATASOURCE_URL: jdbc:postgresql://userdb:5432/users
SPRING_DATASOURCE_USERNAME: myuser
SPRING_DATASOURCE_PASSWORD: mypassword
JWT_SECRET_PATH: /run/secrets/jwt_secret
ports:
- "8080:8080"
secrets:
- jwt_secret
volumes:
user_data:POST http://localhost:8080/api/v1/auth/register
Content-Type: application/json
{
"email": "test@example.com",
"password": "password123",
"name": "Test",
"surname": "User"
}
POST http://localhost:8080/api/v1/auth/login
Content-Type: application/json
{
"email": "test@example.com",
"password": "password123"
}
GET http://localhost:8080/api/v1/auth/me
Authorization: Bearer <ваш_JWT_токен>
PATCH http://localhost:8080/api/v1/auth/me
Authorization: Bearer <ваш_JWT_токен>
Content-Type: application/json
{
"name": "NewName"
}
PATCH http://localhost:8080/api/v1/auth/change-password
Authorization: Bearer <ваш_JWT_токен>
Content-Type: application/json
{
"oldPassword": "password123",
"newPassword": "newpassword456"
}
В проекте есть файл user-service.postman_collection.json. Импортируйте его в Postman для быстрого тестирования всех эндпоинтов.
- Описание API:
openapi.yaml - Контракты взаимодействия:
CONTRACTS.yaml
- Для локальной разработки можно использовать стандартные Spring Boot команды (
mvn spring-boot:run), но рекомендуется запуск через Docker Compose для полной совместимости с окружением.
Вопросы и предложения — в Issues или Pull Requests!