17-04-2026

Сделал что бы все пораметры пользователя получаличь врезодним запросом ListUserParams, а не по отдельности кучей разных
This commit is contained in:
AidarKC 2026-04-17 15:49:36 +03:00
parent 5d4d451943
commit 7591fbdace
3 changed files with 49 additions and 15 deletions

9
AGENTS.md Normal file
View File

@ -0,0 +1,9 @@
# AGENTS
## Язык проекта
- По умолчанию использовать русский язык во всех пользовательских текстах и технических пояснениях.
- Пояснения к коммитам, PR и merge-запросам писать на русском языке.
- Комментарии в коде, встроенные справки, документацию и инструкции писать по возможности на русском языке.
## Примечание
- Если внешний инструмент/интеграция требует английский формат, допускается английский, но рядом желательно дать краткое пояснение на русском.

View File

@ -1222,6 +1222,15 @@ export class AuthService {
throw opError('GetUserParam', response); throw opError('GetUserParam', response);
} }
async listUserParams(login) {
const cleanLogin = (login || '').trim();
if (!cleanLogin) throw new Error('Не передан login');
const response = await this.ws.request('ListUserParams', { login: cleanLogin });
if (response.status !== 200) throw opError('ListUserParams', response);
return response.payload || {};
}
async setUserRelation({ login, toLogin, kind, enabled, storagePwd }) { async setUserRelation({ login, toLogin, kind, enabled, storagePwd }) {
const cleanKind = String(kind || '').trim().toLowerCase(); const cleanKind = String(kind || '').trim().toLowerCase();
const kinds = CONNECTION_SUBTYPES[cleanKind]; const kinds = CONNECTION_SUBTYPES[cleanKind];

View File

@ -39,29 +39,45 @@ async function getStoragePwd() {
return storagePwd; return storagePwd;
} }
async function loadLatestByAliases(login, aliases) { function normalizeListItems(payload) {
const collected = []; const rows = Array.isArray(payload?.params) ? payload.params : [];
const normalized = [];
for (let i = 0; i < aliases.length; i += 1) { for (let i = 0; i < rows.length; i += 1) {
const alias = aliases[i]; const row = rows[i];
try { if (!row || typeof row !== 'object') continue;
const payload = await authService.getUserParam(login, alias); const param = String(row.param || '').trim();
const normalized = normalizeItem(alias, payload); if (!param) continue;
if (normalized) collected.push(normalized); const item = normalizeItem(param, row);
} catch { if (item) normalized.push(item);
// Пусто — параметр ещё не создан или endpoint не отвечает для конкретного ключа.
} }
return normalized;
} }
if (!collected.length) return null; function loadLatestByAliasesFromItems(items, aliases) {
return collected.sort((a, b) => b.timeMs - a.timeMs)[0]; if (!Array.isArray(items) || !items.length || !Array.isArray(aliases) || !aliases.length) return null;
const aliasSet = new Set(aliases.map((alias) => String(alias || '').trim().toLowerCase()).filter(Boolean));
if (!aliasSet.size) return null;
let latest = null;
for (let i = 0; i < items.length; i += 1) {
const item = items[i];
const itemParam = String(item?.param || '').trim().toLowerCase();
if (!itemParam || !aliasSet.has(itemParam)) continue;
if (!latest || Number(item.timeMs || 0) > Number(latest.timeMs || 0)) {
latest = item;
}
}
return latest;
} }
export async function loadProfileSnapshot(login) { export async function loadProfileSnapshot(login) {
const payload = await authService.listUserParams(login);
const items = normalizeListItems(payload);
const fields = []; const fields = [];
for (let i = 0; i < profileFieldDefs.length; i += 1) { for (let i = 0; i < profileFieldDefs.length; i += 1) {
const field = profileFieldDefs[i]; const field = profileFieldDefs[i];
const latest = await loadLatestByAliases(login, field.readKeys); const latest = loadLatestByAliasesFromItems(items, field.readKeys);
fields.push({ fields.push({
key: field.key, key: field.key,
label: field.label, label: field.label,
@ -74,7 +90,7 @@ export async function loadProfileSnapshot(login) {
const toggles = []; const toggles = [];
for (let i = 0; i < profileToggleDefs.length; i += 1) { for (let i = 0; i < profileToggleDefs.length; i += 1) {
const toggle = profileToggleDefs[i]; const toggle = profileToggleDefs[i];
const latest = await loadLatestByAliases(login, [toggle.key]); const latest = loadLatestByAliasesFromItems(items, [toggle.key]);
toggles.push({ toggles.push({
key: toggle.key, key: toggle.key,
label: toggle.label, label: toggle.label,