Ce acoperă nivelul de date
Stratul de date al unei aplicații Twenty reprezintă datele pe care aplicația le adaugă într-un spațiu de lucru — noile tipuri de înregistrări pe care le declară, coloanele pe care le adaugă la obiectele existente și modul în care aceste înregistrări se conectează între ele.În această secțiune
Obiectele
defineObject - declara noi tipuri de înregistrări cu propriile lor câmpuri.Extinderea obiectelor
defineField - adaugă câmpuri la obiectele standard sau alte aplicații.Relaţiile
Conexiuni bidirecţionale MANY_TO_ONE / ONE_TO_MANY între obiecte.Tipuri de activitate de cronologie
Definiți evenimentele automate de audit și evenimentele aplicației explicite pentru cronologii înregistrate.Reguli de validare
defineValidationRule — declară condițiile pe care trebuie să le îndeplinească o înregistrare înainte de a putea fi salvată.Entități dintr-o privire
CLI-ul detectează acestea prin analiza AST la momentul build-ului, astfel încât organizarea fișierelor ține de tine — convenția este
src/objects/, src/validation-rules/, src/fields/, src/indexes/, src/timeline-activity-types/ și src/related-record-paths/. UUID-urile stabile universalIdentifier leagă totul în toate implementările.
Indici (opțional)
Aplicațiile pot livra indici împreună cu obiectele lor pentru a menține rapide interogările recurente. Cel mai comun caz este o coloană de status sau o coloană cu cheie străină pe care o citești frecvent.src/indexes/post-card-status.index.ts
Indici unici
defineIndex acceptă isUnique: true atât pentru unicitatea pe o singură coloană, cât și pe mai multe coloane. Aceasta este primitiva recomandată — defineField({ isUnique: true }) este învechită (deprecated) și va fi eliminată într-o versiune viitoare.
Alte constrângeri
- Clauzele
WHEREparțiale rămân sub controlul administratorului — aplicațiile nu le pot declara. - Fiecare obiect este limitat la 10 indici personalizați (indicii proprii ai framework-ului nu se pun la socoteală).
fields în modul în care Postgres ar trebui să îl folosească — coloana din stânga prima, ca într-o agendă telefonică. Indicii nu sunt gratuiți: fiecare scriere în tabel îi actualizează. Adaugă unul doar atunci când ai o interogare care are nevoie de el.
Căi de înregistrări asociate (opțional)
O cale către înregistrări asociate începe pe un obiect și urmează până la trei câmpuri de relație, fiecare pe obiectul la care a ajuns cel precedent. Permisiunile pentru înregistrări folosesc aceste căi pentru a extinde accesul de la o înregistrare la înregistrările sale asociate.- O cale inerentă (
isInherent: true) se aplică ori de câte ori înregistrarea de început poate fi citită, indiferent de modul în care a fost acordat acel acces. Folosiți-o pentru înregistrările care aparțin părintelui lor, cum ar fi atașamentele unui card de postare. - O cale obișnuită se aplică numai atunci când accesul la înregistrarea de început provine direct dintr-un rol, astfel încât spațiile de lucru aleg pe care să se bazeze.
src/related-record-paths/post-card-attachments.related-record-path.ts
secondFieldMetadataUniversalIdentifier și thirdFieldMetadataUniversalIdentifier pentru căi mai lungi. Fiecare salt trebuie să fie o relație activă pe obiectul atins până în acel moment, o cale nu poate vizita același obiect de două ori, iar două căi nu pot folosi aceleași salturi.