KasarKasar Docs
Types de champs

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.

ProprieteValeur
Recherche full-textOui (via la colonne formatted)

Schema SQL : pour un champ address, sept colonnes sont creees :

ColonneType SQLDescription
address_address1TEXTLigne d'adresse 1
address_address2TEXTLigne d'adresse 2
address_cityTEXTVille
address_regionTEXTRegion / Etat
address_postal_codeTEXTCode postal
address_countryTEXTPays
address_formattedTEXT GENERATEDAdresse 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.

ProprieteValeur
SQLJSONB
Defaut SQLDEFAULT '{}'::jsonb

Operateurs de filtre : is_null, is_not_null

COLOR

Couleur hexadecimale avec selecteur visuel.

ProprieteValeur
SQLVARCHAR(7)
IndexableOui
Format#RRGGBB (ex : #FF0000)
ValidationExpression reguliere ^#[0-9A-Fa-f]{6}$

RATING

Note sur 5 (affichee en etoiles).

ProprieteValeur
SQLSMALLINT
Defaut SQLDEFAULT 0
IndexableOui
Contraintesmin (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.

ProprieteValeur
SQLTEXT
ContraintesmaxLength (defaut : 2048), format: 'url'

Operateurs de filtre : is_null, is_not_null

DOCUMENTS

Pieces jointes / fichiers. Stocke un tableau de metadonnees en JSONB.

ProprieteValeur
SQLJSONB

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.

ProprieteValeur
SQL{type_resultat} GENERATED ALWAYS AS ({expression}) STORED
Lecture seuleOui (calculee automatiquement)
TriableOui
IndexableOui
RechercheOui

Le type SQL de la colonne depend du resultType configure (ex : NUMBERDOUBLE PRECISION, TEXTTEXT).

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) STORED

L'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.

ProprieteValeur
SQLAucune colonne (virtuel)
Lecture seuleOui
{
  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) :

FonctionResultatDescription
SHOW_ORIGINALmeme typeValeurs brutes
SHOW_UNIQUETEXTValeurs uniques
COUNT_ALLNUMBERNombre total
COUNT_VALUESNUMBERNombre de valeurs non vides
COUNT_UNIQUENUMBERNombre de valeurs uniques
COUNT_EMPTYNUMBERNombre de valeurs vides
COUNT_NOT_EMPTYNUMBERNombre de valeurs non vides
PERCENT_EMPTYPERCENTPourcentage de vides
PERCENT_NOT_EMPTYPERCENTPourcentage de non-vides

Fonctions numeriques (NUMBER, INTEGER, DECIMAL, CURRENCY, PERCENT, RATING) :

FonctionResultatDescription
SUMmeme typeSomme
AVERAGEDECIMAL (ou CURRENCY)Moyenne
MEDIANmeme typeMediane
MINmeme typeMinimum
MAXmeme typeMaximum
RANGEmeme typeEcart (max - min)

Fonctions date (DATE, DATETIME) :

FonctionResultatDescription
EARLIEST_DATEmeme typeDate la plus ancienne
LATEST_DATEmeme typeDate la plus recente
DATE_RANGENUMBEREcart en jours

Fonctions booleennes (BOOLEAN) :

FonctionResultatDescription
COUNT_TRUENUMBERNombre de true
COUNT_FALSENUMBERNombre de false
PERCENT_TRUEPERCENTPourcentage de true

Fonctions M2M :

FonctionResultatDescription
SHOW_PRIMARYmeme typeValeur de l'entree principale (is_primary = true)

Disponibilite par type de relation

Relation sourceFonctions disponibles
BELONGS_TO_ONESHOW_ORIGINAL uniquement
MORPH_RELATIONSHOW_ORIGINAL uniquement
HAS_MANYGenerales + specifiques au type
MANY_TO_MANYGenerales + 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.

ProprieteValeur
SQLTEXT (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.

On this page