Types avances
ADDRESS, JSON, COLOR, RATING, IMAGE, DOCUMENTS, CALCULATED, ROLLUP, EXTERNAL_LOOKUP
ADDRESS
Adresse structuree. Type composite : cree 7 colonnes SQL dont une colonne calculee.
| Propriete | Valeur |
|---|---|
| Recherche full-text | Oui (via la colonne formatted) |
Schema SQL : pour un champ address, sept colonnes sont creees :
| Colonne | Type SQL | Description |
|---|---|---|
address_address1 | TEXT | Ligne d'adresse 1 |
address_address2 | TEXT | Ligne d'adresse 2 |
address_city | TEXT | Ville |
address_region | TEXT | Region / Etat |
address_postal_code | TEXT | Code postal |
address_country | TEXT | Pays |
address_formatted | TEXT GENERATED | Adresse formatee (calculee automatiquement) |
La colonne formatted est une colonne calculee (GENERATED ALWAYS AS ... STORED) qui concatene automatiquement les composants non vides, separes par des virgules. Elle est utilisee pour la recherche full-text.
JSON
Donnees JSON libres stockees en JSONB PostgreSQL.
| Propriete | Valeur |
|---|---|
| SQL | JSONB |
| Defaut SQL | DEFAULT '{}'::jsonb |
Operateurs de filtre : is_null, is_not_null
COLOR
Couleur hexadecimale avec selecteur visuel.
| Propriete | Valeur |
|---|---|
| SQL | VARCHAR(7) |
| Indexable | Oui |
| Format | #RRGGBB (ex : #FF0000) |
| Validation | Expression reguliere ^#[0-9A-Fa-f]{6}$ |
RATING
Note sur 5 (affichee en etoiles).
| Propriete | Valeur |
|---|---|
| SQL | SMALLINT |
| Defaut SQL | DEFAULT 0 |
| Indexable | Oui |
| Contraintes | min (defaut : 0), max (defaut : 5) |
Operateurs de filtre : equals, not_equals, greater_than, less_than, greater_equal, less_equal, between, is_null, is_not_null
Fonctions d'agregation : COUNT, COUNT_DISTINCT, PERCENT_FILLED, PERCENT_EMPTY, SUM, AVG, MEDIAN, MIN, MAX, RANGE, STDDEV, VARIANCE, MODE, ANTI_MODE
IMAGE
URL d'image avec apercu visuel.
| Propriete | Valeur |
|---|---|
| SQL | TEXT |
| Contraintes | maxLength (defaut : 2048), format: 'url' |
Operateurs de filtre : is_null, is_not_null
DOCUMENTS
Pieces jointes / fichiers. Stocke un tableau de metadonnees en JSONB.
| Propriete | Valeur |
|---|---|
| SQL | JSONB |
Operateurs de filtre : is_null, is_not_null
Structure de chaque document :
{
"url": "https://...",
"fileName": "facture.pdf",
"fileType": "application/pdf",
"fileSize": 245000,
"storagePath": "org/documents/...",
"uploadedAt": "2026-04-15T10:30:00Z"
}Types de fichiers autorises : PDF, Word, Excel, CSV, PowerPoint, images. Taille max : 10 Mo par fichier.
CALCULATED
Colonne calculee cote base de donnees via une expression SQL.
| Propriete | Valeur |
|---|---|
| SQL | {type_resultat} GENERATED ALWAYS AS ({expression}) STORED |
| Lecture seule | Oui (calculee automatiquement) |
| Triable | Oui |
| Indexable | Oui |
| Recherche | Oui |
Le type SQL de la colonne depend du resultType configure (ex : NUMBER → DOUBLE PRECISION, TEXT → TEXT).
Configuration :
{
computedExpression: "first_name || ' ' || last_name", // Expression SQL
resultType: 'TEXT' // Type du resultat
}Exemple de colonne generee :
"full_name" TEXT GENERATED ALWAYS AS (first_name || ' ' || last_name) STOREDL'expression SQL est executee directement par PostgreSQL. Elle doit referencer des colonnes existantes de la meme table et etre deterministe (IMMUTABLE).
ROLLUP
Champ calcule qui agrege des donnees d'objets lies. Virtuel : pas de colonne en base, calcul au runtime.
| Propriete | Valeur |
|---|---|
| SQL | Aucune colonne (virtuel) |
| Lecture seule | Oui |
{
sourceRelationField: 'contacts', // Champ relation source
targetField: 'amount', // Champ a agreger sur l'objet cible
targetFieldType: 'CURRENCY', // Type du champ cible
rollupFunction: 'SUM' // Fonction d'agregation
}Fonctions d'agregation ROLLUP
Fonctions generales (tous les types de champs) :
| Fonction | Resultat | Description |
|---|---|---|
SHOW_ORIGINAL | meme type | Valeurs brutes |
SHOW_UNIQUE | TEXT | Valeurs uniques |
COUNT_ALL | NUMBER | Nombre total |
COUNT_VALUES | NUMBER | Nombre de valeurs non vides |
COUNT_UNIQUE | NUMBER | Nombre de valeurs uniques |
COUNT_EMPTY | NUMBER | Nombre de valeurs vides |
COUNT_NOT_EMPTY | NUMBER | Nombre de valeurs non vides |
PERCENT_EMPTY | PERCENT | Pourcentage de vides |
PERCENT_NOT_EMPTY | PERCENT | Pourcentage de non-vides |
Fonctions numeriques (NUMBER, INTEGER, DECIMAL, CURRENCY, PERCENT, RATING) :
| Fonction | Resultat | Description |
|---|---|---|
SUM | meme type | Somme |
AVERAGE | DECIMAL (ou CURRENCY) | Moyenne |
MEDIAN | meme type | Mediane |
MIN | meme type | Minimum |
MAX | meme type | Maximum |
RANGE | meme type | Ecart (max - min) |
Fonctions date (DATE, DATETIME) :
| Fonction | Resultat | Description |
|---|---|---|
EARLIEST_DATE | meme type | Date la plus ancienne |
LATEST_DATE | meme type | Date la plus recente |
DATE_RANGE | NUMBER | Ecart en jours |
Fonctions booleennes (BOOLEAN) :
| Fonction | Resultat | Description |
|---|---|---|
COUNT_TRUE | NUMBER | Nombre de true |
COUNT_FALSE | NUMBER | Nombre de false |
PERCENT_TRUE | PERCENT | Pourcentage de true |
Fonctions M2M :
| Fonction | Resultat | Description |
|---|---|---|
SHOW_PRIMARY | meme type | Valeur de l'entree principale (is_primary = true) |
Disponibilite par type de relation
| Relation source | Fonctions disponibles |
|---|---|
BELONGS_TO_ONE | SHOW_ORIGINAL uniquement |
MORPH_RELATION | SHOW_ORIGINAL uniquement |
HAS_MANY | Generales + specifiques au type |
MANY_TO_MANY | Generales + specifiques au type |
EXTERNAL_LOOKUP
Lookup en temps reel vers une base de donnees externe via un connecteur. Permet d'afficher des donnees d'un Supabase ou PostgreSQL externe directement dans Kasar.
| Propriete | Valeur |
|---|---|
| SQL | TEXT (BELONGS_TO_ONE) ou TEXT[] (HAS_MANY) |
Deux modes :
- BELONGS_TO_ONE : stocke un identifiant externe unique (
TEXT) - HAS_MANY : stocke plusieurs identifiants externes (
TEXT[], max configurable, defaut 25)
Configuration :
{
connectorId: 'cred_xxx', // ID du connecteur externe
externalSchema: 'public', // Schema de la table externe
externalTable: 'stripe_invoices', // Table externe
externalPrimaryKey: 'id', // Cle primaire de la table externe
localLookupField: 'email', // Champ local utilise pour la jointure
externalLookupField: 'customer_email', // Champ externe utilise pour la jointure
columns: [ // Colonnes a afficher
{
externalColumn: 'amount',
localAlias: 'Montant facture',
displayType: 'CURRENCY',
aggregation: 'SUM' // Pour HAS_MANY : agregation
},
{
externalColumn: 'created_at',
localAlias: 'Derniere facture',
displayType: 'DATE',
aggregation: 'LATEST_DATE'
}
],
staticFilter: { // Filtre optionnel sur la table externe
field: 'status',
operator: 'eq',
value: 'paid'
},
sortBy: { // Tri optionnel
field: 'created_at',
direction: 'desc'
}
}Chaque colonne configuree cree un champ enfant virtuel en lecture seule, affiche dans le detail de l'enregistrement.