Skip to content

freegatik/music-streaming

Repository files navigation

Music Streaming API

Проект для управления музыкальным стримингом. Поддерживает работу с артистами, альбомами, треками, плейлистами и пользователями. Для безопасности используется 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)

Шаги:

  1. Убедись, что PostgreSQL установлен и запущен. База данных и пользователь настраиваются автоматически при первом запуске приложения (если их нет).

  2. Запустить приложение:

# Освобождаем порт на случай если приложение уже запущено
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

Переключение ролей в Postman

Для переключения на ADMIN:

  1. Используйте запрос "Login as ADMIN" в папке "Authentication"
  2. Или установите переменные: username=admin, password=Admin123!@# и выполните "Login"

Для переключения на USER:

  1. Используйте запрос "Login as USER" в папке "Authentication"
  2. Или установите переменные: username=testuser, password=Test123!@# и выполните "Login"

Для переключения на GUEST:

  1. Используйте запрос "Logout (Clear Token)" в папке "Authentication"
  2. Или вручную очистите переменную 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:

  1. Залогиньтесь как USER или ADMIN
  2. Используйте POST /api/playlists для создания плейлиста
  3. Затем добавляйте треки через 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.

Быстрый старт для тестирования

  1. Запустите приложение: ./gradlew bootRun
  2. Откройте Postman и импортируйте коллекцию postman/music-streaming-api.postman_collection.json
  3. Для тестирования ADMIN функций:
    • Выполните запрос "Login as ADMIN" в папке "Authentication"
    • Теперь все запросы будут выполняться от имени администратора
  4. Для тестирования USER функций:
    • Выполните запрос "Login as USER" в папке "Authentication"
    • Создайте плейлист через POST /api/playlists
    • Добавьте треки в плейлист через POST /api/playlists/{id}/tracks?trackId={trackId}
  5. Для тестирования GUEST (публичного доступа):
    • Выполните запрос "Logout (Clear Token)" в папке "Authentication"
    • Теперь вы работаете как неавторизованный пользователь
    • Доступны только публичные данные (артисты, альбомы, треки, публичные плейлисты)

About

Лабораторная работа №2 по РБПО

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors