Composition Authoring Service Spec

1. Назначение и границы

  • Ответственность функции: управление композициями на уровне списка, версий, структуры фрагментов, публикации, снятия версии с использования и удаления.

  • Потребители: CompositionsViewModel, CompositionEditorViewModel, CompositionsPage.qml, CompositionEditorWindow.qml.

  • Не входит: скрытая нормализация, скрытое переписывание блоков, серверный API.

2. Потребители и зависимости

  • Потребители:

  • CompositionsViewModel

  • CompositionEditorViewModel

  • Зависимости:

  • Engine.LoadComposition(…​)

  • Engine.ListCompositions(…​)

  • Engine.ListCompositionVersions(…​)

  • Engine.PublishComposition(…​)

  • Engine.UpdateComposition(…​)

  • Engine.DeprecateComposition(…​)

  • Engine.DeleteComposition(…​)

  • библиотека блоков через Engine.ListBlocks(…​)

3. Основные методы и действия

На уровне движка:

  • LoadComposition

  • ListCompositions

  • ListCompositionVersions

  • PublishComposition

  • UpdateComposition

  • DeprecateComposition

  • DeleteComposition

На уровне интерфейса:

  • openCreateEditor

  • openEditor

  • save

  • addBlockRef

  • addStaticText

  • addSeparator

  • applySelected

  • cutSelected

  • pasteBeforeSelected

  • pasteAfterSelected

  • insertNewlinesBetween

  • removeAllSeparators

  • moveFragment

4. Входные данные

Поля метаданных композиции:

  • идентификатор композиции

  • описание

  • комментарий к ревизии

  • режим увеличения версии

Поля фрагментов:

  • для ссылки на блок:

  • идентификатор блока

  • версия блока

  • локальные параметры

  • для текстового фрагмента:

  • текст

  • для разделителя:

  • тип разделителя

5. Выходные данные

Видимые пользователю результаты:

  • список композиций

  • список версий

  • подробности выбранной композиции

  • набор карточек фрагментов в редакторе

  • текст статуса

Результаты движка:

  • PublishedComposition

  • ошибки загрузки, публикации, удаления и снятия версии с использования

6. Правила контракта данных

  • каждая опубликованная версия композиции неизменяема

  • новая публикация создаёт новую версию композиции

  • ссылка на блок должна содержать корректную версию

  • состав фрагментов сохраняется в порядке, заданном пользователем

  • рабочее состояние редактора не является опубликованной композицией до явного сохранения

7. Иерархия источников данных

  • источник истины по опубликованным композициям — хранилище через engine

  • источник истины по рабочему редактированию — CompositionEditorViewModel

  • источник истины по доступным блокам — библиотека блоков через engine

8. Обработка ошибок и повторы

  • ошибка загрузки композиции — редактор не открывается в неполном состоянии

  • ошибка формата версии блока — сохранение останавливается

  • ошибка публикации — не очищает форму

  • ошибка удаления — не должна вести к ложному обновлению списка

  • повторы выполняются пользователем вручную

9. Правила выбора пути

  • если пользователь создаёт новую композицию, используется путь первой публикации

  • если пользователь редактирует существующую композицию, используется путь выпуска новой версии

  • если композиция только просматривается, редактор не меняет хранилище

10. Граничные случаи и поведение по умолчанию

  • пустой идентификатор композиции — сохранение запрещено

  • некорректная версия блока — сохранение запрещено

  • отсутствие выбранной композиции при открытии редактора — операция не выполняется

  • пустой буфер вырезанного фрагмента — вставка не выполняется

  • удаление всех разделителей не должно разрушать остальные фрагменты

Связи вверх и вниз

Связи вверх:

Связи вниз: