
# Actions d'enregistrement et de fichier

La famille `record` lit et écrit des enregistrements de table (unitaire et par lots). La famille `file` effectue des opérations de stockage — upload, download, génération et transformation.

## Record — CRUD de table

Les operators couvrent le CRUD ligne par ligne ainsi que les opérations par lots. Les lectures/mises à jour/suppressions utilisent un `filter` de [groupe de conditions](/fr/docs/automation-flow-control) ; les créations/mises à jour portent une carte `data`. Les operators par lots itèrent sur un tableau `items` (un gabarit se résolvant en une liste).

| Operator      | Props                                                  | Description                                                                  |
| ------------- | ------------------------------------------------------ | ---------------------------------------------------------------------------- |
| `create`      | `table`, `data`                                        | Insère un enregistrement.                                                    |
| `read`        | `table`, `filter`                                      | Lit les enregistrements correspondant au filtre.                             |
| `update`      | `table`, `data`, `filter`                              | Met à jour les enregistrements correspondant au filtre.                      |
| `delete`      | `table`, `filter`                                      | Supprime en douceur les enregistrements correspondant au filtre.             |
| `upsert`      | `table`, `data`, `filter`                              | Met à jour si une correspondance existe, sinon crée.                         |
| `batchCreate` | `table`, `items`, `batchSize?`, `continueOnItemError?` | Insère plusieurs enregistrements à partir d'un tableau.                      |
| `batchUpdate` | `table`, `items`, `batchSize?`, `continueOnItemError?` | Met à jour plusieurs enregistrements à partir d'un tableau.                  |
| `batchUpsert` | `table`, `items`, `batchSize?`, `continueOnItemError?` | Upsert de plusieurs enregistrements à partir d'un tableau.                   |
| `batchDelete` | `table`, `filter`, `limit?`                            | Supprime les enregistrements correspondant au filtre (plafonné par `limit`). |

```yaml
- name: logActivity
  type: record
  operator: create
  props:
    table: activity_log
    data:
      action: 'order.created'
      order_id: '{{trigger.data.id}}'
      occurred_at: '{{now}}'
```

```yaml
- name: importRows
  type: record
  operator: batchCreate
  props:
    table: contacts
    items: '{{parseLeads.result}}'
    batchSize: 100
    continueOnItemError: true
```

:::callout
**Les actions d'enregistrement respectent les permissions de table et la suppression en douceur.** Les écritures passent par le même RBAC et la même validation que l'[API d'enregistrements](/fr/docs/records-overview) ; `delete` est doux par défaut (définit `deleted_at`). Voir [Permissions de table](/fr/docs/table-permissions) et [CRUD d'enregistrements](/fr/docs/records-crud).
:::

## File — Opérations de stockage

Quatorze operators couvrant le stockage, les métadonnées/accès, la génération et les transformations avancées. Ils opèrent sur le stockage configuré de Sovrium (local ou S3) — voir [Opérations sur fichiers](/fr/docs/file-operations).

### Stockage

| Operator   | Props                             | Description                              |
| ---------- | --------------------------------- | ---------------------------------------- |
| `upload`   | `source`, `path?`, `contentType?` | Téléverse un fichier vers le stockage.   |
| `download` | `key`                             | Télécharge un fichier stocké par sa clé. |
| `delete`   | `key`                             | Supprime un fichier stocké.              |
| `copy`     | `source`, `destination`           | Copie un fichier stocké.                 |
| `move`     | `source`, `destination`           | Déplace/renomme un fichier stocké.       |
| `list`     | `prefix`, `limit?`                | Liste les fichiers sous un préfixe.      |

### Métadonnées et accès

| Operator      | Props                             | Description                                                                                              |
| ------------- | --------------------------------- | -------------------------------------------------------------------------------------------------------- |
| `getMetadata` | `key`                             | Lit les métadonnées d'un fichier (taille, type de contenu, …).                                           |
| `signUrl`     | `key`, `expiresIn?`, `operation?` | Génère une URL signée à durée limitée (`download` / `upload`). Voir [URL signées](/fr/docs/signed-urls). |

### Génération

| Operator      | Props                                                                                    | Description                                               |
| ------------- | ---------------------------------------------------------------------------------------- | --------------------------------------------------------- |
| `generatePdf` | `template`, `filename`, `data?`, `pageSize?`, `orientation?`, `margins?`, `destination?` | Rend un gabarit HTML en PDF (`A4`/`A3`/`Letter`/`Legal`). |
| `generateCsv` | `data`, `filename`, `columns?`, `delimiter?`, `includeHeaders?`, `destination?`          | Génère un CSV à partir d'un tableau.                      |

### Avancé

| Operator         | Props                                                                                 | Description                                                                                                                 |
| ---------------- | ------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- |
| `parseCsv`       | `source`, `columns?`, `skipRows?`, `delimiter?`                                       | Analyse un fichier CSV en un tableau de lignes.                                                                             |
| `extractText`    | `source`, `format?`                                                                   | Extrait le texte d'un document (`plain` / `markdown`).                                                                      |
| `transformImage` | `source`, `width?`, `height?`, `fit?`, `format?`, `quality?`, `crop?`, `destination?` | Redimensionne/convertit une image (`jpeg`/`png`/`webp`/`avif`). Voir [Transformations d'images](/fr/docs/image-transforms). |
| `compress`       | `files`, `filename`, `destination?`                                                   | Compresse plusieurs fichiers en une seule archive.                                                                          |

```yaml
- name: invoice
  type: file
  operator: generatePdf
  props:
    template: invoice-template
    filename: 'invoice-{{trigger.data.id}}.pdf'
    data: '{{trigger.data}}'
    pageSize: A4
    orientation: portrait
    destination: invoices/
```

```yaml
- name: thumbnail
  type: file
  operator: transformImage
  props:
    source: '{{upload.result.key}}'
    width: 320
    fit: cover
    format: avif
    quality: 70
```

:::callout
**Transformations d'images éco-responsables.** Privilégiez `avif` et la livraison différée pour les images générées ; le transcodage d'images est régi par la variable d'environnement `ECO_IMAGE_FORMAT` contrôlée par l'opérateur. Voir [Transformations d'images](/fr/docs/image-transforms).
:::

## Pages connexes

- [Vue d'ensemble des enregistrements](/fr/docs/records-overview) — le modèle de données et l'API des enregistrements.
- [CRUD d'enregistrements](/fr/docs/records-crud) — le contrat create/read/update/delete.
- [Opérations sur fichiers](/fr/docs/file-operations) — la couche de stockage derrière les actions de fichier.
- [URL signées](/fr/docs/signed-urls) — liens d'accès à durée limitée.
- [Transformations d'images](/fr/docs/image-transforms) — traitement d'images à la volée.
