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; завантаження за ?id=... або створення нового |
Науковий редактор Zemna.AI — це редактор форматованого тексту на базі Tiptap для академічного письма. Він підтримує формули LaTeX, автоматичне збереження, історію версій та збереження публікацій через шар бази даних Ring Platform.
Статус: Фаза 2 (спринти 2.1–2.3) завершені. Підтримка рисунків/таблиць та експорт заплановані в спринтах 2.4–2.5.
| Можливість | Опис |
|---|---|
| Форматований текст | Заголовки (H1–H6), жирний, курсив, підкреслення, списки, цитати, блоки коду, таблиці, посилання, зображення |
| LaTeX | Інлайн та блокові формули через KaTeX; модальне вікно формул з попереднім переглядом та шаблонами |
| Автозбереження | Збереження з затримкою 30 с; перше збереження створює публікацію, далі оновлення через PUT |
| Історія версій | Знімки та відновлення версій; список версій з датами та опційними описами |
| Публікації | Вміст зберігається як Tiptap JSON; завантаження за ?id=... або створення нового |
Науковий редактор 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 для завантаження збережених публікацій.
Редактор використовує Tiptap з StarterKit та розширеннями для наукового письма:
Вміст зберігається як Tiptap JSON у полі публікації content; редактор приймає початковий вміст як рядок HTML або JSON для завантаження збережених публікацій.
Редактор використовує 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 |