<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Модель хранения on Rekeeply Spec</title><link>https://rekeeply.github.io/spec/ru/core-api/storage-model/</link><description>Recent content in Модель хранения on Rekeeply Spec</description><generator>Hugo</generator><language>ru</language><atom:link href="https://rekeeply.github.io/spec/ru/core-api/storage-model/index.xml" rel="self" type="application/rss+xml"/><item><title>Модель Raw</title><link>https://rekeeply.github.io/spec/ru/core-api/storage-model/raw-model/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://rekeeply.github.io/spec/ru/core-api/storage-model/raw-model/</guid><description>&lt;h1 id="модель-raw"&gt;Модель Raw&lt;a class="anchor" href="#%d0%bc%d0%be%d0%b4%d0%b5%d0%bb%d1%8c-raw"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="назначение"&gt;Назначение&lt;a class="anchor" href="#%d0%bd%d0%b0%d0%b7%d0%bd%d0%b0%d1%87%d0%b5%d0%bd%d0%b8%d0%b5"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Raw&lt;/code&gt; выделен в отдельный домен, потому что часть пользовательских данных должна храниться в неструктурированном виде до последующей обработки.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Raw&lt;/code&gt; обеспечивает быстрый capture без обязательной классификации и без немедленного размещения в &lt;code&gt;Library&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="контракт"&gt;Контракт&lt;a class="anchor" href="#%d0%ba%d0%be%d0%bd%d1%82%d1%80%d0%b0%d0%ba%d1%82"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Реализация core ДОЛЖНА включать &lt;code&gt;Raw&lt;/code&gt; как домен хранения уровня аккаунта для неструктурированного capture.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Raw&lt;/code&gt; ДОЛЖЕН поддерживать быстрое сохранение без выбора активной библиотеки.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Raw&lt;/code&gt; ДОЛЖЕН поддерживать разбор и отложенную обработку сохраненных элементов.&lt;/li&gt;
&lt;li&gt;Элементы &lt;code&gt;Raw&lt;/code&gt; ДОЛЖНЫ поддерживать явный последующий перенос в &lt;code&gt;Library&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="поддерживаемые-payload-типы"&gt;Поддерживаемые payload-типы&lt;a class="anchor" href="#%d0%bf%d0%be%d0%b4%d0%b4%d0%b5%d1%80%d0%b6%d0%b8%d0%b2%d0%b0%d0%b5%d0%bc%d1%8b%d0%b5-payload-%d1%82%d0%b8%d0%bf%d1%8b"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Raw&lt;/code&gt; ДОЛЖЕН поддерживать payload-типы &lt;code&gt;text&lt;/code&gt;, &lt;code&gt;link&lt;/code&gt;, &lt;code&gt;mixed&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Raw&lt;/code&gt; МОЖЕТ поддерживать &lt;code&gt;file_ref&lt;/code&gt; как reference-only payload.&lt;/li&gt;
&lt;li&gt;Типы &lt;code&gt;image&lt;/code&gt;, &lt;code&gt;video&lt;/code&gt;, &lt;code&gt;audio&lt;/code&gt; не входят в обязательный baseline scope.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="модель-хранения-raw-item"&gt;Модель хранения Raw Item&lt;a class="anchor" href="#%d0%bc%d0%be%d0%b4%d0%b5%d0%bb%d1%8c-%d1%85%d1%80%d0%b0%d0%bd%d0%b5%d0%bd%d0%b8%d1%8f-raw-item"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Хранение ДОЛЖНО быть ориентировано на typed-columns-first для горячих read-path.&lt;/li&gt;
&lt;li&gt;Реализация НЕ ДОЛЖНА опираться на JSON-only хранение для горячих list/filter-path.&lt;/li&gt;
&lt;li&gt;Каждый &lt;code&gt;RawItem&lt;/code&gt; ДОЛЖЕН содержать: &lt;code&gt;id&lt;/code&gt;, &lt;code&gt;account_id&lt;/code&gt;, &lt;code&gt;payload_type&lt;/code&gt;, &lt;code&gt;status&lt;/code&gt;, &lt;code&gt;created_at&lt;/code&gt;, &lt;code&gt;updated_at&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Реализация ДОЛЖНА/РЕКОМЕНДУЕТСЯ хранить легкие поля для быстрых списков (&lt;code&gt;title_preview&lt;/code&gt;, source/type/status).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="каналы-записи-capture"&gt;Каналы записи (capture)&lt;a class="anchor" href="#%d0%ba%d0%b0%d0%bd%d0%b0%d0%bb%d1%8b-%d0%b7%d0%b0%d0%bf%d0%b8%d1%81%d0%b8-capture"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Raw&lt;/code&gt; ДОЛЖЕН принимать capture из ручного ввода и буфера обмена/paste.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Raw&lt;/code&gt; ДОЛЖЕН/МОЖЕТ принимать external share/import при поддержке клиентом/рантаймом.&lt;/li&gt;
&lt;li&gt;Capture НЕ ДОЛЖЕН зависеть от сетевой доступности.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="обогащение-метаданными"&gt;Обогащение метаданными&lt;a class="anchor" href="#%d0%be%d0%b1%d0%be%d0%b3%d0%b0%d1%89%d0%b5%d0%bd%d0%b8%d0%b5-%d0%bc%d0%b5%d1%82%d0%b0%d0%b4%d0%b0%d0%bd%d0%bd%d1%8b%d0%bc%d0%b8"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Для &lt;code&gt;link&lt;/code&gt; metadata enrichment МОЖЕТ выполняться асинхронно после capture.&lt;/li&gt;
&lt;li&gt;Ошибки получения метаданных НЕ ДОЛЖНЫ блокировать завершение capture.&lt;/li&gt;
&lt;li&gt;Если метаданные недоступны, реализация ДОЛЖНА использовать детерминированный fallback-preview.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="lifecycle-и-операции"&gt;Lifecycle и операции&lt;a class="anchor" href="#lifecycle-%d0%b8-%d0%be%d0%bf%d0%b5%d1%80%d0%b0%d1%86%d0%b8%d0%b8"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Реализация ДОЛЖНА поддерживать состояния, эквивалентные &lt;code&gt;new | triaged | promoted | archived&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Реализация ДОЛЖНА поддерживать list и смену статусов для triage.&lt;/li&gt;
&lt;li&gt;Реализация ДОЛЖНА поддерживать явную операцию &lt;code&gt;promote&lt;/code&gt; из &lt;code&gt;Raw&lt;/code&gt; в &lt;code&gt;Library&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="требования-к-promote-flow"&gt;Требования к promote-flow&lt;a class="anchor" href="#%d1%82%d1%80%d0%b5%d0%b1%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d1%8f-%d0%ba-promote-flow"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;promote&lt;/code&gt; ДОЛЖЕН валидировать, что &lt;code&gt;target_library_id&lt;/code&gt; принадлежит тому же &lt;code&gt;account_id&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;promote&lt;/code&gt; ДОЛЖЕН быть идемпотентным для одного &lt;code&gt;RawItem&lt;/code&gt; и НЕ ДОЛЖЕН создавать дубли при retry.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;promote&lt;/code&gt; ДОЛЖЕН сохранять связь с созданной сущностью библиотеки (&lt;code&gt;promoted_content_id&lt;/code&gt; или эквивалент origin-link).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="mapping-правила-promote"&gt;Mapping-правила promote&lt;a class="anchor" href="#mapping-%d0%bf%d1%80%d0%b0%d0%b2%d0%b8%d0%bb%d0%b0-promote"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;Raw:text&lt;/code&gt;&lt;/p&gt;</description></item></channel></rss>