feat: AI context, Webhooks, Kanban drag-drop, and UI fixes

This commit is contained in:
2026-04-29 17:43:18 +05:00
parent 89b3340253
commit bc2f99408d
29 changed files with 991 additions and 52 deletions
+66
View File
@@ -0,0 +1,66 @@
const { Pool } = require('pg');
async function run() {
const pool = new Pool({ connectionString: 'postgresql://postgres:postgres@localhost:5432/xflow' });
const canvasId = 'xflow-project';
const res = await pool.query('SELECT * FROM "Canvas" WHERE id = $1', [canvasId]);
if (res.rowCount === 0) {
console.error('Canvas xflow-project not found');
await pool.end();
return;
}
const canvas = res.rows[0];
let nodes = typeof canvas.nodes === 'string' ? JSON.parse(canvas.nodes) : canvas.nodes;
let edges = typeof canvas.edges === 'string' ? JSON.parse(canvas.edges) : canvas.edges;
// 1. Update Tech Stack (tech-1)
const techNode = nodes.find(n => n.id === 'tech-1');
if (techNode) {
techNode.text = '# 🛠️ Технологический Стек\n\n```json\n{\n \"frontend\": \"Vue 3 + Nuxt 3\",\n \"styling\": \"TailwindCSS\",\n \"canvas\": \"Vue Flow\",\n \"auth\": \"Firebase Google\",\n \"database\": \"PostgreSQL + Prisma\",\n \"pwa\": \"@vite-pwa/nuxt\",\n \"git_sync\": \"Gitea API\"\n}\n```';
techNode.height = 400;
}
// 2. Update Backend API (be-1)
const beNode = nodes.find(n => n.id === 'be-1');
if (beNode) {
beNode.text = '# ⚙️ Backend API\n\n- `/api/canvas/*` - CRUD холстов\n- `/api/tasks` - **Канбан-агрегатор**\n- `/api/git/real-sync` - **Git Синхронизация**\n- `/api/auth/google` - Firebase Auth\n- `/api/users/*` - Профили и роли\n- `/api/groups/*` - Совместная работа';
beNode.height = 350;
}
// 3. Update Key Features (feat-1)
const featNode = nodes.find(n => n.id === 'feat-1');
if (featNode) {
featNode.text = '# ✨ Ключевые Функции\n\n- **Умный Редактор**\n - Drag & Drop палитра\n - Панель свойств узлов\n - **Кросс-ссылки между картами**\n\n- **Канбан-борд**\n - Персональные задачи\n - Синхронизация статусов\n\n- **Obsidian Sync**\n - Нативная поддержка `.canvas`\n - Сохранение метаданных\n\n- **Git Интеграция**\n - Авто-сохранение в Gitea';
featNode.height = 500;
}
// 4. Add "Latest Updates" Node (session-summary)
const updateNodeId = 'updates-apr-28';
if (!nodes.find(n => n.id === updateNodeId)) {
nodes.push({
id: updateNodeId,
type: 'text',
x: 1400,
y: -200,
width: 350,
height: 300,
text: '# 🔥 Обновления (28 Апреля)\n\n- ✅ **Data Persistence**: Исправлена потеря метаданных задач.\n- ✅ **Cross-Linking**: Навигация между картами через узлы-файлы.\n- ✅ **Personal Kanban**: Рабочая доска задач с фильтрацией.\n- ✅ **Admin Roles**: Система прав для удаления и редактирования.\n- ✅ **UX Fixes**: Переименование карт и выпадающие списки ссылок.',
style: { background: '#064e3b', border: '#10b981' }
});
edges.push({ id: 'e-update', source: 'feat-1', target: updateNodeId });
}
// Update in DB
await pool.query(
'UPDATE "Canvas" SET nodes = $1, edges = $2, "updatedAt" = NOW() WHERE id = $3',
[JSON.stringify(nodes), JSON.stringify(edges), canvasId]
);
console.log('Main project canvas updated with latest architecture and features');
await pool.end();
}
run().catch(console.error);