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.

Forma e ctx
Section titled “Forma e ctx”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, varsReferencat 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).
Leximi i një flamuri: rregulli i artë
Section titled “Leximi i një flamuri: rregulli i artë”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ë veti | Mbi një model | Mbi një rrugë |
|---|---|---|
readOnly · writeOnly · nullable | timestamps · softDelete (boolean) | idempotent · deprecated (boolean) |
unique · searchable · immutable · pii | Profili operacional (vlera): volumetry · accessPattern · traffic · freshness · sensitivity · retention | cacheSeconds (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.
a) Dizajni e mbart tashmë informacionin
Section titled “a) Dizajni e mbart tashmë informacionin”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.
Kontrata e plotë
Section titled “Kontrata e plotë”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.