# Sauvegarde continue

> Un snapshot par compte, réécrit au fil des changements de la base locale, avec des écritures conditionnelles pour que deux appareils ne s’écrasent pas en silence. Comment le construire avec s3nd, à quoi faire attention, et le guide complet.

Canonical: https://s3nd.sh/fr/use-cases/continuous-backup · Markdown: https://s3nd.sh/fr/use-cases/continuous-backup.md · English: https://s3nd.sh/use-cases/continuous-backup

Un snapshot par compte, réécrit au fil des changements de la base locale, avec des écritures conditionnelles pour que deux appareils ne s’écrasent pas en silence.

```ts
const current = await store.getSnapshot(`user-${userId}`)

try {
  await store.putSnapshot(`user-${userId}`, merged, { ifMatch: current?.etag })
} catch (error) {
  if (isS3ndError(error) && error.code === 'PRECONDITION_FAILED') {
    // Another device won. Read again, merge again.
  }

  throw error
}
```

## Ce qui se passe vraiment.
### Le problème
Dès que l’app a des comptes, un code de transfert n’a plus la bonne forme. Il y a une session, donc le serveur sait déjà qui demande. Ce que l’utilisateur veut, c’est que ses données survivent à la perte du laptop, sans rien faire.

### Ce que s3nd y fait
Indexez le snapshot par identifiant utilisateur plutôt que par code, et réécrivez-le à chaque changement de la base locale. Passez l’ETag lu en dernier comme ifMatch : un second appareil qui a écrit entre-temps fait échouer l’écriture avec PRECONDITION_FAILED au lieu de jeter silencieusement son travail, et votre app relit et fusionne.

## Les choses faciles à rater.
- **Une règle de cycle de vie différente** — Les sauvegardes ne doivent pas expirer. Gardez-les sous leur propre préfixe pour que la règle qui nettoie les transferts ne puisse pas les atteindre.
- **Temporiser les écritures** — Un snapshot par frappe de touche, c’est une facture. Écrivez sur un minuteur, au changement de visibilité, et avant la fermeture.
- **La fusion vous appartient** — s3nd vous dit que vous avez perdu la course. Décider ce qu’une fusion veut dire pour vos données est du code applicatif, et c’est pour ça que ce n’est pas caché.

Packages: s3nd. [Sauvegarde continue, en détail](https://doc.s3nd.sh/docs/use-cases/continuous-backup)
