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:
parent
e10e60fc9e
commit
ed43d7d7dc
@ -180,28 +180,30 @@ Objectif: transformer état actuel (partiellement implémenté) vers produit fon
|
||||
|
||||
## 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
|
||||
|
||||
- [ ] Remplacer `lib/email-data.ts` par source serveur paginée.
|
||||
- [ ] Remplacer `lib/contacts/mock-data.ts` et `mock-accounts` par API backend.
|
||||
- [ ] Créer client API unique (baseURL, auth bearer, gestion erreurs, timeout, retry).
|
||||
- [ ] Ajouter couche query/cache (SWR ou TanStack Query).
|
||||
- [ ] Définir contrat TypeScript partagé avec backend (DTOs versionnés).
|
||||
- [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)*
|
||||
- [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)*
|
||||
- [x] Créer client API unique (baseURL, auth bearer, gestion erreurs, timeout, retry). *(frontend: `lib/api/client.ts`, `auth-store.ts`)*
|
||||
- [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). *(frontend: `lib/api/types.ts` aligné API; package monorepo partagé TBD)*
|
||||
|
||||
### 3.2 Mail UI
|
||||
|
||||
- [ ] Brancher liste mails, lecture, flags, labels, delete sur `/api/v1/mail`.
|
||||
- [ ] Brancher compose/send/scheduled sur outbox backend.
|
||||
- [ ] Brancher recherche UI sur backend search (fallback local supprimé).
|
||||
- [ ] Brancher multi-comptes réels (accounts API + switch account effectif).
|
||||
- [ ] Brancher settings (pas page placeholder) avec persistance backend.
|
||||
- [x] Brancher liste mails, lecture, flags, labels, delete sur `/api/v1/mail`. *(frontend: `use-mail-queries` / `use-mail-mutations`, composants liste + vue)*
|
||||
- [x] Brancher compose/send/scheduled sur outbox backend. *(frontend: `use-compose-mutations`, `scheduled-store` outbox)*
|
||||
- [ ] Brancher recherche UI sur backend search (fallback local supprimé). *(frontend: `useMailSearch` → `/mail/search` + fallback cache offline; autocomplete `search-engine` locale conservée)*
|
||||
- [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. *(frontend: `mail-settings-store` local — pas d'endpoint settings backend)*
|
||||
|
||||
### 3.3 Contacts UI
|
||||
|
||||
- [ ] Brancher store contacts sur API contacts.
|
||||
- [ ] Brancher création/édition/suppression/fusion sur backend.
|
||||
- [ ] Brancher import/export vCard/CSV.
|
||||
- [ ] Ajouter état synchronisation + résolution conflits.
|
||||
- [x] Brancher store contacts sur API contacts. *(frontend: `use-contacts-list`, store UI-only `contacts-store.ts`)*
|
||||
- [x] Brancher création/édition/suppression/fusion sur backend. *(frontend: `use-contact-mutations`, pages contacts + `merge-duplicates-view`)*
|
||||
- [x] Brancher import/export vCard/CSV. *(frontend: `import-dialog` → API create; export CSV/vCard client depuis sélection)*
|
||||
- [ ] Ajouter état synchronisation + résolution conflits. *(frontend: bannière sync mail globale seulement — pas conflits CardDAV)*
|
||||
|
||||
### 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
|
||||
|
||||
- [ ] Connecter WS sécurisé.
|
||||
- [ ] Rafraîchir liste/detail sans reload quand events backend arrivent.
|
||||
- [ ] Gérer offline/reconnect/sync status visible.
|
||||
- [ ] Ajouter indicateur santé sync par compte.
|
||||
- [x] Connecter WS sécurisé. *(frontend: `lib/api/ws.ts` token + `since` seq)*
|
||||
- [x] Rafraîchir liste/detail sans reload quand events backend arrivent. *(frontend: invalidation TanStack Query sur events WS)*
|
||||
- [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. *(frontend: barre globale offline/syncing — pas indicateur par compte mail)*
|
||||
|
||||
### 3.6 Accessibilité, i18n, perf
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user