Salt la conținutul principal

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

card-page-objects
Obiectele
defineObject - declara noi tipuri de înregistrări cu propriile lor câmpuri.
card-page-extending-objects
Extinderea obiectelor
defineField - adaugă câmpuri la obiectele standard sau alte aplicații.
card-page-relations
Relaţiile
Conexiuni bidirecţionale MANY_TO_ONE / ONE_TO_MANY între obiecte.
card-page-timeline
Tipuri de activitate de cronologie
Definiți evenimentele automate de audit și evenimentele aplicației explicite pentru cronologii înregistrate.
card-page-validation-rules
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 WHERE parț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ă).
Ordonează array-ul 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)

Căile către înregistrări asociate sunt în previzualizare: se sincronizează cu aplicația dvs., însă permisiunile pentru înregistrări nu le folosesc încă. După ce sunt aplicate, necesită planul Organization sau unul superior, la fel ca securitatea la nivel de rând.
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
Adăugați 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.
Căutați Application Config sau Roles & Permissions? Acestea descriu aplicația în sine, mai degrabă decât datele pe care le adaugă — se află la Config. Căutați Connections (Linear, GitHub, Slack OAuth)? Acestea există pentru a fi apelate din funcții de logică și se află la Logic.