Проект для управления музыкальным стримингом. Поддерживает работу с артистами, альбомами, треками, плейлистами и пользователями. Для безопасности используется Spring Security с JWT авторизацией (Access и Refresh токены) и ролями.
Сущности:
Artist- информация об исполнителяхAlbum- альбомы с датами релиза и обложкамиTrack- треки с жанрами, длительностью и ссылками на аудиоUser- пользователи системы с username, email и ролямиPlaylist- пользовательские плейлисты (публичные и приватные)PlaylistTrack- связи треков с плейлистами и их позициями
CRUD операции для всех сущностей находятся в соответствующих контроллерах.
Бизнес-операции:
- Перестановка треков в плейлисте (
POST /api/playlists/{id}/tracks/move) - Перемешивание плейлиста (
POST /api/playlists/{id}/shuffle) - Клонирование плейлиста (
POST /api/playlists/{id}/clone) - Генерация Daily Mix (
POST /api/users/{id}/mix) - Статистика библиотеки пользователя (
GET /api/users/{id}/summary)
Требования:
- Java 21 или выше
- PostgreSQL 12+ (должен быть установлен и запущен)
- Gradle (в проекте уже есть wrapper)
Шаги:
-
Убедись, что PostgreSQL установлен и запущен. База данных и пользователь настраиваются автоматически при первом запуске приложения (если их нет).
-
Запустить приложение:
# Освобождаем порт на случай если приложение уже запущено
lsof -ti:8081 | xargs kill -9 2>/dev/null || true
# Запускаем
./gradlew bootRunПриложение будет доступно на http://localhost:8081.
В системе три типа доступа:
- ADMIN - администратор, полный доступ ко всем операциям
- USER - обычный пользователь, может работать только со своими плейлистами и данными
- GUEST - неавторизованный пользователь, может только просматривать публичные данные
При первом запуске приложения автоматически создаются тестовые пользователи:
ADMIN:
- Username:
admin - Password:
Admin123!@# - Email:
admin@example.com
USER:
- Username:
testuser - Password:
Test123!@# - Email:
user@example.com
Для переключения на ADMIN:
- Используйте запрос "Login as ADMIN" в папке "Authentication"
- Или установите переменные:
username=admin,password=Admin123!@#и выполните "Login"
Для переключения на USER:
- Используйте запрос "Login as USER" в папке "Authentication"
- Или установите переменные:
username=testuser,password=Test123!@#и выполните "Login"
Для переключения на GUEST:
- Используйте запрос "Logout (Clear Token)" в папке "Authentication"
- Или вручную очистите переменную
accessToken(установите пустое значение)
После логина токен автоматически сохраняется в переменной accessToken и используется для всех последующих запросов. Для переключения роли просто выполните логин под другим пользователем.
Просмотр каталога: артисты, альбомы, треки, публичные плейлисты и регистрация новых пользователей.
Только ADMIN:
- Создание, изменение, удаление артистов, альбомов и треков
- Просмотр всех пользователей
USER или ADMIN:
- Создание и управление плейлистами (USER только своими)
- Просмотр и изменение своих данных (USER только своих, ADMIN - любых)
Новые пользователи регистрируются через:
POST /api/auth/register
Пример запроса:
{
"username": "testuser",
"password": "Test123!@#",
"email": "testuser@example.com",
"firstName": "Test",
"lastName": "User"
}Требования к паролю: минимум 8 символов, должна быть хотя бы одна цифра, одна буква и один специальный символ.
После регистрации используй Login для получения JWT токенов. Access токен используется для доступа к защищённым эндпоинтам, Refresh токен - для обновления пары токенов.
При первом запуске приложения автоматически создаются:
- Артисты, альбомы и треки - тестовые данные для работы с каталогом
- Тестовые пользователи - ADMIN и USER (см. раздел "Тестовые пользователи" выше)
Важно: Плейлисты не создаются автоматически. Их нужно создавать через API:
- Залогиньтесь как USER или ADMIN
- Используйте
POST /api/playlistsдля создания плейлиста - Затем добавляйте треки через
POST /api/playlists/{id}/tracks?trackId={trackId}
Пример создания плейлиста:
POST /api/playlists
{
"name": "My Favorite Tracks",
"description": "My personal playlist",
"isPublic": true
}Для тестирования подготовлена Postman коллекция со всеми запросами. Полная инструкция по работе с коллекцией, включая JWT авторизацию и все сценарии проверки, находится в postman/POSTMAN.md.
- Запустите приложение:
./gradlew bootRun - Откройте Postman и импортируйте коллекцию
postman/music-streaming-api.postman_collection.json - Для тестирования ADMIN функций:
- Выполните запрос "Login as ADMIN" в папке "Authentication"
- Теперь все запросы будут выполняться от имени администратора
- Для тестирования USER функций:
- Выполните запрос "Login as USER" в папке "Authentication"
- Создайте плейлист через
POST /api/playlists - Добавьте треки в плейлист через
POST /api/playlists/{id}/tracks?trackId={trackId}
- Для тестирования GUEST (публичного доступа):
- Выполните запрос "Logout (Clear Token)" в папке "Authentication"
- Теперь вы работаете как неавторизованный пользователь
- Доступны только публичные данные (артисты, альбомы, треки, публичные плейлисты)