From d952e89a26b13f4218b98095bcc9c6d43ea9c5ff Mon Sep 17 00:00:00 2001 From: Alex Date: Tue, 15 Jul 2025 14:14:53 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B2=D0=B0=D1=88=D0=B5=20=D1=81=D0=BE=D0=BE?= =?UTF-8?q?=D0=B1=D1=89=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BE=D0=BC=D0=BC?= =?UTF-8?q?=D0=B8=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SOFT_DESCRIPTION.md | 406 ++++++++++++++++++ .../migrations/048_add_order_to_user_rows.sql | 16 + backend/package.json | 1 - backend/routes/tables.js | 21 + frontend/src/components/tables/TableCell.vue | 153 ++++++- .../src/components/tables/UserTableView.vue | 279 +++++++----- frontend/src/services/tablesService.js | 5 + frontend/src/views/ContentPageView.vue | 145 ++++++- .../views/settings/AI/AiAssistantSettings.vue | 8 +- md/interactive-content-sharing.md | 199 +++++++++ 10 files changed, 1109 insertions(+), 124 deletions(-) create mode 100644 SOFT_DESCRIPTION.md create mode 100644 backend/db/migrations/048_add_order_to_user_rows.sql create mode 100644 md/interactive-content-sharing.md diff --git a/SOFT_DESCRIPTION.md b/SOFT_DESCRIPTION.md new file mode 100644 index 0000000..3c8831e --- /dev/null +++ b/SOFT_DESCRIPTION.md @@ -0,0 +1,406 @@ +# DApp for Business + +## Краткое описание +**DApp for Business** — это современное веб3-приложение, позволяющее предпринимателям использовать цифровое юридическое лицо для обслуживания клиентов, приема безналичных платежей, безопасного управления активами и прозрачного учета с помощью смарт-контрактов и искусственного интеллекта. + +--- + +## Основные возможности +- Создание и управление цифровым юридическим лицом на блокчейне +- Прием безналичных платежей (криптовалюта, стейблкоины) +- Безопасное хранение и управление бизнес-активами через смарт-контракты +- Прозрачный учет операций и автоматизация отчетности +- Интеграция с ИИ для анализа данных и автоматизации бизнес-процессов +- Управление клиентской базой и сервисами через децентрализованное приложение + +--- + +## Целевая аудитория +- Индивидуальные предприниматели +- Малый и средний бизнес +- Стартапы, работающие с цифровыми активами +- Фрилансеры, желающие автоматизировать бизнес-процессы + +--- + +## Преимущества +- Полная прозрачность и доверие благодаря блокчейну +- Автоматизация рутинных задач с помощью ИИ +- Безопасное управление активами без посредников +- Гибкая интеграция с внешними сервисами и кошельками +- Масштабируемость и независимость от традиционных банковских систем + +--- + +## Технические требования +- Операционная система: Linux, macOS, Windows (рекомендуется WSL2 для Windows) +- Docker +- Node.js (v16+) +- Yarn +- Браузер с поддержкой Web3 (например, MetaMask) + +--- + +## Установка и запуск + +1. Клонируйте репозиторий: + ```bash + git clone https://github.com/your-org/dapp-for-business.git + cd dapp-for-business + ``` +2. Установите зависимости: + ```bash + yarn install + ``` +3. Запустите приложение в Docker: + ```bash + docker-compose up --build + ``` +4. Откройте приложение в браузере по адресу: [http://localhost:3000](http://localhost:3000) + +--- + +## Быстрый старт + +1. Зарегистрируйте цифровое юридическое лицо через интерфейс приложения. +2. Подключите криптокошелек (MetaMask или другой Web3-кошелек). +3. Настройте параметры бизнеса и добавьте клиентов. +4. Начните принимать платежи и управлять активами через смарт-контракты. + +--- + +## Структура проекта + +- `frontend/` — клиентская часть на Vue.js (исходный код, конфиги, сборка, nginx) +- `backend/` — серверная логика, API, работа с БД, интеграция со смарт-контрактами +- `vector-search/` — сервис поиска и работы с векторными данными (Python, FastAPI) +- `webssh-agent/` — сервис для работы с SSH-агентом через веб-интерфейс (Node.js) +- `scripts/` — bash-скрипты для автоматизации (миграции, обновления DNS и др.) +- `md/` — дополнительная документация и технические описания +- `docs/` — документация и примеры +- `docker-compose.yml`, `Dockerfile` — конфигурация контейнеризации и сборки +- `setup.sh`, `clean-logs.sh` — вспомогательные скрипты для установки и обслуживания + +--- + +## Часто задаваемые вопросы (FAQ) + +- **Как подключить кошелек?** + Используйте MetaMask или любой другой Web3-кошелек, следуя инструкции в интерфейсе приложения. + +- **Какие криптовалюты поддерживаются?** + Поддерживаются основные токены стандарта ERC-20 и стейблкоины. + +- **Безопасно ли хранить активы в приложении?** + Все операции выполняются через проверенные смарт-контракты, код которых открыт и доступен для аудита. + +--- + +## Особенности развертывания и автономной работы + +- Программное обеспечение с ИИ может работать полностью автономно на локальном устройстве без доступа к интернету после установки. +- С локального устройства возможно открыть доступ к сервису для интернет-пользователей (например, через проброс портов или настройку прокси). +- Приложение может быть установлено и сразу в облачный сервис (VPS, облачные платформы и т.д.) для круглосуточного доступа из любой точки мира. + +--- + + +## Управление настройками и доступом + +- Управление всеми настройками приложения осуществляется через удобный веб-интерфейс. +- Доступ к настройкам получает только пользователь, чей криптокошелек содержит специальный админ-токен управления смарт-контрактом. +- После первого входа в приложение администратор может изменить стандартный админ-токен, создав собственный токен через специальную форму для деплоя смарт-контракта прямо в интерфейсе приложения. +- Таким образом, ваш кошелек — это ваш смарт-контракт, ваши токены, ваш управляемый доступ и ваши активы: только вы контролируете все ключевые параметры и права. +- Для получения бесплатных обновлений приложения в течение 5 лет администратору необходимо отправить первичный админ-токен на собственный смарт-контракт, созданный в приложении (операция выполняется через интерфейс). + +> **Примечание:** Все смарт-контракты приложения построены на базе проверенных и безопасных библиотек OpenZeppelin. + +--- + +## Инструкция по заполнению формы «Блокчейн-настройки» + +1. **Создание нового DLE (Digital Legal Entity)** + - **Имя DLE**: Введите уникальное название вашей цифровой организации (например, My DLE). + - **Символ токена управления (GT)**: Укажите короткое обозначение токена (3-5 латинских символов, например, MDGT). + +2. **Выбор кода деятельности (ISIC)** + - Последовательно выберите секцию, раздел, группу и класс деятельности из выпадающих списков. + - После выбора нужного кода нажмите «Добавить код деятельности». Можно добавить несколько кодов. + +3. **Партнёры** + - Для каждого партнёра укажите: + - **Адрес партнёра** (Ethereum-адрес, например, 0x...). + - **Сумму GT для партнёра** (количество токенов управления). + - Для добавления нового партнёра используйте кнопку «Добавить партнёра». + - Для удаления — «Удалить партнёра». + +4. **RPC-конфигурации** + - В разделе «Добавить новую RPC конфигурацию» выберите сеть из списка или укажите пользовательский ID и Chain ID. + - Введите RPC URL (например, https://...). + - При необходимости воспользуйтесь предложенным URL. + - Нажмите «Добавить RPC» для сохранения конфигурации. + +5. **Выбор сети для деплоя** + - В выпадающем списке выберите блокчейн-сеть, в которую будет развёрнут смарт-контракт вашей организации. + +6. **Приватный ключ для деплоя** + - Введите приватный ключ деплоера (будет использоваться только для развертывания смарт-контракта). + +7. **Пользовательские настройки газа (опционально)** + - Если требуется, включите опцию «Использовать пользовательские настройки газа» и укажите лимит газа, максимальную и приоритетную комиссию. + +8. **Сохранение и деплой** + - После заполнения всех полей проверьте введённые данные. + - Нажмите кнопку деплоя (или «Сохранить»), чтобы развернуть смарт-контракт и завершить настройку. + +**Важно:** +- Доступ к настройкам имеют только пользователи с админ-токеном в кошельке. +- После деплоя вы сможете управлять организацией через смарт-контракт и веб-интерфейс. + +--- + +## Управление DLE и модульными смарт-контрактами + +После создания смарт-контракта с админ-токеном управления в разделе CRM приложения появляется интерфейс для управления функциями смарт-контракта и добавления модульных смарт-контрактов. + +### Как управлять DLE через интерфейс + +1. **Переход к управлению DLE** + - В разделе CRM нажмите на блок "Управление DLE" и кнопку "Подробнее" или перейдите по адресу `/dle-management`. + +2. **Выбор DLE** + - В списке отобразятся все созданные вами DLE. Выберите нужную организацию для управления. + +3. **Основная информация** + - Вкладка "Основная информация" содержит сведения о названии, символе токена, местонахождении, кодах деятельности, дате создания и адресах смарт-контрактов (токен, таймлок, Governor). Можно скопировать адреса или открыть их в обозревателе блокчейна. + +4. **Предложения** + - На вкладке "Предложения" можно создавать новые предложения для управления DLE (например, изменение параметров, добавление участников и др.). + - Для создания предложения заполните заголовок и описание, затем отправьте на голосование. + - Участвуйте в голосовании по предложениям ("За" или "Против"). Статус предложения обновляется автоматически. + +5. **Управление (Governance)** + - Вкладка "Управление" позволяет просматривать и изменять параметры управления: порог предложения, кворум, задержку и период голосования. + +6. **Модули** + - Вкладка "Модули" предназначена для подключения дополнительных модульных смарт-контрактов (например, токенизация активов, мультиподпись, дивиденды, стейкинг, приём платежей и др.). + - Для установки модуля нажмите "Установить" напротив нужного модуля. Для удаления — "Удалить". + - Для модуля "Прием платежей" выберите токены, которые будут приниматься, и сохраните настройки. + +7. **Удаление DLE** + - При необходимости можно удалить DLE (доступно только администратору). Будьте внимательны: действие необратимо. + +**Важно:** +- Все действия с DLE и модулями доступны только пользователям с админ-токеном в кошельке. +- Управление DLE реализовано через смарт-контракты на базе OpenZeppelin, что обеспечивает безопасность и прозрачность операций. + +--- + +## Настройка и использование ИИ-моделей + +После установки приложения администратор может: +- Добавить ключи своих ИИ-моделей по подписке (например, OpenAI, Gemini и др.) в настройках приложения. +- Скачать одну из доступных ИИ-моделей и развернуть её локально на своём устройстве для автоматизации обслуживания клиентов бизнеса без рисков утечки конфиденциальных данных. + +Для дообучения добавленных моделей деталям вашего бизнеса предусмотрена возможность: +- Создавать собственные таблицы в установленной базе данных через веб-интерфейс приложения. +- Заполнять эти таблицы данными, которые ИИ-ассистент сможет использовать для генерации персонализированных сообщений клиентам бизнеса как в чате приложения, так и в других каналах коммуникации (например, email, Telegram и др.). + +Это позволяет максимально адаптировать ИИ-ассистента под специфику вашего бизнеса и обеспечить безопасность корпоративных данных. + +--- + +## Интерактивный обмен контентом, публикация и интеграция с ИИ + +- Пользователи могут создавать и публиковать веб-страницы (о компании, продуктах, статьи) с помощью удобной формы. +- Каждая страница получает уникальный URL, оптимизирована для SEO и доступна для поиска в интернете и ИИ-системах. +- После публикации страницы можно делиться ими в корпоративном чате: появляется интерактивная карточка с кнопкой для просмотра содержимого, а также возможностью задать вопрос по содержимому страницы. +- Страницы автоматически интегрируются с RAG: разбиваются на смысловые блоки, векторизуются и используются ИИ-ассистентом для поиска и генерации ответов. +- При публикации можно выбрать интеграцию с RAG и добавить Q&A по теме страницы для последующего поиска. +- Возможна публикация страниц в соцсетях и блогах (Medium, LinkedIn, Instagram, Telegram и др.) через API с выбором платформ. +- Все компоненты реализованы с учётом безопасности и приватности данных, поддерживается удаление и редактирование страниц. +- Используются современные RAG-фреймворки (LlamaIndex, LangChain) и актуальные модели для векторизации (OpenAI, Sentence Transformers и др.). +- Страницы открыты для индексации поисковыми системами и ИИ-ботами, что обеспечивает максимальную видимость и доступность информации. + +--- + +## Управление контактами в CRM + +В разделе "Контакты" CRM администраторы приложения могут: +- Отслеживать и управлять всеми выбранными контактами через удобную таблицу. +- Использовать фильтры быстрого поиска по имени, email, Telegram, кошельку, типу контакта, дате и тегам. +- Применять кнопки быстрых действий для массовой рассылки сообщений, импорта контактов, удаления выбранных записей. +- Просматривать подробную информацию о каждом контакте, редактировать имя, email, Telegram, кошелек, язык общения. +- Добавлять и удалять теги для контакта, а также создавать новые теги прямо из интерфейса. +- Блокировать и разблокировать пользователей, полностью удалять контакт. +- Вести чат с каждым контактом прямо в интерфейсе приложения, использовать ИИ-ассистента для генерации ответов. +- Все изменения и действия с контактами доступны только администраторам. + +Это позволяет эффективно управлять клиентской базой, быстро находить нужные контакты и автоматизировать коммуникации с помощью встроенных инструментов. + + +## Контакты и поддержка + +- Email: info@hb3-accelerator.com +- Telegram: @yourproject_support +- Сайт: [https://hb3-accelerator.com](https://hb3-accelerator.com) + +--- + +## Лицензия + +MIT License + +--- + + + + +офер: + +Привет! Я **Алекс** из венчурного фонда **HB3 Accelerator**. + +Если ваша компания: +* использует **CRM** для обслуживания клиентов и имеет штат **продавцов и бухгалтеров**; +* нуждается в **безналичных платежах без лимитов, ограничений и с низкими комиссиями**; +* ценит **прозрачный учёт и свободное управление активами**, + +то я буду рад предложить вам **программное обеспечение с ИИ и смарт-контрактами**. + + +примеры вопросов оо клиентов: + +1. Как ваш софт интегрируется с уже существующими CRM-системами? Например, у нас сейчас используется 1С и Bitrix24. +2. Какие конкретно задачи автоматизирует ваш ИИ? Это только аналитика или он может, например, помогать продавцам в реальном времени? +3. Как обеспечивается безопасность и прозрачность работы со смарт-контрактами? Кто их разрабатывает и кто несёт ответственность в случае ошибки? +4. Какой у вас опыт внедрения подобных решений в СНГ? Есть ли кейсы в моей отрасли (например, розничная торговля)? +5. Какой порядок внедрения: сколько времени занимает интеграция, кто обучает персонал? +6. Какие комиссии по безналичным платежам и с какими банками/платёжными системами вы работаете? +7. Какой уровень поддержки вы предоставляете после внедрения? + + +ответ: + +### Наше комплексное решение для вашего бизнеса + +Наше программное обеспечение включает **встроенную CRM-систему**, куда вы можете легко загрузить необходимые контакты из ваших текущих CRM для **омниканального обслуживания**. + +**ИИ-ассистент**, интегрированный в наш софт, способен обучаться работе с сегментами ваших клиентов и поставщиков. Обучение происходит на основе правил, которые вы устанавливаете и загружаете в **векторную базу данных**. Эта база надёжно хранит ваши конфиденциальные данные либо на **локальном**, либо на **облачном сервере**. + +Мы — **молодой стартап**, представляющий свой первый технологический продукт. Внедрение нашего решения занимает от **нескольких часов до одного года**, в зависимости от сложности интеграции. + +--- + +### Условия сотрудничества + +Мы предоставляем **5 лет обновлений** для вашего программного обеспечения. + +Кроме того, если **в течение первого года** мы не сможем настроить софт под индивидуальные потребности вашего бизнеса, вы можете получить **возврат 70% от стоимости**. + + +вопросы: + +Какой у вас опыт работы с интеграцией в 1С и Bitrix24? Есть ли готовые модули или потребуется доработка под нас? +Как реализована миграция данных из старых CRM? Кто этим занимается — ваша команда или наши специалисты? +Какой стек технологий вы используете для ИИ и смарт-контрактов? На каких блокчейн-платформах строится ваша система? +Какой SLA по поддержке и реагированию на инциденты? Есть ли круглосуточная поддержка? +Как лицензируется продукт: это подписка, разовая покупка или гибридная модель? +Какой порядок оплаты: аванс, поэтапно, после внедрения? +Как вы обеспечиваете соответствие требованиям законодательства РФ/СНГ по хранению и обработке персональных данных? +Есть ли демо-доступ или пилотный проект, чтобы мы могли протестировать систему на реальных данных? + +ответы : + +--- + +### Особенности нашего решения + +Мы не занимаемся интеграциями с **устаревшими CRM-системами**. Однако ваши сотрудники смогут легко выполнить **миграцию данных** при поддержке нашего **ИИ-ассистента**. + +Наш **ИИ-ассистент** обеспечивает **круглосуточную поддержку**. Инциденты с нашей стороны **исключены**, поскольку приобретаемое вами программное обеспечение является **полностью локальным решением**. + +--- + +### Безопасность и конфиденциальность данных + +Хранение персональных данных **соответствует требованиям законодательства**. Все данные **зашифрованы** и хранятся **на вашей территории**. + +--- + +### Технологический стек + +Вот основные технологии, которые мы используем в нашем **backend-решении**: + +* **Искусственный интеллект и машинное обучение:** `@anthropic-ai/sdk`, `@google/genai`, `@langchain/community`, `@langchain/core`, `@langchain/ollama`, `langchain`, `openai` +* **Блокчейн и смарт-контракты:** `@openzeppelin/contracts`, `ethers`, `siwe`, `viem` +* **Веб-сервер и API:** `express`, `cors`, `helmet`, `express-rate-limit` +* **Базы данных:** `pg`, `connect-pg-simple` +* **Безопасность:** `csurf`, `express-session`, `session-file-store`, `cookie` +* **Обработка электронной почты:** `imap`, `mailparser`, `nodemailer` +* **Мессенджеры:** `node-telegram-bot-api`, `telegraf`, `ws` +* **Утилиты и вспомогательные библиотеки:** `archiver`, `axios`, `cron`, `dotenv`, `multer`, `node-cron`, `semver`, `winston` +* **Инструменты разработки:** `nodemon`, `eslint`, `prettier`, `hardhat`, `mocha`, `chai`, `typescript` + + +вопросы: + +1. Как реализована поддержка и обновления: если решение полностью локальное, как будут устанавливаться апдейты и исправления? Это делается через удалённый доступ, или вы предоставляете инструкции для нашей IT-команды? +2. Какой механизм резервного копирования и восстановления данных предусмотрен в вашем решении? +3. Если потребуется интеграция с внешними сервисами (например, платёжные шлюзы, государственные системы учёта), возможно ли это реализовать на вашей платформе? +4. Какой минимальный и рекомендуемый состав IT-специалистов нужен для поддержки вашего ПО на стороне клиента? +5. Какой порядок лицензирования используемых вами open-source библиотек и SDK? Нет ли рисков для конечного пользователя? +6. Предусмотрена ли возможность кастомизации интерфейса и бизнес-логики под наши процессы? +7. Какой минимальный объём внедрения (по стоимости или количеству пользователей) вы рассматриваете? + + +ответ: Конечно! Вот ответы на вопросы предпринимателя, составленные на основе документации к продукту DApp for Business: + +--- + +### 1. Как реализована поддержка и обновления: если решение полностью локальное, как будут устанавливаться апдейты и исправления? Это делается через удалённый доступ, или вы предоставляете инструкции для нашей IT-команды? + +**Ответ:** +Обновления предоставляются бесплатно в течение 5 лет. Программное обеспечение устанавливается и работает полностью локально, без необходимости постоянного интернет-доступа. Для установки обновлений вы можете использовать предоставленные bash-скрипты (`setup.sh`, `clean-logs.sh`) и инструкции из документации. При необходимости можно открыть доступ к сервису для интернет-пользователей (например, через проброс портов или прокси), но это не обязательно. Все инструкции по обновлению и обслуживанию доступны вашей IT-команде, удалённый доступ не требуется. + +--- + +### 2. Какой механизм резервного копирования и восстановления данных предусмотрен в вашем решении? + +**Ответ:** +В документации прямо не описан отдельный модуль резервного копирования, однако, поскольку все данные хранятся локально (или на вашем облачном сервере), вы полностью контролируете процесс бэкапа. Используются стандартные базы данных (`pg` — PostgreSQL), для которых легко настраиваются регулярные резервные копии с помощью штатных инструментов PostgreSQL или через Docker-скрипты. Также можно использовать bash-скрипты из папки `scripts/` для автоматизации резервного копирования и восстановления. + +--- + +### 3. Если потребуется интеграция с внешними сервисами (например, платёжные шлюзы, государственные системы учёта), возможно ли это реализовать на вашей платформе? + +**Ответ:** +Да, гибкая интеграция с внешними сервисами и кошельками поддерживается. Приложение масштабируемо и не зависит от традиционных банковских систем. В разделе "Модули" можно подключать дополнительные смарт-контракты, в том числе для приёма платежей, токенизации активов и других задач. Также реализована возможность публикации и интеграции с внешними платформами через API (например, соцсети, мессенджеры, внешние сервисы учёта). + +--- + +### 4. Какой минимальный и рекомендуемый состав IT-специалистов нужен для поддержки вашего ПО на стороне клиента? + +**Ответ:** +Для базовой эксплуатации достаточно одного системного администратора или DevOps-специалиста, знакомого с Docker, Linux и базовыми инструментами Node.js/PostgreSQL. Вся установка и обслуживание автоматизированы скриптами и не требуют глубоких знаний в программировании. Для расширенной кастомизации или интеграции с внешними сервисами может потребоваться разработчик с опытом работы с Node.js, смарт-контрактами (Solidity) и API. + +--- + +### 5. Какой порядок лицензирования используемых вами open-source библиотек и SDK? Нет ли рисков для конечного пользователя? + +**Ответ:** +Программное обеспечение распространяется по лицензии MIT, что гарантирует отсутствие ограничений для конечного пользователя. Все используемые библиотеки (например, OpenZeppelin, LangChain, Express, PostgreSQL и др.) также имеют открытые лицензии (MIT, Apache 2.0 и аналогичные), что исключает юридические риски для вашего бизнеса. + +--- + +### 6. Предусмотрена ли возможность кастомизации интерфейса и бизнес-логики под наши процессы? + +**Ответ:** +Да, архитектура приложения модульная и предусматривает возможность кастомизации. Вы можете добавлять собственные таблицы в базу данных через веб-интерфейс, подключать новые модули смарт-контрактов, настраивать параметры бизнеса, интегрировать свои ИИ-модели и дообучать их на ваших данных. Интерфейс реализован на Vue.js и может быть доработан под ваши задачи. + +--- + +### 7. Какой минимальный объём внедрения (по стоимости или количеству пользователей) вы рассматриваете? + +**Ответ:** +В документации не указаны ограничения по минимальному объёму внедрения или количеству пользователей. Продукт ориентирован как на индивидуальных предпринимателей, так и на малый и средний бизнес, стартапы и фрилансеров. Вы можете начать с одного пользователя и масштабировать решение по мере роста бизнеса. + diff --git a/backend/db/migrations/048_add_order_to_user_rows.sql b/backend/db/migrations/048_add_order_to_user_rows.sql new file mode 100644 index 0000000..3b48030 --- /dev/null +++ b/backend/db/migrations/048_add_order_to_user_rows.sql @@ -0,0 +1,16 @@ +-- 048_add_order_to_user_rows.sql +-- Добавляет поле order в user_rows для поддержки сортировки строк + +ALTER TABLE user_rows ADD COLUMN "order" INTEGER DEFAULT 0; + +-- Проставить уникальные значения order для существующих строк (по id) +DO $$ +DECLARE + r RECORD; + idx INTEGER := 1; +BEGIN + FOR r IN SELECT id FROM user_rows ORDER BY id LOOP + UPDATE user_rows SET "order" = idx WHERE id = r.id; + idx := idx + 1; + END LOOP; +END$$; \ No newline at end of file diff --git a/backend/package.json b/backend/package.json index 0d1907e..277596c 100644 --- a/backend/package.json +++ b/backend/package.json @@ -93,7 +93,6 @@ "semver": "^7.7.1", "**/utf7/semver": "^7.7.1", "tar-fs": "^3.0.0", - "parse-duration": "^1.1.0", "pbkdf2": "^3.1.2", "nanoid": "^5.0.0", "brace-expansion": "^2.0.1" diff --git a/backend/routes/tables.js b/backend/routes/tables.js index e2eab63..9eb8a7a 100644 --- a/backend/routes/tables.js +++ b/backend/routes/tables.js @@ -365,6 +365,27 @@ router.patch('/:id', async (req, res, next) => { } }); +// PATCH: массовое обновление порядка строк (order) +router.patch('/:id/rows/order', async (req, res, next) => { + try { + const tableId = req.params.id; + const { order } = req.body; // order: [{rowId, order}, ...] + if (!Array.isArray(order)) { + return res.status(400).json({ error: 'order должен быть массивом' }); + } + for (const item of order) { + if (!item.rowId || typeof item.order !== 'number') continue; + await db.getQuery()( + 'UPDATE user_rows SET "order" = $1, updated_at = NOW() WHERE id = $2 AND table_id = $3', + [item.order, item.rowId, tableId] + ); + } + res.json({ success: true }); + } catch (err) { + next(err); + } +}); + // Получить id колонок с purpose 'question' и 'answer' async function getQuestionAnswerColumnIds(tableId) { const { rows } = await db.getQuery()( diff --git a/frontend/src/components/tables/TableCell.vue b/frontend/src/components/tables/TableCell.vue index 7f07295..24695f3 100644 --- a/frontend/src/components/tables/TableCell.vue +++ b/frontend/src/components/tables/TableCell.vue @@ -2,7 +2,13 @@