Добавлены родственные связи, расширен граф связей и улучшен локальный запуск

Что добавлено:\n- Новые типы CONNECTION для родственников: parent/child/sibling (50/51, 52/53, 54/55) в blockchain/db слоях.\n- Обновлены проверки ConnectionBody и DB-триггер connections_state для корректной записи/удаления новых связей.\n- В профиле добавлен блок "Близкие родственники" с модальным выбором типа связи и логина; добавление через AddBlock для parent/child/sibling.\n- Расширен API GetUserConnectionsGraph: out/in списки для родителей/детей/сиблингов, агрегированные списки родственников с полом, список allUsers с метками официальный/сияющий.\n- Полностью обновлен UI страницы "Связи": новое позиционирование родственников вокруг центра, отдельный цвет родственных связей, линия для взаимных связей и стрелка для односторонних, корректная геометрия линий при ресайзе.\n- Добавлена Gradle-задача startLocalWithBuild для запуска локального стека после build; сохранена отдельная startLocal без полного build.
This commit is contained in:
AidarKC
2026-04-17 21:01:53 +03:00
parent 9b188d56e9
commit 4a92a7fa22
13 changed files with 1061 additions and 73 deletions
+3
View File
@@ -48,6 +48,9 @@ const CONNECTION_SUBTYPES = Object.freeze({
friend: { on: 10, off: 11 },
contact: { on: 20, off: 21 },
follow: { on: 30, off: 31 },
parent: { on: 50, off: 51 },
child: { on: 52, off: 53 },
sibling: { on: 54, off: 55 },
});
function normalizeServerUrl(url) {
+24
View File
@@ -68,6 +68,12 @@ async function buildRelationsModel(login) {
inContacts: [],
outFollows: [],
inFollows: [],
outParents: [],
inParents: [],
outChildren: [],
inChildren: [],
outSiblings: [],
inSiblings: [],
};
}
@@ -104,6 +110,12 @@ async function buildRelationsModel(login) {
inContacts: readArray(graph, 'inContacts') || [],
outFollows,
inFollows: readArray(graph, 'inFollows') || [],
outParents: readArray(graph, 'outParents') || [],
inParents: readArray(graph, 'inParents') || [],
outChildren: readArray(graph, 'outChildren') || [],
inChildren: readArray(graph, 'inChildren') || [],
outSiblings: readArray(graph, 'outSiblings') || [],
inSiblings: readArray(graph, 'inSiblings') || [],
};
}
@@ -144,6 +156,12 @@ export async function loadCurrentRelations() {
inContacts: [],
outFollows: [],
inFollows: [],
outParents: [],
inParents: [],
outChildren: [],
inChildren: [],
outSiblings: [],
inSiblings: [],
};
}
return buildRelationsModel(login);
@@ -157,6 +175,12 @@ export function relationFlagsForTarget(relations, targetLogin) {
inContact: listContainsLogin(relations?.inContacts, targetLogin),
outFollow: listContainsLogin(relations?.outFollows, targetLogin),
inFollow: listContainsLogin(relations?.inFollows, targetLogin),
outParent: listContainsLogin(relations?.outParents, targetLogin),
inParent: listContainsLogin(relations?.inParents, targetLogin),
outChild: listContainsLogin(relations?.outChildren, targetLogin),
inChild: listContainsLogin(relations?.inChildren, targetLogin),
outSibling: listContainsLogin(relations?.outSiblings, targetLogin),
inSibling: listContainsLogin(relations?.inSiblings, targetLogin),
};
}