Skip to content

Latest commit

 

History

History
40 lines (30 loc) · 4.57 KB

DOMAIN_MODEL.md

File metadata and controls

40 lines (30 loc) · 4.57 KB

Предметная модель

Это целевая модель. Первое ядро реализует неизменяемый descriptor и Upload с состояниями pending/available/cancelled; таблицы описаны в миграциях infrastructure. Остальные сущности ниже запланированы.

Объект Идентичность и назначение
Repository Область доступа, квот и политики хранения
PackageVersion repository + group + name + version, исходный UPack
AssetRevision Неизменяемая ревизия содержимого обычного файла
Asset Логический путь, указывающий на текущую ревизию
Blob Внутренний ID, backend, размер, SHA-256, состояние целостности
MetadataSchema Типы и ограничения расширяемых полей
Label Маркировка, не заменяющая ACL
Collection Логическая подборка объектов без копирования байтов
UploadSession Принятые части, резерв места, срок действия и состояние
TransferJob Намерение передачи, приоритет, очередь, допуск и lease
ExternalReference Защитная ссылка продукта/внешнего потребителя на версию

Инварианты

  1. Опубликованный blob неизменяем и доступен только после проверки целостности и фиксации публикации.
  2. Asset перезаписывается сменой ревизии; активное скачивание закреплено за конкретным blob.
  3. Group входит в идентичность UPack. Нельзя схлопывать разные группы по одному имени пакета.
  4. Исходный upack.json и исходные байты сохраняются. Изменение меток каталога не меняет архив.
  5. Поля approve/promote изменяются по отдельным правам, а не любым загрузившим файл.
  6. Ссылки, активные передачи и точки восстановления защищают blob от физической очистки.
  7. Повтор завершения одной загрузки возвращает тот же результат; противоречивый повтор не считается успешной идемпотентностью.
  8. Квоты и лимиты рассчитываются до приёма данных и учитывают staging/сборку частей.

Метаданные

Разделяем оригинальные поля UPack, редактируемые свойства каталога и управляемые статусы. Схемы имеют ограничения размера, глубины и числа индексов. Поиск и подборки учитывают доступ к каждому объекту.

Нормализация регистра, поддержка версий и коллизии путей фиксируются собственным контрактом каталога до импорта данных. В домене нельзя использовать случайную сортировку строк как SemVer/latest.

Состояния

Предварительный путь загрузки: queued → reserved → uploading → verifying → available; terminal-состояния failed/cancelled/expired. Условия переходов и действия после сбоя уточняются с первым upload use case.

Не моделируйте все поля как необязательные свойства одного объекта. Используйте различимые состояния с обязательными данными для каждого состояния и явными переходами.