Get, set, delete
Importakv da twenty-sdk/logic-function. I valori possono essere qualsiasi payload serializzabile in JSON.
src/logic-functions/sync-linear-issues.ts
Ambiti
Ogni voce ha un ambito, passato come opzione a ogni chiamata. L’impostazione predefinita èWORKSPACE.
WORKSPACE(predefinito) — la voce è privata per l’installazione corrente della tua app nel workspace. Ogni workspace che installa l’app ottiene il proprio set indipendente di chiavi. Questo è ciò che ti serve per cache, cursori e stato per workspace.SERVER— la voce è condivisa tra ogni installazione della tua app sul server. Le voci del server si comportano come claim: il valore memorizzato corrisponde sempre al workspaceId che ha richiesto la chiave (omettivaluesusetper richiedere la chiave per il workspace corrente) e solo quel workspace può sovrascriverla o eliminarla. Qualsiasi installazione può leggere la voce.
kv.set genera un’eccezione quando la chiave è già stata richiesta da un altro workspace.
Usalo: metti in cache una chiamata costosa
Un uso tipico consiste nel mettere in cache una risposta lenta o soggetta a limitazione di frequenza da parte di terzi, così che le esecuzioni ripetute la riutilizzino invece di sostenerne il costo ogni volta.src/logic-functions/getExchangeRate.logic-function.ts
Pattern e suggerimenti
- Namespace. Anteponi prefissi alle chiavi per tenere separate le varie aree di interesse —
sync-cursor:linear,cache:exchange-rate:USD:EUR,lock:nightly-report. - Scadenza (TTL). Lo store non ha una scadenza integrata. Archivia un timestamp all’interno del valore (come nell’esempio di cache) e verificalo in lettura oppure cancella le chiavi obsolete da una funzione attivata da cron.
- Cosa archiviare. Qualsiasi valore serializzabile in JSON — numeri, stringhe, array, oggetti. Mantieni ridotte le dimensioni delle voci; questo meccanismo serve per coordinamento e caching, non per grandi blob o file. Per i file, usa un campo
FILESeuploadFile. - Visibilità. Le voci risiedono nel database dell’istanza, non come record di workspace: non vengono mai visualizzate nell’interfaccia utente del workspace, non fanno parte del modello dati della tua app e non richiedono ruoli o autorizzazioni sugli oggetti.
Alternativa: un oggetto store interrogabile
L’archivio integrato è volutamente opaco: le voci non sono record, quindi non puoi sfogliarle nell’interfaccia utente, collegarle ad altri oggetti o filtrarle con query sui record. Quando ti serve una di queste funzionalità — ad esempio un log di sincronizzazione visibile o uno stato per record — definisci invece un piccolo oggetto tecnico con un campokey univoco e un campo value RAW_JSON, e interrogalo tramite il client API tipizzato. Vedi Objects per la reference di defineObject e Data → Unique indexes per applicare l’univocità delle chiavi.
- Definire l’ambito rispetto a un record. Aggiungi una relation dall’oggetto store all’oggetto di destinazione invece di codificare l’id nella chiave.
- Visibilità e autorizzazioni. Le righe risiedono nel database dello spazio di lavoro come qualsiasi altro record, quindi sono interrogabili tramite l’API e rispettano il ruolo della tua app. Per tenere lo store fuori dall’interfaccia principale, escludilo dal tuo navigation menu.
A differenza dell’archivio integrato, un oggetto personalizzato è sempre limitato a un solo workspace — non può condividere voci tra installazioni come fanno le chiavi
SERVER.