Cosa copre il livello dati
Il data layer di un’app Twenty è l’insieme dei dati che la tua app aggiunge a uno spazio di lavoro — i nuovi tipi di record che dichiara, le colonne che aggiunge agli oggetti esistenti e come questi record si collegano tra loro.In questa sezione
Objects
defineObject — dichiara nuovi tipi di record con i propri campi.Estendere gli oggetti
defineField — aggiungi campi agli oggetti standard o di altre applicazioni.Relations
Bidirezionale MANY_TO_ONE / connessioni ONE_TO_MANY tra oggetti.Tipi di attività Timeline
Definire gli eventi di audit automatico e gli eventi espliciti delle app per registrare le cronologie.Regole di convalida
defineValidationRule — dichiara le condizioni che un record deve soddisfare prima di poter essere salvato.Entità in sintesi
La CLI rileva questi elementi tramite analisi AST in fase di build, quindi l’organizzazione dei file spetta a te — la convenzione è
src/objects/, src/validation-rules/, src/fields/, src/indexes/, src/timeline-activity-types/ e src/related-record-paths/. Gli UUID universalIdentifier stabili collegano tutto tra le varie distribuzioni.
Indici (facoltativi)
Le app possono distribuire indici insieme ai loro oggetti per mantenere veloci le query ricorrenti. Il caso più comune è una colonna di stato o di chiave esterna che leggi spesso.src/indexes/post-card-status.index.ts
Indici univoci
defineIndex accetta isUnique: true sia per l’univocità a singola colonna sia per quella multi-colonna. Questa è la primitiva consigliata — defineField({ isUnique: true }) è deprecata e verrà rimossa in una futura release.
Altri vincoli
- Le clausole
WHEREparziali restano sotto il controllo dell’amministratore — le app non possono dichiararle. - Ogni oggetto è limitato a 10 indici personalizzati (gli indici propri del framework non contano).
fields nel modo in cui Postgres dovrebbe usarlo — la colonna più a sinistra per prima, come in un elenco telefonico. Gli indici non sono gratuiti: ogni scrittura sulla tabella li aggiorna. Aggiungine uno solo quando hai una query che ne ha bisogno.
Percorsi dei record correlati (opzionale)
Un percorso di record correlato inizia su un oggetto e segue fino a tre campi di relazione, ciascuno sull’oggetto raggiunto dal precedente. Le autorizzazioni dei record utilizzano questi percorsi per estendere l’accesso da un record ai relativi record correlati.- Un percorso intrinseco (
isInherent: true) si applica ogni volta che il record iniziale è leggibile, indipendentemente da come sia stato concesso l’accesso. Usalo per i record che appartengono al relativo elemento padre, come gli allegati di una scheda di post. - Un percorso normale si applica solo quando l’accesso al record iniziale deriva direttamente da un ruolo, quindi gli spazi di lavoro scelgono su quali fare affidamento.
src/related-record-paths/post-card-attachments.related-record-path.ts
secondFieldMetadataUniversalIdentifier e thirdFieldMetadataUniversalIdentifier per percorsi più lunghi. Ogni passaggio deve essere una relazione attiva sull’oggetto raggiunto fino a quel momento, un percorso non può visitare lo stesso oggetto due volte e due percorsi non possono utilizzare gli stessi passaggi.