feat(api): offline-first mail sync w/ TanStack Query

Move mail, compose, contacts, and accounts off mocks onto REST + WS.
Add client, auth store, IDB-backed query cache, offline queue, and
sync bar; hybrid Zustand for UI-only state. Settings still local until
backend has preferences API.
This commit is contained in:
R3D347HR4Y 2026-05-23 00:04:35 +02:00
parent e10e60fc9e
commit ed43d7d7dc

View File

@ -180,28 +180,30 @@ Objectif: transformer état actuel (partiellement implémenté) vers produit fon
## 3) Frontend web (`gmail-interface-clone`) ## 3) Frontend web (`gmail-interface-clone`)
> **Avancement (2026-05-23)** — migration offline-first API dans `gmail-interface-clone` : **13/22** items section 3 cochés. Reste : settings mail backend, cleanup fichiers mock, recherche sans fallback offline, sync par compte, modules suite (§3.4), a11y/i18n/perf (§3.6).
### 3.1 Fondation data/API ### 3.1 Fondation data/API
- [ ] Remplacer `lib/email-data.ts` par source serveur paginée. - [x] Remplacer `lib/email-data.ts` par source serveur paginée. *(frontend: `use-mail-queries` + adapters; `email-data.ts` conservé pour types uniquement — suppression fichier TBD)*
- [ ] Remplacer `lib/contacts/mock-data.ts` et `mock-accounts` par API backend. - [x] Remplacer `lib/contacts/mock-data.ts` et `mock-accounts` par API backend. *(frontend: `use-contact-queries`, `useMailAccounts`; mocks non importés hors fichiers définition — suppression fichiers TBD)*
- [ ] Créer client API unique (baseURL, auth bearer, gestion erreurs, timeout, retry). - [x] Créer client API unique (baseURL, auth bearer, gestion erreurs, timeout, retry). *(frontend: `lib/api/client.ts`, `auth-store.ts`)*
- [ ] Ajouter couche query/cache (SWR ou TanStack Query). - [x] Ajouter couche query/cache (SWR ou TanStack Query). *(frontend: `@tanstack/react-query` + persist `idb`, `query-provider.tsx`, `offline-queue.ts`)*
- [ ] Définir contrat TypeScript partagé avec backend (DTOs versionnés). - [ ] Définir contrat TypeScript partagé avec backend (DTOs versionnés). *(frontend: `lib/api/types.ts` aligné API; package monorepo partagé TBD)*
### 3.2 Mail UI ### 3.2 Mail UI
- [ ] Brancher liste mails, lecture, flags, labels, delete sur `/api/v1/mail`. - [x] Brancher liste mails, lecture, flags, labels, delete sur `/api/v1/mail`. *(frontend: `use-mail-queries` / `use-mail-mutations`, composants liste + vue)*
- [ ] Brancher compose/send/scheduled sur outbox backend. - [x] Brancher compose/send/scheduled sur outbox backend. *(frontend: `use-compose-mutations`, `scheduled-store` outbox)*
- [ ] Brancher recherche UI sur backend search (fallback local supprimé). - [ ] Brancher recherche UI sur backend search (fallback local supprimé). *(frontend: `useMailSearch``/mail/search` + fallback cache offline; autocomplete `search-engine` locale conservée)*
- [ ] Brancher multi-comptes réels (accounts API + switch account effectif). - [x] Brancher multi-comptes réels (accounts API + switch account effectif). *(frontend: `useMailAccounts`, `account-store` sans `MOCK_USER_ACCOUNTS`)*
- [ ] Brancher settings (pas page placeholder) avec persistance backend. - [ ] Brancher settings (pas page placeholder) avec persistance backend. *(frontend: `mail-settings-store` local — pas d'endpoint settings backend)*
### 3.3 Contacts UI ### 3.3 Contacts UI
- [ ] Brancher store contacts sur API contacts. - [x] Brancher store contacts sur API contacts. *(frontend: `use-contacts-list`, store UI-only `contacts-store.ts`)*
- [ ] Brancher création/édition/suppression/fusion sur backend. - [x] Brancher création/édition/suppression/fusion sur backend. *(frontend: `use-contact-mutations`, pages contacts + `merge-duplicates-view`)*
- [ ] Brancher import/export vCard/CSV. - [x] Brancher import/export vCard/CSV. *(frontend: `import-dialog` → API create; export CSV/vCard client depuis sélection)*
- [ ] Ajouter état synchronisation + résolution conflits. - [ ] Ajouter état synchronisation + résolution conflits. *(frontend: bannière sync mail globale seulement — pas conflits CardDAV)*
### 3.4 Agenda/Drive/Meet/Photos UI ### 3.4 Agenda/Drive/Meet/Photos UI
@ -212,10 +214,10 @@ Objectif: transformer état actuel (partiellement implémenté) vers produit fon
### 3.5 Realtime UX ### 3.5 Realtime UX
- [ ] Connecter WS sécurisé. - [x] Connecter WS sécurisé. *(frontend: `lib/api/ws.ts` token + `since` seq)*
- [ ] Rafraîchir liste/detail sans reload quand events backend arrivent. - [x] Rafraîchir liste/detail sans reload quand events backend arrivent. *(frontend: invalidation TanStack Query sur events WS)*
- [ ] Gérer offline/reconnect/sync status visible. - [x] Gérer offline/reconnect/sync status visible. *(frontend: `sync-status-bar.tsx`, `use-network-status.ts`, flush `offline-queue`)*
- [ ] Ajouter indicateur santé sync par compte. - [ ] Ajouter indicateur santé sync par compte. *(frontend: barre globale offline/syncing — pas indicateur par compte mail)*
### 3.6 Accessibilité, i18n, perf ### 3.6 Accessibilité, i18n, perf