SHiNE-server/shine-UI/js/services/user-profile-params.js
AidarKC 7591fbdace 17-04-2026
Сделал что бы все пораметры пользователя получаличь врезодним запросом ListUserParams, а не по отдельности кучей разных
2026-04-17 15:49:36 +03:00

125 lines
4.0 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { authService, state } from '../state.js';
export const profileFieldDefs = [
{ key: 'first_name', readKeys: ['first_name'], label: 'Имя', placeholder: 'Введите имя' },
{ key: 'last_name', readKeys: ['last_name'], label: 'Фамилия', placeholder: 'Введите фамилию' },
{ key: 'address', readKeys: ['address'], label: 'Адрес', placeholder: 'Город, улица, дом' },
{ key: 'web', readKeys: ['web'], label: 'Веб', placeholder: 'Сайт или профиль' },
{ key: 'phone', readKeys: ['phone'], label: 'Телефон', placeholder: '+7 ...' },
];
export const profileToggleDefs = [
{ key: 'official', label: 'Официальный' },
{ key: 'shine', label: 'Сияющий' },
];
function normalizeItem(param, payload) {
if (!param) return null;
if (payload && typeof payload === 'object') {
const value = String(payload?.value || payload?.param_value || '');
const timeMs = Number(payload?.time_ms || payload?.timeMs || 0);
if (!value && !timeMs) return null;
return { param, value, timeMs };
}
return null;
}
function parseToggleValue(value) {
const normalized = String(value || '').trim().toLowerCase();
return normalized === 'true' || normalized === 'yes' || normalized === '1';
}
async function getStoragePwd() {
const storagePwd = state.session.storagePwdInMemory;
if (!storagePwd) {
throw new Error('Нет storagePwd в памяти сессии. Выполните вход заново.');
}
return storagePwd;
}
function normalizeListItems(payload) {
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;
}
function loadLatestByAliasesFromItems(items, aliases) {
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) {
const payload = await authService.listUserParams(login);
const items = normalizeListItems(payload);
const fields = [];
for (let i = 0; i < profileFieldDefs.length; i += 1) {
const field = profileFieldDefs[i];
const latest = loadLatestByAliasesFromItems(items, field.readKeys);
fields.push({
key: field.key,
label: field.label,
placeholder: field.placeholder,
value: latest?.value || '',
timeMs: latest?.timeMs || 0,
});
}
const toggles = [];
for (let i = 0; i < profileToggleDefs.length; i += 1) {
const toggle = profileToggleDefs[i];
const latest = loadLatestByAliasesFromItems(items, [toggle.key]);
toggles.push({
key: toggle.key,
label: toggle.label,
enabled: latest ? parseToggleValue(latest.value) : false,
rawValue: latest?.value || 'no',
timeMs: latest?.timeMs || 0,
});
}
return { fields, toggles };
}
export async function saveProfileParamBlock(login, key, value) {
const storagePwd = await getStoragePwd();
await authService.addBlockUserParam({
login,
param: key,
value: String(value ?? '').trim(),
storagePwd,
});
}
export async function saveProfileToggle(login, key, enabled) {
const storagePwd = await getStoragePwd();
await authService.addBlockUserParam({
login,
param: key,
value: enabled ? 'yes' : 'no',
storagePwd,
});
}