# Base Snapshot

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

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

- Requested language: `es-ES`

- Content language: `es-ES`

- Documentation version: `1.2.0`

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

---

## IBaseSnapshot

`IBaseSnapshot` es el formato de persistencia utilizado por Univer Bases. Describe una unidad base, incluidas tablas, orden de las tablas, versión del esquema, marcas de tiempo y metadatos de revisión opcionales.

### Propiedades

| Propiedad     | Tipo                               | Descripción                                                                        |
| ------------- | ---------------------------------- | ---------------------------------------------------------------------------------- |
| id            | `string`                           | Id. único de la unidad base.                                                       |
| name          | `string`                           | Nombre base.                                                                       |
| schemaVersion | `number`                           | Versión del esquema de instantánea.                                                |
| tables        | `Record\<string, ITableSnapshot\>` | Tablas codificadas por ID de tabla.                                                |
| tableOrder    | `string[]`                         | Lista ordenada de tablas ids.                                                      |
| createdAt     | `number`                           | Marca de tiempo de creación.                                                       |
| updatedAt     | `number`                           | Marca de tiempo de actualización.                                                  |
| createdBy?    | `string`                           | Id. del creador.                                                                   |
| rev?          | `number`                           | Valor de revisión opcional utilizado por las capas de persistencia o colaboración. |

## Instantánea mínima

```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(),
}
```

## Uso

`IBaseSnapshot` se utiliza principalmente para:

1. Crear una unidad `UniverInstanceType.UNIVER_BASE`.
2. Persistir y restaurar datos estructurados.
3. Preparar datos para el procesamiento del lado del servidor.
4. Transferir datos entre servicios de colaboración y de importación/exportación.

> [!WARNING]
> Los objetos instantáneos son datos de persistencia. Después de ejecutar una Base, prefiera las API de Facade en lugar de mutar el objeto de instantánea directamente.

## Guardar y restaurar

Facade `save()` incluye recursos de los plugins registrados, como paneles y comentarios locales. `saveToBackend` es la función de persistencia de su aplicación.

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

En una instancia nueva, registre los mismos plugins antes de llamar a `univerAPI.createBase(savedSnapshot)`. No guarde solo `tables` ni modifique directamente la instantánea del modelo activo.
