17-04-2026
Сделал что бы все пораметры пользователя получаличь врезодним запросом ListUserParams, а не по отдельности кучей разных
This commit is contained in:
parent
5d4d451943
commit
7591fbdace
9
AGENTS.md
Normal file
9
AGENTS.md
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
# AGENTS
|
||||||
|
|
||||||
|
## Язык проекта
|
||||||
|
- По умолчанию использовать русский язык во всех пользовательских текстах и технических пояснениях.
|
||||||
|
- Пояснения к коммитам, PR и merge-запросам писать на русском языке.
|
||||||
|
- Комментарии в коде, встроенные справки, документацию и инструкции писать по возможности на русском языке.
|
||||||
|
|
||||||
|
## Примечание
|
||||||
|
- Если внешний инструмент/интеграция требует английский формат, допускается английский, но рядом желательно дать краткое пояснение на русском.
|
||||||
@ -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];
|
||||||
|
|||||||
@ -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 < rows.length; i += 1) {
|
||||||
|
const row = rows[i];
|
||||||
|
if (!row || typeof row !== 'object') continue;
|
||||||
|
const param = String(row.param || '').trim();
|
||||||
|
if (!param) continue;
|
||||||
|
const item = normalizeItem(param, row);
|
||||||
|
if (item) normalized.push(item);
|
||||||
|
}
|
||||||
|
return normalized;
|
||||||
|
}
|
||||||
|
|
||||||
for (let i = 0; i < aliases.length; i += 1) {
|
function loadLatestByAliasesFromItems(items, aliases) {
|
||||||
const alias = aliases[i];
|
if (!Array.isArray(items) || !items.length || !Array.isArray(aliases) || !aliases.length) return null;
|
||||||
try {
|
const aliasSet = new Set(aliases.map((alias) => String(alias || '').trim().toLowerCase()).filter(Boolean));
|
||||||
const payload = await authService.getUserParam(login, alias);
|
if (!aliasSet.size) return null;
|
||||||
const normalized = normalizeItem(alias, payload);
|
|
||||||
if (normalized) collected.push(normalized);
|
let latest = null;
|
||||||
} catch {
|
for (let i = 0; i < items.length; i += 1) {
|
||||||
// Пусто — параметр ещё не создан или endpoint не отвечает для конкретного ключа.
|
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;
|
||||||
if (!collected.length) return null;
|
|
||||||
return collected.sort((a, b) => b.timeMs - a.timeMs)[0];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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,
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user