Aller au contenu

Konteksti i template-it

Kur gjeneroni kod, Restorm ia kalon të gjithë dizajnin tuaj template-it në formën e një objekti ctx. Modelet tuaja, enum-et tuaja, rrugët tuaja dhe sidomos qëllimet e tyre (searchable, PII, cache, dhe gjithë profilin operacional të modelit: volumetria, profili i qasjes, trafiku, freskia, ndjeshmëria, ruajtja) janë aty — një template i lexon ato për të vendosur çfarë të gjenerojë. S’ka nevojë për një variabël për këtë: informacionet që ju keni futur tashmë në dizajn janë drejtpërdrejt të disponueshme.

Skeda Code generation e një vetie: flamurët dhe variablat e saj të lexuara nga template-i

ctx
├─ design # name, version, description, basePath, defaultAuth, vars
├─ enums[] # name, description, values[]
├─ models[] # name, description, inherits, identifier, timestamps, softDelete,
│ # volumetry, accessPattern, traffic, freshness, sensitivity,
│ # retention, properties[], allProperties[], examples[], vars
└─ groups[] # name, basePath, versionPrefix, headers[], routes[]
└─ routes[] # method, path, fullPath, params[], body, responses[],
# auth, pagination, cacheSeconds, idempotent, deprecated, vars

Referencat bëhen sipas emrit (kurrë sipas identifikuesit të brendshëm): property.enum është emri i enum-it, property.references.model emri i modelit të synuar, model.inherits emri i prindit. Mbi një model, properties[] liston vetitë e tij të veta (për deklarimin e tipit) dhe allProperties[] vetitë të veta + të trashëguara, të sheshuara (për një instancë të plotë: të dhëna shembulli, kolona SQL, trup kërkese).

Flamurët boolean janë të pranishëm në ctx vetëm kur janë të aktivizuar. Motori renderon në StrictUndefined: duhet pra të testoni praninë e çelësit, kurrë vlerën e tij.

{# ✅ correct — on teste la présence #}
{% if 'searchable' in p %}INDEX({{ p['name'] }}){% endif %}
{# ❌ faux — lève une erreur quand le flag est absent #}
{% if p.searchable %}…{% endif %}

Vetëm property.required (boolean) dhe route.auth (enumeracion) janë gjithmonë të pranishëm. Flamurët e tjerë boolean janë « i pranishëm = i vërtetë »; fushat me vlerë (volumetria, profili operacional, cache-i…) mbartin vlerën e tyre kur janë të plotësuara, dhe janë të munguara përndryshe — i njëjti rregull prania.

Mbi një vetiMbi një modelMbi një rrugë
readOnly · writeOnly · nullabletimestamps · softDelete (boolean)idempotent · deprecated (boolean)
unique · searchable · immutable · piiProfili operacional (vlera): volumetry · accessPattern · traffic · freshness · sensitivity · retentioncacheSeconds (numër) · pagination (objekt)

Vlerat e profilit operacional të një modeli: accessPattern (readHeavy / writeHeavy / balanced / appendOnly), traffic (low / medium / high), freshness (strong / shortCache / longCache), sensitivity (public / internal / confidential / pii), retention (permanent / archivable / ephemeral), volumetry (hundreds / tenThousands / millions).

Shembull: vënia në cache e të dhënave me kërkesë të lartë leximi

Section titled “Shembull: vënia në cache e të dhënave me kërkesë të lartë leximi”

Dy raste, sipas asaj nëse informacioni ekziston tashmë në dizajn apo jo.

Nëse keni plotësuar një kohëzgjatje cache mbi një rrugë, ajo arrin në route['cacheSeconds']; route['idempotent'] ju thotë se ajo është e sigurt për t’u vënë në cache (vetëm-lexim):

{% for group in ctx['groups'] %}
{% for route in group['routes'] %}
{% if 'cacheSeconds' in route and 'idempotent' in route %}
// {{ route['method'] }} {{ route['fullPath'] }}
app.use("{{ route['fullPath'] }}", cache({{ route['cacheSeconds'] }}));
{% endif %}
{% endfor %}
{% endfor %}

b) « Kërkesa e lartë leximi » është një fushë native e modelit

Section titled “b) « Kërkesa e lartë leximi » është një fushë native e modelit”

S’ka nevojë për variabël: « kërkesa e lartë leximi » është drejtpërdrejt profili i qasjes i modelit. Në cilësimet e modelit, grupi Profili operacional, ju zgjidhni Lecture dominante — template-i e lexon në model['accessPattern']. Kombinojeni me model['freshness'] (toleranca ndaj freskisë) për të vendosur nëse duhet vënë në cache, dhe për sa kohë:

{% for model in ctx['models'] %}
{% if model['accessPattern'] == 'readHeavy' and model['freshness'] != 'strong' %}
{% set ttl = 3600 if model['freshness'] == 'longCache' else 60 %}
registerCache("{{ model['name'] }}", {{ ttl }}); // cache activé ({{ ttl }}s)
{% endif %}
{% endfor %}

Vini re testin != 'strong': një model në kërkesë të lartë leximi por në koherencë të fortë nuk duhet vënë në cache. Ky është gjithë interesi i të pasurit të dyja qëllimet krah për krah në dizajn.

Rezervojini variablat e gjenerimit për atë që dizajni nuk e mbart tashmë (një cilësim specifik i template-it): qëllimet e biznesit — volumetria, profili i qasjes, trafiku, freskia, ndjeshmëria, ruajtja — janë fusha native të modelit.

Ky kontekst është i versionuar (ctx['contextVersion']) dhe përshkruhet shterueshëm nga një JSON-Schema i dorëzuar në depozitën e aplikacionit (docs/contributing/design-codegen-context.schema.json) — kopjojeni në template-in tuaj që CI-ja e tij të validojë kontekstin e referencës. Një agjent IA merr të njëjtën kontratë në çast nëpërmjet mjetit MCP get_design_template_contract.