# Contacts

**Équivalent** : Google Contacts
**Statut** : Partiel (API proxy CardDAV)

---

## Résumé

Carnet d'adresses unifié partagé entre tous les services Ulti Suite. Gère les contacts personnels, professionnels, groupes, et synchronisation avec sources externes (CardDAV, Google, etc.).

## État d'implémentation réel (mai 2026)

### Déjà implémenté

- API backend montée sous `/api/v1/contacts` (si Nextcloud activé).
- Endpoints list carnets, list contacts, create contact, delete contact, search.
- Client CardDAV Nextcloud intégré côté serveur.

### Partiel / incomplet

- Pas d'update contact avec ETag.
- Pas de sync incrémentale via sync-token.
- Recherche globale suite ne s'appuie pas encore pleinement sur CardDAV.

### Non commencé

- Import/export vCard et CSV côté API produit final.
- Fusion de doublons côté backend.
- Enrichissement interactions (mails/réunions/fichiers) en API contact.

## Points de différenciation vs Google Contacts

- Carnet unifié cross-services natif (mail, agenda, meet, drive)
- Import/export CardDAV bidirectionnel
- Champs personnalisés illimités et typés
- Fusion intelligente de doublons (IA-assistée)
- Tags et groupes dynamiques (filtres auto-mis à jour)

## Fonctionnalités

### Core
- [ ] CRUD contacts (nom, emails, téléphones, adresses, organisations)
- [ ] Groupes / étiquettes
- [ ] Photo de profil
- [ ] Champs personnalisés
- [ ] Historique d'interactions (derniers mails, réunions, fichiers partagés)

### Sync & import
- [ ] Import/export vCard, CSV
- [ ] Sync CardDAV bidirectionnelle
- [ ] Import depuis Google Contacts
- [ ] Détection et fusion de doublons
- [ ] Auto-complétion depuis l'historique mail

### Intégration suite
- [ ] Suggestions dans Ultimail (compose, destinataires)
- [ ] Disponibilité agenda dans la fiche contact
- [ ] Fichiers partagés (Ultidrive) dans la fiche
- [ ] Lien direct vers Ultimeet

## Intégration Nextcloud — étude technique

### APIs CardDAV disponibles (confirmé)

Même instance Nextcloud qu'Ultidrive et Agenda. Endpoints :

| Opération | Méthode | Endpoint |
|-----------|---------|----------|
| Lister carnets | PROPFIND | `/remote.php/dav/addressbooks/users/{user}/` |
| Lister contacts | REPORT (addressbook-query) | `.../addressbooks/users/{user}/{book}/` |
| Créer contact | PUT | `.../addressbooks/users/{user}/{book}/{uid}.vcf` |
| Modifier contact | PUT | Même (avec If-Match etag) |
| Supprimer contact | DELETE | Même |
| Sync incrémentale | REPORT (sync-collection) | Via sync-token |
| Recherche | REPORT (addressbook-query) | Filtres sur FN, EMAIL, TEL, ORG, etc. |

### Champs indexés (recherche rapide)

BDAY, UID, N, FN, TITLE, ROLE, NOTE, NICKNAME, ORG, CATEGORIES, EMAIL, TEL, IMPP, ADR, URL, GEO, CLOUD, X-SOCIALPROFILE

### Avantages

- Carnet d'adresses système auto-populé avec tous les utilisateurs NC
- Partage de carnets entre utilisateurs
- Interopérable avec clients CardDAV (Apple Contacts, DAVx5, Thunderbird)
- Même backend que fichiers et calendrier → une seule instance à maintenir

## Briques technologiques envisagées

| Besoin | Option retenue | Alternatives |
|--------|----------------|--------------|
| Backend CardDAV | Nextcloud sabre/dav (même instance) | Radicale, Baikal |
| Client CardDAV (JS) | tsdav (TypeScript) | fetch + XML custom |
| Parsing vCard | vcard4 ou ical.js | — |
| Recherche avancée | Meilisearch (indexation custom) | NC search intégré |
| Auth | Partagée via Ulti Suite (OIDC → NC) | — |
