feat(standards): fix F11-F16 and rebuild bundle (43 components) + trial findings
- F11 PopulateRule field_name/collection_name corrections - F12 service adaptor update handles PopulatingRepository - F13 nested-references section; F14 authless /users/me guidance - F15 template ruff-clean; F16 stop vendoring .ruff_cache, ship .gitignore - document --template-style in build_recipe/spec_first_routing; refresh collected openapi-first + standards bundle (12 modules, 43 components) - add trial.md and trial_findings.md (F1-F16, re-trial A/B evidence)
This commit is contained in:
@@ -427,6 +427,15 @@
|
||||
</span>
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#nested-references" class="md-nav__link">
|
||||
<span class="md-ellipsis">
|
||||
Nested references
|
||||
</span>
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
@@ -665,6 +674,15 @@
|
||||
</span>
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#nested-references" class="md-nav__link">
|
||||
<span class="md-ellipsis">
|
||||
Nested references
|
||||
</span>
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
@@ -802,10 +820,23 @@ The repository factory selects the right repository flavour.</p>
|
||||
</span><span id="__span-2-6"><a id="__codelineno-2-6" name="__codelineno-2-6"></a> <span class="k">return</span> <span class="n">repo_factory</span><span class="p">(</span>
|
||||
</span><span id="__span-2-7"><a id="__codelineno-2-7" name="__codelineno-2-7"></a> <span class="n">collection</span><span class="o">=</span><span class="s2">"items"</span><span class="p">,</span>
|
||||
</span><span id="__span-2-8"><a id="__codelineno-2-8" name="__codelineno-2-8"></a> <span class="n">document</span><span class="o">=</span><span class="n">ItemDocument</span><span class="p">,</span>
|
||||
</span><span id="__span-2-9"><a id="__codelineno-2-9" name="__codelineno-2-9"></a> <span class="n">populate_rules</span><span class="o">=</span><span class="p">[</span><span class="n">PopulateRule</span><span class="p">(</span><span class="n">field</span><span class="o">=</span><span class="s2">"owner"</span><span class="p">,</span> <span class="n">collection</span><span class="o">=</span><span class="s2">"users"</span><span class="p">)],</span>
|
||||
</span><span id="__span-2-9"><a id="__codelineno-2-9" name="__codelineno-2-9"></a> <span class="n">populate_rules</span><span class="o">=</span><span class="p">[</span><span class="n">PopulateRule</span><span class="p">(</span><span class="n">field_name</span><span class="o">=</span><span class="s2">"owner"</span><span class="p">,</span> <span class="n">collection_name</span><span class="o">=</span><span class="s2">"users"</span><span class="p">)],</span>
|
||||
</span><span id="__span-2-10"><a id="__codelineno-2-10" name="__codelineno-2-10"></a> <span class="n">cache</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="c1"># or a CachedBaseRepository config</span>
|
||||
</span><span id="__span-2-11"><a id="__codelineno-2-11" name="__codelineno-2-11"></a> <span class="p">)</span>
|
||||
</span></code></pre></div></td></tr></table></div>
|
||||
<h2 id="nested-references">Nested references</h2>
|
||||
<p>The wire contract often declares a reference as an expanded object
|
||||
(<code>expense.entity: Entity</code>), while the domain model stays id-free. Pick one
|
||||
convention and apply it consistently:</p>
|
||||
<ul>
|
||||
<li><strong>Embed (default for small, stable refs)</strong> — store the object as a <code>dict</code> /
|
||||
<code>list[dict]</code> on the document; the API returns it verbatim. No populate wiring.</li>
|
||||
<li><strong>Populate</strong> — store an id and declare a <code>PopulateRule</code>; mongo-ops expands it
|
||||
on read. The referenced repo must be registered with the <code>PopulationEngine</code>.</li>
|
||||
<li><strong>Id only</strong> — store the id and let the client resolve it.</li>
|
||||
</ul>
|
||||
<p>For populate-backed repositories change a reference with <code>update</code>, not <code>patch</code>:
|
||||
<code>patch</code> rejects changes to populated FK fields by design.</p>
|
||||
<h2 id="portsservicepy">ports/service.py</h2>
|
||||
<p>The service is built through the DI library, injecting the repository. The
|
||||
generic CRUD base provides <code>create/read/update/patch/delete/search/...</code>.</p>
|
||||
|
||||
Reference in New Issue
Block a user