Loading Documentation Hub...
Scanning documentation library
Loading Documentation Hub...
Scanning documentation library
Documentation
📚 Documentation
Loading Documentation Hub...
Scanning documentation library
Scanning documentation library
Scanning documentation library
Scanning documentation library
Підготовка контенту платформи Ring
Підготовка контенту платформи Ring
Підготовка контенту платформи Ring
Научный редактор Zemna.AI — редактор форматированного текста на базе Tiptap для академического письма. Он поддерживает формулы LaTeX, автоматическое сохранение, историю версий и сохранение публикаций через слой базы данных Ring Platform.
Статус: Фаза 2 (спринты 2.1–2.3) завершены. Поддержка рисунков/таблиц и экспорт запланированы в спринтах 2.4–2.5.
| Возможность | Описание |
|---|---|
| Форматированный текст | Заголовки (H1–H6), жирный, курсив, подчёркивание, списки, цитаты, блоки кода, таблицы, ссылки, изображения |
| LaTeX | Инлайн и блочные формулы через KaTeX; модальное окно формул с предпросмотром и шаблонами |
| Автосохранение | Сохранение с задержкой 30 с; первое сохранение создаёт публикацию, далее обновление через PUT |
| История версий | Снимки и восстановление версий; список версий с датами и опциональными описаниями |
| Публикации | Содержимое хранится как Tiptap JSON; загрузка по или создание новой |
Научный редактор Zemna.AI — редактор форматированного текста на базе Tiptap для академического письма. Он поддерживает формулы LaTeX, автоматическое сохранение, историю версий и сохранение публикаций через слой базы данных Ring Platform.
Статус: Фаза 2 (спринты 2.1–2.3) завершены. Поддержка рисунков/таблиц и экспорт запланированы в спринтах 2.4–2.5.
| Возможность | Описание |
|---|---|
| Форматированный текст | Заголовки (H1–H6), жирный, курсив, подчёркивание, списки, цитаты, блоки кода, таблицы, ссылки, изображения |
| LaTeX | Инлайн и блочные формулы через KaTeX; модальное окно формул с предпросмотром и шаблонами |
| Автосохранение | Сохранение с задержкой 30 с; первое сохранение создаёт публикацию, далее обновление через PUT |
| История версий | Снимки и восстановление версий; список версий с датами и опциональными описаниями |
| Публикации | Содержимое хранится как Tiptap JSON; загрузка по или создание новой |
Научный редактор Zemna.AI — редактор форматированного текста на базе Tiptap для академического письма. Он поддерживает формулы LaTeX, автоматическое сохранение, историю версий и сохранение публикаций через слой базы данных Ring Platform.
Статус: Фаза 2 (спринты 2.1–2.3) завершены. Поддержка рисунков/таблиц и экспорт запланированы в спринтах 2.4–2.5.
| Возможность | Описание |
|---|---|
| Форматированный текст | Заголовки (H1–H6), жирный, курсив, подчёркивание, списки, цитаты, блоки кода, таблицы, ссылки, изображения |
| LaTeX | Инлайн и блочные формулы через KaTeX; модальное окно формул с предпросмотром и шаблонами |
| Автосохранение | Сохранение с задержкой 30 с; первое сохранение создаёт публикацию, далее обновление через PUT |
| История версий | Снимки и восстановление версий; список версий с датами и опциональными описаниями |
| Публикации | Содержимое хранится как Tiptap JSON; загрузка по или создание новой |
?id=...Редактор использует Tiptap с StarterKit и расширениями для научного письма:
Содержимое хранится как Tiptap JSON в поле публикации content; редактор принимает начальное содержимое как строку HTML или JSON для загрузки сохранённых публикаций.
?id=...Редактор использует Tiptap с StarterKit и расширениями для научного письма:
Содержимое хранится как Tiptap JSON в поле публикации content; редактор принимает начальное содержимое как строку HTML или JSON для загрузки сохранённых публикаций.
?id=...Редактор использует Tiptap с StarterKit и расширениями для научного письма:
Содержимое хранится как Tiptap JSON в поле публикации content; редактор принимает начальное содержимое как строку HTML или JSON для загрузки сохранённых публикаций.
Формулы хранятся как собственные узлы Tiptap (mathBlock) с атрибутами latex и display.
Формулы хранятся как собственные узлы Tiptap (mathBlock) с атрибутами latex и display.
Формулы хранятся как собственные узлы Tiptap (mathBlock) с атрибутами latex и display.
?id= в URL; первое «Сохранить» или первое автосохранение создаёт публикацию через POST /api/publications и устанавливает id публикации для последующих сохранений.?id=<publicationId>; страница загружает публикацию и устанавливает заголовок и содержимое (JSON). Автосохранение и ручное «Сохранить» используют PUT /api/publications/:id.?id= в URL; первое «Сохранить» или первое автосохранение создаёт публикацию через POST /api/publications и устанавливает id публикации для последующих сохранений.?id=<publicationId>; страница загружает публикацию и устанавливает заголовок и содержимое (JSON). Автосохранение и ручное «Сохранить» используют PUT /api/publications/:id.?id= в URL; первое «Сохранить» или первое автосохранение создаёт публикацию через POST /api/publications и устанавливает id публикации для последующих сохранений.?id=<publicationId>; страница загружает публикацию и устанавливает заголовок и содержимое (JSON). Автосохранение и ручное «Сохранить» используют PUT /api/publications/:id.Публикации и версии используют абстракцию базы данных Ring Platform (PostgreSQL с JSONB):
Публикации и версии используют абстракцию базы данных Ring Platform (PostgreSQL с JSONB):
Публикации и версии используют абстракцию базы данных Ring Platform (PostgreSQL с JSONB):
publications: id, data (JSONB), created_at, updated_at.data содержит: user_id, title, content (Tiptap JSON), status, template_id.publication_versions: id, data (JSONB), created_at, updated_at.data содержит: publication_id, version_number, content, change_summary, created_by.publications: id, data (JSONB), created_at, updated_at.data содержит: user_id, title, content (Tiptap JSON), status, template_id.publication_versions: id, data (JSONB), created_at, updated_at.data содержит: publication_id, version_number, content, change_summary, created_by.publications: id, data (JSONB), created_at, updated_at.data содержит: user_id, title, content (Tiptap JSON), status, template_id.publication_versions: id, data (JSONB), created_at, updated_at.data содержит: publication_id, version_number, content, change_summary, created_by.Схема определена в data/schema.sql; адаптер PostgreSQL имеет fieldMappings для обеих коллекций.
Схема определена в data/schema.sql; адаптер PostgreSQL имеет fieldMappings для обеих коллекций.
Схема определена в data/schema.sql; адаптер PostgreSQL имеет fieldMappings для обеих коллекций.
sequenceDiagram
participant User
participant Editor
participant useAutoSave
participant API
participant DB
User->>Editor: Edit content / title
Editor->>useAutoSave: touch(publicationId, payload)
useAutoSave->>useAutoSave: Debounce 30s
Note over useAutoSave: Timer fires
useAutoSave->>API: POST /api/publications (new) or PUT /api/publications/:id
API->>DB: create() or update()
DB-->>API: publication
API-->>useAutoSave: 200 + publication
useAutoSave->>Editor: onFirstSave(id) if new
useAutoSave->>Editor: lastSaved updatedsequenceDiagram
participant User
participant Editor
participant useAutoSave
participant API
participant DB
User->>Editor: Edit content / title
Editor->>useAutoSave: touch(publicationId, payload)
useAutoSave->>useAutoSave: Debounce 30s
Note over useAutoSave: Timer fires
useAutoSave->>API: POST /api/publications (new) or PUT /api/publications/:id
API->>DB: create() or update()
DB-->>API: publication
API-->>useAutoSave: 200 + publication
useAutoSave->>Editor: onFirstSave(id) if new
useAutoSave->>Editor: lastSaved updatedsequenceDiagram
participant User
participant Editor
participant useAutoSave
participant API
participant DB
User->>Editor: Edit content / title
Editor->>useAutoSave: touch(publicationId, payload)
useAutoSave->>useAutoSave: Debounce 30s
Note over useAutoSave: Timer fires
useAutoSave->>API: POST /api/publications (new) or PUT /api/publications/:id
API->>DB: create() or update()
DB-->>API: publication
API-->>useAutoSave: 200 + publication
useAutoSave->>Editor: onFirstSave(id) if new
useAutoSave->>Editor: lastSaved updatedsequenceDiagram
participant User
participant Panel
participant API
participant DB
User->>Panel: Open Version History
Panel->>API: GET /api/publications/:id/versions
API->>DB: findByField(publication_versions, publication_id, id)
DB-->>API: versions[]
API-->>Panel: versions
User->>Panel: Restore version V
Panel->>API: POST /api/publications/:id/versions { action: 'restore', versionId: V }
API->>DB: updatePublication(id, content from V)
DB-->>API: publication
API-->>Panel: 200
Panel->>User: onRestore() → refetch publication, set editor contentsequenceDiagram
participant User
participant Panel
participant API
participant DB
User->>Panel: Open Version History
Panel->>API: GET /api/publications/:id/versions
API->>DB: findByField(publication_versions, publication_id, id)
DB-->>API: versions[]
API-->>Panel: versions
User->>Panel: Restore version V
Panel->>API: POST /api/publications/:id/versions { action: 'restore', versionId: V }
API->>DB: updatePublication(id, content from V)
DB-->>API: publication
API-->>Panel: 200
Panel->>User: onRestore() → refetch publication, set editor contentsequenceDiagram
participant User
participant Panel
participant API
participant DB
User->>Panel: Open Version History
Panel->>API: GET /api/publications/:id/versions
API->>DB: findByField(publication_versions, publication_id, id)
DB-->>API: versions[]
API-->>Panel: versions
User->>Panel: Restore version V
Panel->>API: POST /api/publications/:id/versions { action: 'restore', versionId: V }
API->>DB: updatePublication(id, content from V)
DB-->>API: publication
API-->>Panel: 200
Panel->>User: onRestore() → refetch publication, set editor content| Метод | Путь | Описание |
|---|---|---|
| GET | /api/publications | Список публикаций текущего пользователя |
| POST | /api/publications | Создать публикацию (body: title, content, status, template_id) |
| GET | /api/publications/[id] | Получить публикацию (проверка владения) |
| PUT | /api/publications/[id] | Обновить публикацию (проверка владения) |
| DELETE | /api/publications/[id] | Удалить публикацию (проверка владения) |
| GET | /api/publications/[id]/versions | Список версий публикации |
| POST | /api/publications/[id]/versions | Снимок (action: snapshot) или восстановление (action: restore, versionId) |
| Метод | Путь | Описание |
|---|---|---|
| GET | /api/publications | Список публикаций текущего пользователя |
| POST | /api/publications | Создать публикацию (body: title, content, status, template_id) |
| GET | /api/publications/[id] | Получить публикацию (проверка владения) |
| PUT | /api/publications/[id] | Обновить публикацию (проверка владения) |
| DELETE | /api/publications/[id] | Удалить публикацию (проверка владения) |
| GET | /api/publications/[id]/versions | Список версий публикации |
| POST | /api/publications/[id]/versions | Снимок (action: snapshot) или восстановление (action: restore, versionId) |
| Метод | Путь | Описание |
|---|---|---|
| GET | /api/publications | Список публикаций текущего пользователя |
| POST | /api/publications | Создать публикацию (body: title, content, status, template_id) |
| GET | /api/publications/[id] | Получить публикацию (проверка владения) |
| PUT | /api/publications/[id] | Обновить публикацию (проверка владения) |
| DELETE | /api/publications/[id] | Удалить публикацию (проверка владения) |
| GET | /api/publications/[id]/versions | Список версий публикации |
| POST | /api/publications/[id]/versions | Снимок (action: snapshot) или восстановление (action: restore, versionId) |
Все маршруты требуют аутентификации; для get/update/delete и версий проверяется владение.
Все маршруты требуют аутентификации; для get/update/delete и версий проверяется владение.
Все маршруты требуют аутентификации; для get/update/delete и версий проверяется владение.
| Область | Путь |
|---|---|
| Страница редактора | app/(authenticated)/[locale]/editor/page.tsx |
| Научный редактор | components/editor/scientific-editor.tsx |
| Панель инструментов | components/editor/editor-toolbar.tsx |
| Расширение LaTeX | components/editor/extensions/latex-extension.tsx |
| Модальное окно формул | components/editor/equation-editor.tsx |
| Панель истории версий | components/editor/version-history-panel.tsx |
| Хук автосохранения | hooks/use-auto-save.ts |
| Типы публикаций | features/publications/types/index.ts |
| Сервис публикаций | features/publications/services/publication-service.ts |
| API-маршруты | app/(public)/api/publications/ |
| Область | Путь |
|---|---|
| Страница редактора | app/(authenticated)/[locale]/editor/page.tsx |
| Научный редактор | components/editor/scientific-editor.tsx |
| Панель инструментов | components/editor/editor-toolbar.tsx |
| Расширение LaTeX | components/editor/extensions/latex-extension.tsx |
| Модальное окно формул | components/editor/equation-editor.tsx |
| Панель истории версий | components/editor/version-history-panel.tsx |
| Хук автосохранения | hooks/use-auto-save.ts |
| Типы публикаций | features/publications/types/index.ts |
| Сервис публикаций | features/publications/services/publication-service.ts |
| API-маршруты | app/(public)/api/publications/ |
| Область | Путь |
|---|---|
| Страница редактора | app/(authenticated)/[locale]/editor/page.tsx |
| Научный редактор | components/editor/scientific-editor.tsx |
| Панель инструментов | components/editor/editor-toolbar.tsx |
| Расширение LaTeX | components/editor/extensions/latex-extension.tsx |
| Модальное окно формул | components/editor/equation-editor.tsx |
| Панель истории версий | components/editor/version-history-panel.tsx |
| Хук автосохранения | hooks/use-auto-save.ts |
| Типы публикаций | features/publications/types/index.ts |
| Сервис публикаций | features/publications/services/publication-service.ts |
| API-маршруты | app/(public)/api/publications/ |
/editor (или /[locale]/editor). Редактор загружается с типовым научным шаблоном; id публикации устанавливается при первом сохранении./editor?id=<publicationId>. Страница получает публикацию и устанавливает заголовок и содержимое (Tiptap JSON) в редакторе.Восстановление не удаляет версии; оно обновляет содержимое публикации, история версий сохраняется.
/editor (или /[locale]/editor). Редактор загружается с типовым научным шаблоном; id публикации устанавливается при первом сохранении./editor?id=<publicationId>. Страница получает публикацию и устанавливает заголовок и содержимое (Tiptap JSON) в редакторе.Восстановление не удаляет версии; оно обновляет содержимое публикации, история версий сохраняется.
/editor (или /[locale]/editor). Редактор загружается с типовым научным шаблоном; id публикации устанавливается при первом сохранении./editor?id=<publicationId>. Страница получает публикацию и устанавливает заголовок и содержимое (Tiptap JSON) в редакторе.Восстановление не удаляет версии; оно обновляет содержимое публикации, история версий сохраняется.
Подробный разбор спринтов: Фаза 2: Улучшение научного редактора.
| Схема | data/schema.sql |
Подробный разбор спринтов: Фаза 2: Улучшение научного редактора.
| Схема | data/schema.sql |
Подробный разбор спринтов: Фаза 2: Улучшение научного редактора.
| Схема | data/schema.sql |