Модель библиотеки#

Контракт#

  • Реализация core ДОЛЖНА включать Library как доменную сущность первого класса.
  • Одна библиотека ДОЛЖНА принадлежать ровно одному аккаунту.
  • Одна активная сессия ДОЛЖНА работать ровно с одной active_library_id.
  • Library ДОЛЖНА поддерживать как контент для изучения, так и контент для хранения без обязательного прогресса.

Модель записи контента#

  • Записи библиотеки ДОЛЖНЫ включать тип контента (content_type).
  • Базовый набор типов зафиксирован в Типизации контента и ДОЛЖЕН допускать пользовательские типы.
  • Трекинг прогресса ДОЛЖЕН быть опциональным и НЕ ДОЛЖЕН требоваться для каждой записи.

Общие статусы и флаги записи#

  • Каждая запись библиотеки ДОЛЖНА иметь status из набора: inbox | todo | in_progress | skimmed | done | dropped.
  • inbox РЕКОМЕНДУЕТСЯ как начальный статус по умолчанию для новых записей.
  • Каждая запись библиотеки МОЖЕТ иметь priority из набора: low | medium | high.
  • Каждая запись библиотеки МОЖЕТ иметь независимые флаги favorite и archived.
  • status, priority, favorite, archived ДОЛЖНЫ быть атрибутами, независимыми от типа контента.

Правила контекста сессии#

  • Доменные операции ДОЛЖНЫ выполняться в контексте активной библиотеки.
  • Назначение active_library_id на библиотеку вне активного аккаунта ДОЛЖНО отклоняться.
  • Операции с несуществующей библиотекой ДОЛЖНЫ отклоняться.

Жизненный цикл и состояния#

  • Реализация ДОЛЖНА поддерживать создание библиотеки.
  • Реализация ДОЛЖНА поддерживать выбор активной библиотеки внутри разблокированной сессии.
  • Реализация ДОЛЖНА поддерживать переходы состояний, эквивалентные active <-> archived.
  • Архивная библиотека НЕ ДОЛЖНА выбираться как активная без явного восстановления или повторной активации.

Инварианты#

  • Создание библиотеки без валидного account_id ДОЛЖНО отклоняться.
  • Cross-library доступ в рамках одной операции в библиотечном контексте ДОЛЖЕН отклоняться.
  • Удаление или архивация библиотеки ДОЛЖНЫ сохранять ссылочную консистентность.

Связанные разделы#

Что не входит в модель библиотеки#

  • Нет client/device UI-настроек в core-схеме библиотеки.
  • Нет полей security policy уровня аккаунта в схеме библиотеки.