- Added new API endpoints for sending, rescheduling, and canceling scheduled outbox messages. - Implemented outbox processing logic to handle attachments and manage message statuses. - Introduced a dead-letter strategy for failed outbox messages, enhancing reliability. - Updated database schema to support new outbox statuses and dead-letter entries. - Enhanced unit tests for outbox functionalities, ensuring robust error handling and validation. - Improved attachment handling in the outbox processor to support inline and regular attachments.
293 lines
12 KiB
Markdown
293 lines
12 KiB
Markdown
# Ulti Suite — Checklist d'exécution complète
|
|
|
|
Objectif: transformer état actuel (partiellement implémenté) vers produit fonctionnel bout en bout.
|
|
|
|
## 0) Gouvernance & alignement docs
|
|
|
|
- [x] Mettre à jour statuts dans `project-plan/README.md` selon réalité code (ne plus marquer "Planifié" ce qui existe déjà en API).
|
|
- [x] Séparer clairement, dans chaque `.md`, ce qui est **déjà implémenté**, **partiel**, **non commencé**.
|
|
- [x] Définir roadmap officielle en 3 phases: MVP fonctionnel, hardening, différenciation IA/automations.
|
|
- [x] Ajouter "Definition of Done" par service (backend, frontend, sécurité, tests, observabilité).
|
|
|
|
### Owners nominaux (pilotage)
|
|
|
|
| Stream | Owner nominal | Backup |
|
|
|---|---|---|
|
|
| Produit / priorisation | `@PO` | `@Lead` |
|
|
| Backend core mail | `@BE-Core` | `@BE-Platform` |
|
|
| Intégrations suite (NC/Jitsi/Immich) | `@BE-Integrations` | `@BE-Core` |
|
|
| Frontend web | `@FE-Lead` | `@FE-App` |
|
|
| Sécurité | `@Security` | `@BE-Platform` |
|
|
| Infra / DevOps / Observabilité | `@DevOps` | `@SRE` |
|
|
| QA / tests e2e | `@QA` | `@FE-App` |
|
|
|
|
|
|
## 1) Fondations transverses (obligatoire avant features)
|
|
|
|
### Auth, identité, permissions
|
|
|
|
- [x] Imposer auth OIDC sur toutes routes privées, sans mode silencieux en prod.
|
|
- [x] Créer middleware de rôles (admin/user/service) et l'appliquer sur `/api/v1/admin`.
|
|
- [x] Mapper comptes Ulti ↔ comptes mail externes avec règles ownership strictes.
|
|
- [x] Ajouter journal d'audit sécurité (login, token rejeté, action admin, suppression critique).
|
|
- [x] Définir modèle permissions commun (read/write/admin) réutilisable Drive/Photos/Contacts/Agenda.
|
|
|
|
### Sécurité secrets & credentials
|
|
|
|
- [x] Chiffrer credentials IMAP/SMTP au repos (AES-GCM + key rotation planifiée).
|
|
- [x] Interdire stockage plaintext secrets dans DB.
|
|
- [x] Centraliser gestion secrets `.env`/runtime pour dev/prod.
|
|
- [x] Ajouter politique rotation secrets (OIDC, SMTP, webhook shared secrets).
|
|
- [x] Ajouter validation stricte inputs (URL webhooks, payload size, MIME, etc.).
|
|
|
|
### Qualité backend
|
|
|
|
- [x] Ajouter couche service claire entre handlers HTTP et accès DB.
|
|
- [x] Uniformiser erreurs API (code, message, details, trace id).
|
|
- [x] Ajouter validations payload complètes sur tous endpoints.
|
|
- [x] Ajouter pagination/filtrage standard partout (contacts, events, files, assets, messages).
|
|
- [x] Ajouter migrations DB manquantes pour besoins réels (indexes, contraintes d'intégrité, FK manquantes).
|
|
|
|
### Observabilité & exploitation
|
|
|
|
- [x] Ajouter request-id/correlation-id dans logs.
|
|
- [x] Ajouter métriques Prometheus (latence, erreurs, jobs sync, queue outbox, webhook success rate).
|
|
- [x] Ajouter health checks détaillés (DB, Redis/KeyDB, Nextcloud, Immich, Jitsi).
|
|
- [x] Ajouter dashboard Grafana baseline.
|
|
- [x] Définir alerting (mail sync bloquée, outbox bloquée, erreurs 5xx anormales).
|
|
|
|
### Tests & CI
|
|
|
|
- [x] Couvrir endpoints critiques par tests d'intégration.
|
|
- [x] Ajouter tests worker IMAP/smtp outbox/rules/webhooks.
|
|
- [x] Ajouter tests de migration DB en CI.
|
|
- [x] Ajouter tests e2e frontend sur parcours clés (lire mail, envoyer, planifier, rechercher).
|
|
- [x] Bloquer merge si tests critiques échouent.
|
|
|
|
## 2) Backend monolithe (`ulti-backend`)
|
|
|
|
### 2.1 API Mail (Ultimail backend)
|
|
|
|
#### Correctifs prioritaires
|
|
|
|
- [x] Corriger logique outbox "scheduled" vs "queued" pour envoi planifié.
|
|
- [x] Vérifier ownership sur `UpdateLabels`, `UpdateFlags`, `DeleteMessage`, `UpdateRule`, `DeleteRule`, `DeleteWebhook`.
|
|
- [x] Corriger flux création utilisateur manquant (external_id OIDC absent -> échec sous-requêtes user_id).
|
|
- [x] Ajouter gestion robuste erreurs SQL (`rows.Scan`, `Exec` result check, `rows.Err`).
|
|
- [x] Corriger cohérence threading (`thread_id`, `references`, `in_reply_to`).
|
|
|
|
#### Implémentation manquante
|
|
|
|
- [x] Endpoint brouillons (create/update/delete/list).
|
|
- [x] Endpoint pièces jointes (upload/download/inline/cid mapping).
|
|
- [x] Endpoint dossiers/labels (CRUD + mapping IMAP flags/folders).
|
|
- [x] Endpoint recherche avancée (filtres expéditeur, date, attachment, label, account).
|
|
- [x] Endpoint identities (alias/from/reply-to/signature par compte).
|
|
|
|
#### Hardening
|
|
|
|
- [x] Limiter taille body/attachments.
|
|
- [x] Sanitizer HTML côté lecture.
|
|
- [x] Protection anti-abus envoi (rate limit, retry backoff, circuit breaker SMTP).
|
|
- [x] Idempotency key sur envoi.
|
|
|
|
### 2.2 Sync IMAP & pipeline mail
|
|
|
|
- [x] Persister état sync incrémental fiable (UIDVALIDITY, MODSEQ, last seen UID).
|
|
- [x] Support suppressions/updates IMAP, pas seulement insert nouveaux messages.
|
|
- [x] Gérer dossiers spéciaux (Sent/Drafts/Trash/Archive/Spam) cross-provider.
|
|
- [x] Extraire et stocker attachments vers object storage.
|
|
- [x] Lancer rules engine à réception et tracer résultats.
|
|
- [x] Déclencher webhooks selon règles matchées.
|
|
- [x] Publier events realtime WS après sync.
|
|
|
|
### 2.3 SMTP / Outbox / Scheduling
|
|
|
|
- [x] Normaliser statuts outbox (`draft`, `queued`, `scheduled`, `sending`, `sent`, `failed`, `cancelled`).
|
|
- [x] Implémenter retries exponentiels + dead-letter strategy.
|
|
- [x] Implémenter "send now", "reschedule", "cancel scheduled".
|
|
- [x] Écrire message envoyé dans dossier Sent (sync cohérente UI).
|
|
- [x] Gérer inline attachments MIME multipart mixed/alternative.
|
|
|
|
### 2.4 Rules & Webhooks
|
|
|
|
- [x] Câbler réellement `rules.Engine` dans pipeline réception.
|
|
- [x] Câbler réellement `webhooks.Executor` depuis actions de règles.
|
|
- [ ] Ajouter simulation/test endpoint "run rule on sample message".
|
|
- [ ] Ajouter templates webhook versionnés + preview rendu variables.
|
|
- [ ] Ajouter signatures webhook (HMAC) + retry + backoff + DLQ.
|
|
- [ ] Ajouter observabilité des exécutions (latence, erreur, payload tronqué).
|
|
|
|
### 2.5 Realtime (`/ws`)
|
|
|
|
- [ ] Remplacer `user_id` query param non sûr par auth token WS.
|
|
- [ ] Ajouter événements typés (mail.created, mail.updated, outbox.updated, contact.updated...).
|
|
- [ ] Ajouter heartbeat/ping/pong.
|
|
- [ ] Gérer reconnexion client + rattrapage delta.
|
|
- [ ] Limiter connexions par user/session.
|
|
|
|
### 2.6 Search
|
|
|
|
- [ ] Finaliser recherche events (Agenda) et contacts (CardDAV), pas fallback users local.
|
|
- [ ] Ajouter recherche multi-index (mail+contacts+files+events) avec score unifié.
|
|
- [ ] Ajouter snippets contextuels et highlighting.
|
|
- [ ] Ajouter filtres type/date/account.
|
|
- [ ] Préparer option Meilisearch/Typesense activable.
|
|
|
|
### 2.7 Modules suite (Drive/Calendar/Contacts/Meet/Photos/Admin)
|
|
|
|
#### Drive
|
|
|
|
- [ ] Ajouter upload chunked gros fichiers.
|
|
- [ ] Ajouter rename/copy/list trash/recent/starred.
|
|
- [ ] Ajouter ACL simplifiées (owner/editor/viewer) mappées correctement.
|
|
- [ ] Ajouter quotas et erreurs métier propres.
|
|
|
|
#### Calendar
|
|
|
|
- [ ] Ajouter update événement + gestion ETag/If-Match.
|
|
- [ ] Ajouter invitations/réponses participants.
|
|
- [ ] Ajouter free/busy endpoint.
|
|
- [ ] Ajouter création lien Meet auto depuis event.
|
|
|
|
#### Contacts
|
|
|
|
- [ ] Ajouter update contact + ETag.
|
|
- [ ] Ajouter sync incrémentale (sync-token).
|
|
- [ ] Ajouter fusion doublons serveur.
|
|
- [ ] Ajouter endpoints enrichissement interactions mail/réunions/fichiers.
|
|
|
|
#### Meet
|
|
|
|
- [ ] Valider claims JWT Jitsi (iss/sub/aud/domain) selon déploiement réel.
|
|
- [ ] Ajouter logique droits modérateur (owner room, policy).
|
|
- [ ] Ajouter enregistrement + stockage Drive.
|
|
- [ ] Ajouter métadonnées sessions (participants, durée, logs).
|
|
|
|
#### Photos
|
|
|
|
- [ ] Corriger mapping API Immich (champs JSON exacts, erreurs HTTP).
|
|
- [ ] Ajouter pagination/tri/filtres robustes.
|
|
- [ ] Ajouter albums CRUD complets.
|
|
- [ ] Ajouter liaison stockage/quota avec Ultidrive.
|
|
|
|
#### Admin
|
|
|
|
- [ ] Ajouter RBAC admin strict.
|
|
- [ ] Ajouter CRUD utilisateurs complet (create/invite/disable/reactivate).
|
|
- [ ] Ajouter quotas multi-service (mail/drive/photos).
|
|
- [ ] Ajouter pages stats exploitables + export audit.
|
|
|
|
## 3) Frontend web (`gmail-interface-clone`)
|
|
|
|
### 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).
|
|
|
|
### 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.
|
|
|
|
### 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.
|
|
|
|
### 3.4 Agenda/Drive/Meet/Photos UI
|
|
|
|
- [ ] Créer shell pages front pour chaque service avec navigation cohérente.
|
|
- [ ] Implémenter workflows MVP: Drive list/upload/download, Agenda list/create event, Meet create/join, Photos list/upload.
|
|
- [ ] Réutiliser patterns UI partagés (toasts, loaders, erreurs, confirmations).
|
|
- [ ] Ajouter permissions UI selon rôle.
|
|
|
|
### 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.
|
|
|
|
### 3.6 Accessibilité, i18n, perf
|
|
|
|
- [ ] Audit a11y (navigation clavier, aria, contraste).
|
|
- [ ] Uniformiser FR/EN i18n.
|
|
- [ ] Réduire payload initial (code splitting, lazy heavy panels).
|
|
- [ ] Mesurer Core Web Vitals et fixer régressions.
|
|
|
|
## 4) Infrastructure & déploiement
|
|
|
|
### Docker/compose/proxy
|
|
|
|
- [ ] Vérifier routes nginx (`/api`, `/ws`, `/cloud`, `/meet`, `/auth`) en env réel.
|
|
- [ ] Ajouter TLS (Let's Encrypt ou reverse proxy dédié) pour prod.
|
|
- [ ] Ajouter limites upload/timeout proxy adaptées gros fichiers.
|
|
- [ ] Ajouter profiles compose clairs (dev, prod, modules optionnels).
|
|
|
|
### Données & backup
|
|
|
|
- [ ] Politique backup PostgreSQL + object storage + Nextcloud.
|
|
- [ ] Test restauration périodique.
|
|
- [ ] Politique rétention logs et audit.
|
|
|
|
### Sécurité runtime
|
|
|
|
- [ ] Durcir containers (users non-root, capabilities minimales, seccomp).
|
|
- [ ] Mettre scan vulnérabilités dépendances/images en CI.
|
|
- [ ] Ajouter CSP/headers sécurité côté frontend + proxy.
|
|
|
|
## 5) Plateformes futures
|
|
|
|
### Desktop (Tauri)
|
|
|
|
- [ ] Initialiser wrapper Tauri.
|
|
- [ ] Gérer auth desktop sécurisée (token storage natif).
|
|
- [ ] Ajouter notifications système.
|
|
- [ ] Ajouter intégration filesystem native (uploads drag/drop large files).
|
|
|
|
### Mobile
|
|
|
|
- [ ] Définir stratégie mobile (PWA avancée vs app native).
|
|
- [ ] Implémenter MVP mobile mail (liste/lecture/compose simple).
|
|
- [ ] Ajouter sync background + notifications push.
|
|
|
|
## 6) Validation "ça fonctionne"
|
|
|
|
### Parcours utilisateur obligatoires
|
|
|
|
- [ ] Connecter compte OIDC, créer compte mail IMAP/SMTP, voir inbox sync.
|
|
- [ ] Lire mail HTML/texte + télécharger pièce jointe.
|
|
- [ ] Envoyer mail immédiat, vérifier réception et dossier Sent.
|
|
- [ ] Planifier envoi, replanifier, envoyer maintenant.
|
|
- [ ] Créer règle (label + webhook), vérifier exécution réelle.
|
|
- [ ] Rechercher mail/contact/event depuis recherche globale.
|
|
- [ ] Créer contact, retrouver en auto-complétion compose.
|
|
- [ ] Créer événement agenda + lien meet + invitation mail.
|
|
- [ ] Upload fichier drive + partage lien.
|
|
|
|
### SLO minima
|
|
|
|
- [ ] API p95 < 300ms hors endpoints lourds.
|
|
- [ ] Échec sync mail < 1% sur 24h.
|
|
- [ ] Taux succès webhook > 99% hors erreurs distantes.
|
|
- [ ] Disponibilité service mensuelle cible >= 99.5%.
|
|
|
|
---
|
|
|
|
## Ordre recommandé d'exécution
|
|
|
|
1. **Blocage critique**: sécurité credentials + auth/rbac + bug outbox scheduled.
|
|
2. **MVP mail réel**: sync IMAP fiable + outbox + UI branchée backend.
|
|
3. **Intégrations suite MVP**: contacts/calendar/drive branchés parcours simples.
|
|
4. **Observabilité + tests**: CI solide, dashboards, alerting.
|
|
5. **Différenciation**: règles avancées, webhooks templates, IA.
|