Панель администратора
Relevant source files
The following files were used as context for generating this wiki page:
- internal/features/tracks/service/create.go
- internal/features/tracks/service/update.go
- internal/features/tracks/transport/http/create.go
- internal/features/tracks/transport/http/update.go
- internal/features/tracks/transport/http/transport.go
- cmd/app/main.go
- internal/core/middleware/middleware.go
- README.md
Панель администратора (Admin Panel) в рамках данного проекта представляет собой набор защищенных эндпоинтов и специализированной бизнес-логики, предназначенных для управления музыкальным каталогом и пользователями системы. Доступ к этим функциям ограничен и требует наличия у пользователя роли ADMIN.
Основные возможности включают создание, обновление и удаление музыкальных треков, а также модификацию типов подписок пользователей. Архитектура системы обеспечивает строгую проверку прав доступа через специализированное промежуточное ПО (middleware) перед выполнением любых административных действий.
Sources: README.md:95-100, cmd/app/main.go:159-168
Архитектура контроля доступа
Доступ к административным функциям регулируется на уровне маршрутизации (routing). Все административные эндпоинты сгруппированы в отдельный блок, к которому применяется RequireRole("ADMIN") middleware.
Процесс проверки прав
Когда поступает запрос на административный эндпоинт, система проходит следующие этапы проверки:
- JWT Аутентификация: Проверка валидности токена доступа.
- Проверка роли: Извлечение поля
roleиз JWT-claims и сравнение его со значениемADMIN.
Визуализация процесса фильтрации запросов на основе прав доступа пользователя.
Sources: internal/core/middleware/middleware.go:137-175, cmd/app/main.go:159-161
Управление музыкальным каталогом
Администраторы обладают полным циклом контроля над сущностями треков в базе данных. Это реализовано через TrackHandler, который предоставляет специализированные AdminRoutes.
Операции с треками
Система поддерживает следующие действия:
- Создание трека: Добавление новых записей с указанием названия, исполнителя, альбома, жанра и ссылки на файл.
- Обновление трека: Изменение существующих данных трека. При обновлении система автоматически инвалидирует кэш для обеспечения актуальности данных.
- Удаление трека: Технически реализовано как "мягкое удаление" (soft delete) или полное удаление в зависимости от реализации репозитория.
Схема данных запроса (CreateTrackRequest)
| Поле | Тип | Обязательно | Валидация |
|---|---|---|---|
title | string | Да | min=1, max=200 |
artist_id | int64 | Да | > 0 |
duration_seconds | int | Да | > 0 |
file_url | string | Да | URL формат |
is_active | bool | Нет | - |
Sources: internal/features/tracks/transport/http/transport.go:30-41, internal/features/tracks/service/update.go:15-17
Эндпоинты администратора
Ниже приведен список API-интерфейсов, доступных исключительно пользователям с ролью администратора.
| Метод | Путь | Описание | Источник |
|---|---|---|---|
| POST | /api/v1/admin/tracks | Создание нового трека | internal/features/tracks/transport/http/create.go |
| PUT | /api/v1/admin/tracks/{id} | Обновление информации о треке | internal/features/tracks/transport/http/update.go |
| DELETE | /api/v1/admin/tracks/{id} | Удаление трека из системы | internal/features/tracks/transport/http/transport.go:77 |
| PATCH | /api/v1/admin/users/{id}/subscription | Изменение типа подписки пользователя | README.md:99 |
Взаимодействие компонентов при обновлении трека
Процесс обновления данных трека, включающий очистку кэша для предотвращения отдачи устаревших данных пользователям.
Sources: internal/features/tracks/service/update.go:13-28, internal/features/tracks/transport/http/update.go:40-76
Техническая реализация
Административные действия логируются в системе с использованием структурированного логгера zap. Это позволяет отслеживать изменения в каталоге (кто, когда и какой объект изменил).
Пример логирования административного действия
log.Info("admin action: updated track",
zap.Int64("track_id", updated.ID),
zap.String("title", updated.Title),
zap.Int64("artist_id", updated.ArtistID),
)
Sources: internal/features/tracks/service/update.go:23-27, internal/features/tracks/service/create.go:18-22
Заключение
Панель администратора является критически важным компонентом для поддержки контента музыкального сервиса. Благодаря интеграции с Middleware и строгой типизации запросов, система обеспечивает безопасное и консистентное управление данными треков и пользовательских подписок.