# Instantané d’une Base

- Human documentation: [https://docs.univer.ai/fr-FR/guides/bases/model/base-snapshot](https://docs.univer.ai/fr-FR/guides/bases/model/base-snapshot)

- Agent Markdown: [https://docs.univer.ai/fr-FR/guides/bases/model/base-snapshot.md](https://docs.univer.ai/fr-FR/guides/bases/model/base-snapshot.md)

- Requested language: `fr-FR`

- Content language: `fr-FR`

- Documentation version: `1.2.0`

- Source: [bases/model/base-snapshot.fr-FR.mdx](https://github.com/dream-num/documentation/blob/dev/content/guides/bases/model/base-snapshot.fr-FR.mdx)

---

## IBaseSnapshot

`IBaseSnapshot` est le format de persistance utilisé par Univer Bases. Il décrit une unité Base, notamment ses tables, l’ordre de celles-ci, la version du schéma, les horodatages et les métadonnées de révision facultatives.

### Propriétés

| Propriété     | Type                               | Description                                                                                 |
| ------------- | ---------------------------------- | ------------------------------------------------------------------------------------------- |
| id            | `string`                           | Identifiant unique de l’unité Base.                                                         |
| name          | `string`                           | Nom de la Base.                                                                             |
| schemaVersion | `number`                           | Version du schéma de l’instantané.                                                          |
| tables        | `Record\<string, ITableSnapshot\>` | Tables indexées par identifiant de table.                                                   |
| tableOrder    | `string[]`                         | Liste ordonnée des identifiants de tables.                                                  |
| createdAt     | `number`                           | Horodatage de création.                                                                     |
| updatedAt     | `number`                           | Horodatage de mise à jour.                                                                  |
| createdBy?    | `string`                           | Identifiant de l’auteur.                                                                    |
| rev?          | `number`                           | Valeur de révision facultative utilisée par les couches de persistance ou de collaboration. |

## Instantané minimal

```ts
const baseSnapshot = {
  id: 'base-1',
  name: 'Product tracker',
  schemaVersion: 1,
  tableOrder: ['tasks'],
  tables: {
    tasks: {
      id: 'tasks',
      name: 'Tasks',
      primaryFieldId: 'title',
      fieldOrder: ['title', 'status'],
      fields: {
        title: { id: 'title', name: 'Title', type: 'text', config: {} },
        status: { id: 'status', name: 'Status', type: 'singleSelect', config: {} },
      },
      recordOrder: ['rec-1'],
      records: {
        'rec-1': {
          id: 'rec-1',
          values: { title: 'Write docs', status: 'In progress' },
          orderKey: 'a0',
          createdAt: Date.now(),
          updatedAt: Date.now(),
        },
      },
      views: {},
      viewOrder: [],
    },
  },
  createdAt: Date.now(),
  updatedAt: Date.now(),
}
```

## Utilisation

`IBaseSnapshot` sert principalement à :

1. Créer une unité `UniverInstanceType.UNIVER_BASE`.
2. Conserver et restaurer des données structurées.
3. Préparer des données pour leur traitement côté serveur.
4. Transférer des données entre les services de collaboration et les services d’importation et d’exportation.

> [!WARNING]
> Les objets d’instantané sont des données de persistance. Une fois la Base en cours d’exécution, utilisez de préférence les API Facade au lieu de modifier directement l’objet d’instantané.

## Enregistrer et restaurer

Facade `save()` inclut les ressources des plugins enregistrés, comme les tableaux de bord et les commentaires locaux. `saveToBackend` est la fonction de persistance de votre application.

```ts
const base = univerAPI.getActiveBase()
if (!base) throw new Error('Open a Base first')
await saveToBackend(base.save())
```

Dans une nouvelle instance, enregistrez les mêmes plugins avant `univerAPI.createBase(savedSnapshot)`. Ne sauvegardez pas seulement `tables` et ne modifiez pas directement l’instantané du modèle actif.
