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. Граничные случаи и поведение по умолчанию
-
пустой идентификатор композиции — сохранение запрещено
-
некорректная версия блока — сохранение запрещено
-
отсутствие выбранной композиции при открытии редактора — операция не выполняется
-
пустой буфер вырезанного фрагмента — вставка не выполняется
-
удаление всех разделителей не должно разрушать остальные фрагменты