Модель библиотеки#
Контракт#
- Реализация 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 уровня аккаунта в схеме библиотеки.