Commit Graph
33 Commits
Author SHA1 Message Date
m 0536fca6c3 feat(mobile): identité user-first — login/password, SecureStore, scoping par compte
- api: DeviceRegistration device-only, login/changePassword/resolveUser, interception 401 (purge) exonérée sur le login ; type User aligné sur le fil (is_admin)
- SecureStore (expo-secure-store v57) : token + profil, jamais en SQLite ; miroir active_user_id
- AuthContext : statut loading/signedOut/signedIn, bootstrap register→restore, signIn/signOut, garde-fou switch de compte
- app/login.tsx + gate de routes dans _layout (Redirect signedOut) ; i18n fr/en
- DB v5 : user_id sur pending_operations + resource_permissions (UNIQUE par user), repos scopés (user_id IS ? OR IS NULL)
- syncOutbox : delta permissions par compte (Map), outbox poussée du compte actif uniquement
- tests: register/login/401/resolve/changePassword, scoping outbox+permissions, migrations v5 ; e2e live revert register→login admin
2026-09-10 21:34:34 +02:00
m 197c7db8a9 feat(mobile): boucle sync client↔serveur — outbox push + snapshot permissions
- api/types.ts : SyncOperation, SyncResult (sémantique `applied` = INDEX documentée),
  ResourcePermission (miroir docs/api-v1.md §6, consommé tel quel par saveResourcePermission)
- api/client.ts : syncOps (POST /sync/ops), getSyncPermissions (GET /sync/permissions?after=),
  hasAuthToken() ; INVALID_RESPONSE documenté dans docs/api-v1.md §1/§4
- services/db/repositories/pendingOps.ts : listQueuedOperations(limit) (batch FIFO due)
  + scheduleRetries(ids, retryAt) qui ne modifie JAMAIS attempts (erreur transitoire,
  contrairement à markPendingOperation('failed') qui incrémente + backoff)
- features/syncOutbox.ts (nouveau) :
  * pushPendingOps : batch ≤ SYNC_BATCH_SIZE (50) → ops [0, applied) passent 'completed' ;
    op à l'index applied refusée → 'failed' (backoff, dead-letter MAX_PENDING_ATTEMPTS) ;
    ops suivantes intactes (re-soumission) ; réseau/5xx → scheduleRetries (retried) sans
    dead-letter prématurée ; applied==0 && failed → rien commité, aucun compteur touché
  * refreshPermissions : delta monotone en mémoire lastPermissionCachedAt → `after`,
    upsert saveResourcePermission ; no-op sans token
- features/syncDevice.ts : le tick useSyncDevice() enchaîne SAF walk → pushPendingOps()
  → refreshPermissions(), tous deux gardés par hasAuthToken()
- tests/syncOutbox.test.ts : 12 cas (FIFO/limit, succès complet/partiel, applied=0,
  transitoire réseau + 5xx sans incrément, dead-letter après MAX_PENDING_ATTEMPTS,
  delta snapshot croisé) — npm run test:sync
- tests/e2e.live.test.ts : smoke real backend (register → push → relecture /files/folders →
  snapshot), skip si serveur down, SORTI de npm test via npm run test:e2e
- gates : npx tsc --noEmit + npm run test → 56/56 verts (24 db + 20 api + 12 sync)
2026-09-10 20:23:55 +02:00
m caa6e6483c feat(api): /devices register + paseto v4 (middleware Bearer, bootstrap mobile du token) 2026-09-10 07:25:11 +02:00
m 85b1871c18 part ok 2026-09-10 06:39:25 +02:00
m 7dd29239b7 sqlite local 2026-09-09 23:12:15 +02:00
m e1360c19a2 add sqlite 2026-09-09 22:50:05 +02:00
m d839bbdf70 saf + sqlite 2026-09-09 22:31:20 +02:00
m b671a222a5 local storage add add folders 2026-09-09 22:04:33 +02:00
m ce966e67c5 distant storage 2026-09-09 21:55:51 +02:00
m 2e01484383 saf directory 2026-09-09 18:40:39 +02:00
m 2ba837bcb0 from scratch 2026-09-09 18:23:01 +02:00
m 479c8ab61c use auto sync 2026-08-29 09:31:53 +02:00
m bb78d6ac95 remove picture read access 2026-08-28 23:08:52 +02:00
m 523454fe91 add list view 2026-08-28 23:03:35 +02:00
m f4024c8aae add pending actions 2026-08-26 17:29:10 +02:00
m 4602f1da79 get local files 2026-08-25 17:48:47 +02:00
m a791df26bf fix sync 2026-08-25 17:04:17 +02:00
m 7e7d669d63 delete files etc .. 2026-07-29 23:30:53 +02:00
m 881767cfec page + upload queue + folders 2026-07-29 22:16:47 +02:00
m 470474011d display folders 2026-07-29 21:58:52 +02:00
m fe4fb6020e background upload 2026-07-29 19:33:20 +02:00
m 00084758bf background fetch 2026-07-29 19:24:13 +02:00
m 3d63dc1987 sse implémentaton 2026-07-29 19:08:22 +02:00
m e8a5c02620 fix files details 2026-07-29 18:14:35 +02:00
m 7cc425d28b fix server location on device registration 2026-07-28 21:45:02 +02:00
m 7af44152d7 sync details contain bugs 2026-07-28 21:21:08 +02:00
m 9c699446dc migrate mobile with new endpoints 2026-07-28 20:28:32 +02:00
m cae6c4d72d sqlite database 2026-07-28 00:16:31 +02:00
m e8ceb99a5d display files with cache image 2026-07-27 23:02:09 +02:00
m c5a959a27b sync files 2026-07-27 22:13:13 +02:00
m cb9cea6ff3 sync files 2026-07-27 21:44:57 +02:00
m 5c85ffa5fe add files listing 2026-07-27 20:50:23 +02:00
m 0cc261105a load local files 2026-07-27 15:52:51 +02:00