feat: add personal playlists and shareable track links
release / release (версия и заметки) (push) Successful in 6s
release / android (APK в релиз) (push) Successful in 4m8s

EOF

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
mrleo1nidandCursor committed 2026-10-21 23:37:53 +03:00
1 parent 3a097c15c8
commit fa79394869
46 files changed
+2307 -292

No files matched your search

+182 -3
View File
@@ -1331,10 +1331,72 @@ export interface paths {
patch?: never;
trace?: never;
};
"/api/v1/me/playlists": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get: operations["listPlaylists"];
put?: never;
post: operations["createPlaylist"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/v1/me/playlists/{id}": {
parameters: {
query?: never;
header?: never;
path: {
id: string;
};
cookie?: never;
};
get: operations["getPlaylist"];
put: operations["updatePlaylist"];
post?: never;
delete: operations["deletePlaylist"];
options?: never;
head?: never;
patch?: never;
trace?: never;
};
}
export type webhooks = Record<string, never>;
export interface components {
schemas: {
PlaylistInput: {
name: string;
description: string;
track_ids: string[];
};
PlaylistUpdate: components["schemas"]["PlaylistInput"] & {
revision: number;
};
PlaylistSummary: {
/** Format: uuid */
id: string;
name: string;
description: string;
revision: number;
track_count: number;
/** Format: int64 */
duration_ms: number;
/** Format: date-time */
created_at: string;
/** Format: date-time */
updated_at: string;
};
Playlist: components["schemas"]["PlaylistSummary"] & {
tracks: components["schemas"]["Track"][];
};
PlaylistList: {
items: components["schemas"]["PlaylistSummary"][];
};
Onboarding: {
required: boolean;
artists: {
@@ -1596,7 +1658,7 @@ export interface components {
/** @enum {string} */
Role: "admin" | "moderator" | "user";
/** @enum {string} */
ClientType: "web" | "android";
ClientType: "web" | "android" | "desktop";
LoginRequest: {
username: string;
password: string;
@@ -1605,7 +1667,7 @@ export interface components {
device_name?: string;
};
RefreshRequest: {
/** @description Только Android; веб передаёт токен в cookie */
/** @description Android и desktop; веб передаёт токен в cookie */
refresh_token?: string;
};
AuthTokens: {
@@ -1614,7 +1676,7 @@ export interface components {
token_type: "Bearer";
/** @description Срок жизни access-токена, секунды */
expires_in: number;
/** @description Только для `client_type: android` */
/** @description Для `client_type: android` и `client_type: desktop` */
refresh_token?: string;
user: components["schemas"]["Me"];
};
@@ -4171,4 +4233,121 @@ export interface operations {
default: components["responses"]["Problem"];
};
};
listPlaylists: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
/** @description Success */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["PlaylistList"];
};
};
default: components["responses"]["Problem"];
};
};
createPlaylist: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody: {
content: {
"application/json": components["schemas"]["PlaylistInput"];
};
};
responses: {
/** @description Success */
201: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["Playlist"];
};
};
default: components["responses"]["Problem"];
};
};
getPlaylist: {
parameters: {
query?: never;
header?: never;
path: {
id: string;
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description Success */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["Playlist"];
};
};
default: components["responses"]["Problem"];
};
};
updatePlaylist: {
parameters: {
query?: never;
header?: never;
path: {
id: string;
};
cookie?: never;
};
requestBody: {
content: {
"application/json": components["schemas"]["PlaylistUpdate"];
};
};
responses: {
/** @description Success */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["Playlist"];
};
};
default: components["responses"]["Problem"];
};
};
deletePlaylist: {
parameters: {
query?: never;
header?: never;
path: {
id: string;
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description Deleted */
204: {
headers: {
[name: string]: unknown;
};
content?: never;
};
default: components["responses"]["Problem"];
};
};
}