ФУНКЦИИ - МЕЖПРОЕКТНАЯ КОММУНИКАЦИЯ: маппинг имени профиля

This commit is contained in:
DCCONSTRUCTIONS 2026-05-12 18:28:26 +03:00
parent 95225280e7
commit b698741687
1 changed files with 33 additions and 1 deletions

View File

@ -1775,7 +1775,16 @@ function sanitizeSelfProfilePatch(payload) {
function sanitizeTaskerProfilePatch(payload) {
const patch = {};
const name = firstNonEmptyString(payload?.displayName, payload?.display_name, payload?.name);
const changedFields = Array.isArray(payload?.changedFields) ? payload.changedFields : [];
const taskerFullName = joinTaskerProfileName(
payload?.firstName ?? payload?.first_name,
payload?.lastName ?? payload?.last_name
);
const taskerDisplayName = firstNonEmptyString(payload?.displayName, payload?.display_name, payload?.name);
const name =
hasChangedField(changedFields, ["display_name"]) || !hasChangedField(changedFields, ["first_name", "last_name"])
? firstNonEmptyString(taskerDisplayName, taskerFullName)
: firstNonEmptyString(taskerFullName, taskerDisplayName);
const hasAvatar =
Object.hasOwn(payload ?? {}, "avatarUrl") ||
Object.hasOwn(payload ?? {}, "avatar_url") ||
@ -1800,6 +1809,24 @@ function firstNonEmptyString(...values) {
return null;
}
function joinTaskerProfileName(firstName, lastName) {
return [firstName, lastName].filter((value) => typeof value === "string" && value.trim()).join(" ").trim();
}
function splitTaskerProfileName(name) {
const trimmedName = typeof name === "string" ? name.trim() : "";
const parts = trimmedName.split(/\s+/, 2);
return {
firstName: parts[0] ?? "",
lastName: parts.length > 1 ? trimmedName.slice(parts[0].length).trim() : "",
};
}
function hasChangedField(changedFields, fields) {
return fields.some((field) => changedFields.includes(field));
}
function nullableProfileUrl(value) {
return typeof value === "string" && value.trim() ? value.trim() : null;
}
@ -2090,6 +2117,8 @@ async function syncTaskManagerUserProfile(user) {
return null;
}
const taskerNameParts = splitTaskerProfileName(user.name);
try {
return await requestTaskManagerInternalJson("/api/internal/nodedc/users/profile-sync/", {
method: "POST",
@ -2097,6 +2126,9 @@ async function syncTaskManagerUserProfile(user) {
email: user.email,
subject: user.authentikUserId ?? undefined,
name: user.name,
displayName: user.name,
firstName: taskerNameParts.firstName,
lastName: taskerNameParts.lastName,
avatarUrl: resolveUserAvatarPublicUrl(user),
},
});