feat(admin): transfer user accounts and show local cover coverage
ci / contract / contract (сгенерированный код совпадает с openapi.yaml) (push) Successful in 1m17s
ci / ts / ts (packages + web) (push) Successful in 3m13s
ci / api / api (push) Successful in 59s
ci / mobile / mobile (Metro-бандл Android) (push) Successful in 1m31s
ci / db / db (push) Successful in 2m50s
ci / contract / contract (сгенерированный код совпадает с openapi.yaml) (push) Successful in 1m17s
ci / ts / ts (packages + web) (push) Successful in 3m13s
ci / api / api (push) Successful in 59s
ci / mobile / mobile (Metro-бандл Android) (push) Successful in 1m31s
ci / db / db (push) Successful in 2m50s
This commit is contained in:
1 parent
0a4cd4bff1
commit
f1528de948
22 files changed
+1661
-313
No files matched your search
@@ -357,6 +357,65 @@ export interface paths {
|
||||
patch?: never;
|
||||
trace?: never;
|
||||
};
|
||||
"/api/v1/admin/sources/{id}/cover-stats": {
|
||||
parameters: {
|
||||
query?: never;
|
||||
header?: never;
|
||||
path?: never;
|
||||
cookie?: never;
|
||||
};
|
||||
/** Покрытие аудиофайлов локальными обложками (admin) */
|
||||
get: operations["getSourceCoverStats"];
|
||||
put?: never;
|
||||
post?: never;
|
||||
delete?: never;
|
||||
options?: never;
|
||||
head?: never;
|
||||
patch?: never;
|
||||
trace?: never;
|
||||
};
|
||||
"/api/v1/admin/users/export": {
|
||||
parameters: {
|
||||
query?: never;
|
||||
header?: never;
|
||||
path?: never;
|
||||
cookie?: never;
|
||||
};
|
||||
/**
|
||||
* Экспорт учётных записей с ролями и хэшами паролей (admin)
|
||||
* @description Только учётные записи и права доступа, без рекомендаций, истории, лайков и сессий. Ответ не кэшируется.
|
||||
*/
|
||||
get: operations["exportUsers"];
|
||||
put?: never;
|
||||
post?: never;
|
||||
delete?: never;
|
||||
options?: never;
|
||||
head?: never;
|
||||
patch?: never;
|
||||
trace?: never;
|
||||
};
|
||||
"/api/v1/admin/users/import": {
|
||||
parameters: {
|
||||
query?: never;
|
||||
header?: never;
|
||||
path?: never;
|
||||
cookie?: never;
|
||||
};
|
||||
get?: never;
|
||||
put?: never;
|
||||
/**
|
||||
* Импорт учётных записей с сохранением паролей (admin)
|
||||
* @description Атомарное добавление пользователей из экспорта, до 10000 записей и 16 MiB.
|
||||
* Существующие логины пропускаются без изменений. Новые записи получают новые ID.
|
||||
* Рекомендации, история, лайки и сессии не импортируются.
|
||||
*/
|
||||
post: operations["importUsers"];
|
||||
delete?: never;
|
||||
options?: never;
|
||||
head?: never;
|
||||
patch?: never;
|
||||
trace?: never;
|
||||
};
|
||||
"/api/v1/admin/users/{id}": {
|
||||
parameters: {
|
||||
query?: never;
|
||||
@@ -2010,6 +2069,38 @@ export interface components {
|
||||
new_username: string;
|
||||
new_password: string;
|
||||
};
|
||||
SourceCoverStats: {
|
||||
/** Format: int64 */
|
||||
files_total: number;
|
||||
/**
|
||||
* Format: int64
|
||||
* @description Файлы, альбом которых имеет готовую локальную обложку (встроенную или из папки)
|
||||
*/
|
||||
files_with_cover: number;
|
||||
/** Format: int64 */
|
||||
albums_pending: number;
|
||||
};
|
||||
UserArchive: {
|
||||
/** @enum {integer} */
|
||||
version: 1;
|
||||
users: components["schemas"]["UserArchiveEntry"][];
|
||||
};
|
||||
UserArchiveEntry: {
|
||||
username: string;
|
||||
display_name: string | null;
|
||||
role: components["schemas"]["Role"];
|
||||
/** @description Argon2id PHC. Секретные данные; файл нужно хранить в защищённом месте. */
|
||||
password_hash: string;
|
||||
is_blocked: boolean;
|
||||
must_change_password: boolean;
|
||||
must_change_credentials: boolean;
|
||||
reviews_uploads: boolean;
|
||||
manages_updates: boolean;
|
||||
};
|
||||
UserImportResult: {
|
||||
created: number;
|
||||
skipped: string[];
|
||||
};
|
||||
AdminUser: {
|
||||
/** Format: uuid */
|
||||
id: string;
|
||||
@@ -3259,6 +3350,75 @@ export interface operations {
|
||||
default: components["responses"]["Problem"];
|
||||
};
|
||||
};
|
||||
getSourceCoverStats: {
|
||||
parameters: {
|
||||
query?: never;
|
||||
header?: never;
|
||||
path: {
|
||||
id: components["parameters"]["SourceId"];
|
||||
};
|
||||
cookie?: never;
|
||||
};
|
||||
requestBody?: never;
|
||||
responses: {
|
||||
/** @description Доступные аудиофайлы без исключённых папок; внешние обложки не учитываются */
|
||||
200: {
|
||||
headers: {
|
||||
[name: string]: unknown;
|
||||
};
|
||||
content: {
|
||||
"application/json": components["schemas"]["SourceCoverStats"];
|
||||
};
|
||||
};
|
||||
default: components["responses"]["Problem"];
|
||||
};
|
||||
};
|
||||
exportUsers: {
|
||||
parameters: {
|
||||
query?: never;
|
||||
header?: never;
|
||||
path?: never;
|
||||
cookie?: never;
|
||||
};
|
||||
requestBody?: never;
|
||||
responses: {
|
||||
/** @description Файл переноса пользователей */
|
||||
200: {
|
||||
headers: {
|
||||
[name: string]: unknown;
|
||||
};
|
||||
content: {
|
||||
"application/json": components["schemas"]["UserArchive"];
|
||||
};
|
||||
};
|
||||
default: components["responses"]["Problem"];
|
||||
};
|
||||
};
|
||||
importUsers: {
|
||||
parameters: {
|
||||
query?: never;
|
||||
header?: never;
|
||||
path?: never;
|
||||
cookie?: never;
|
||||
};
|
||||
requestBody: {
|
||||
content: {
|
||||
"application/json": components["schemas"]["UserArchive"];
|
||||
};
|
||||
};
|
||||
responses: {
|
||||
/** @description Результат импорта */
|
||||
200: {
|
||||
headers: {
|
||||
[name: string]: unknown;
|
||||
};
|
||||
content: {
|
||||
"application/json": components["schemas"]["UserImportResult"];
|
||||
};
|
||||
};
|
||||
default: components["responses"]["Problem"];
|
||||
};
|
||||
};
|
||||
deleteUser: {
|
||||
parameters: {
|
||||
query?: never;
|
||||
|
||||
Reference in new issue
Block a user