Skip to content

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

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

ОбъектИдентичность и назначение
RepositoryОбласть доступа, квот и политики хранения
PackageVersionrepository + 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.

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

Arkvory · ProAnimaStudio