Skip to main content

Artists

Публичные страницы артистов и система подписок.

Эндпоинты

МетодМаршрутAuthОписание
GET/api/v1/artistsСписок артистов
GET/api/v1/artists/:idАртист по ID
GET/api/v1/artists/by-username/:usernameАртист по username
PUT/api/v1/artists/:idArtist (владелец)Обновить профиль
DELETE/api/v1/artists/:idArtist (владелец)Удалить аккаунт
GET/api/v1/artists/me/followingUserМои подписки
POST/api/v1/artists/:id/followUserПодписаться
DELETE/api/v1/artists/:id/followUserОтписаться
POST/api/v1/artists/:id/likeUserЛайкнуть
DELETE/api/v1/artists/:id/likeUserУбрать лайк

Получение артиста

GET /api/v1/artists/:id
{
"id": "uuid",
"username": "radiohead",
"bio": "British rock band from Abingdon, Oxfordshire.",
"avatar": "/static/avatars/uuid.jpg",
"backgroundImage": "/static/covers/uuid.jpg",
"createdAt": "2026-01-01T00:00:00.000Z"
}

Поля password и email никогда не возвращаются.

Подписка на артиста

POST /api/v1/artists/:id/follow

Если артист не найден — 404 Not Found. Ответ содержит обновлённый профиль артиста и актуальный счётчик подписчиков:

{
"id": "uuid",
"username": "radiohead",
"_count": { "followers": 1024 }
}

Отписка

DELETE /api/v1/artists/:id/follow

Аналогично — возвращает профиль с обновлённым счётчиком.

Мои подписки

GET /api/v1/artists/me/following?page=1&limit=20

Пагинированный список артистов, на которых подписан текущий пользователь. Каждый элемент включает _count.followers.

Схема подписок

Реализована через implicit M2M в Prisma:

model User {
followedArtists Artist[] @relation("UserFollowedArtists")
}

model Artist {
followers User[] @relation("UserFollowedArtists")
}

Prisma создаёт таблицу _UserFollowedArtists автоматически.