# Agenda **Équivalent** : Google Calendar **Statut** : Partiel (API proxy CalDAV) --- ## Résumé Calendrier reproduisant rigoureusement le comportement et l'interface de Google Calendar, potentiellement comme frontend pour la solution CalDAV de Nextcloud. ## État d'implémentation réel (mai 2026) ### Déjà implémenté - API backend montée sous `/api/v1/calendar` (si Nextcloud activé). - Endpoints list calendriers, list événements, create/update/delete événement. - Gestion ETag/If-Match sur update événement. - Endpoint free/busy. - Invitations/réponses participants (ATTENDEE/PARTSTAT). - Création lien Meet depuis événement. - Client CalDAV Nextcloud intégré côté serveur. ### Partiel / incomplet - Recherche globale events pas encore branchée. ### Non commencé - Automatisations événements (webhooks complets, actions programmées). - Expérience agenda frontend de production branchée backend réel. - Intégration avancée meeting/ressources/salles. ## Approche technique Même logique qu'Ultidrive : on reproduit l'UX Google Calendar à l'identique, mais le backend calendrier peut être délégué. ### Option "frontend Nextcloud" L'approche la plus simple : Agenda = **frontend custom pour le backend CalDAV de Nextcloud** : - Nextcloud Calendar gère le stockage, la sync CalDAV, les invitations, la récurrence - Agenda = interface identique à Google Calendar (même stack que le reste de la suite) - Avantage : interopérable avec tout client CalDAV standard (Thunderbird, Apple Calendar, etc.) ### Backend alternatif Si besoin de découpler de Nextcloud : - Serveur CalDAV dédié (Radicale, Baikal, sabre/dav) - Même API CalDAV, juste un backend différent ## Points de différenciation vs Google Calendar - Interface identique à Google Calendar (migration sans friction) - CalDAV natif (interopérable avec tout client standard) - Auto-hébergeable, données sous contrôle - Créneaux de disponibilité partagés publiquement (style Calendly intégré) - Automatisations à la création/modification d'événements (webhooks, notifications custom) - Planification assistée par IA (suggestion de créneaux optimaux selon habitudes) ## Fonctionnalités ### Core - [ ] Événements (titre, description, lieu, participants, récurrence) - [ ] Multi-agendas (perso, pro, partagés) - [ ] Vues jour / semaine / mois / planning - [ ] Invitations et réponses (accepter, refuser, peut-être) - [ ] Rappels et notifications - [ ] Fuseaux horaires ### Collaboration - [ ] Agendas partagés (lecture / écriture / admin) - [ ] Créneaux de disponibilité publics (booking) - [ ] Recherche de créneaux libres entre participants - [ ] Salles et ressources ### Intégration suite - [ ] Événements depuis les mails (invitations .ics dans Ultimail) - [ ] Création automatique de lien Ultimeet - [ ] Pièces jointes depuis Ultidrive - [ ] Contacts comme participants (autocomplétion) ### Automatisations - [ ] Webhooks à la création/modif/suppression d'événements - [ ] Actions programmées (rappels, envoi de docs avant réunion) ## Intégration Nextcloud — étude technique ### APIs CalDAV disponibles (confirmé) Nextcloud utilise sabre/dav comme serveur CalDAV. Les endpoints : | Opération | Méthode | Endpoint | |-----------|---------|----------| | Lister calendriers | PROPFIND | `/remote.php/dav/calendars/{user}/` | | Lister événements | REPORT (calendar-query) | `/remote.php/dav/calendars/{user}/{calendar}/` | | Créer événement | PUT | `.../calendars/{user}/{calendar}/{uid}.ics` | | Modifier événement | PUT | Même (avec If-Match etag) | | Supprimer événement | DELETE | Même | | Sync incrémentale | REPORT (sync-collection) | Via sync-token | | Événements à venir | GET | `/ocs/v2.php/apps/dav/api/v1/events/upcoming` | | Free/busy | POST | `/remote.php/dav/calendars/{user}/outbox/` | ### Fonctionnement - Les événements sont stockés au format iCalendar (.ics) - Support natif : récurrence (RRULE), invitations (ATTENDEE + iMIP), rappels (VALARM) - Sync-token pour synchronisation incrémentale efficace (le client ne recharge que les changements) - Partage de calendriers via OCS ou CalDAV ACL ### Avantages de cette approche 1. **Interopérable immédiatement** — tout client CalDAV (Thunderbird, Apple Calendar, DAVx5 sur Android) fonctionne avec le même backend 2. **Pas de logique calendrier à recoder** — récurrence, fuseaux horaires, invitations : tout est géré par sabre/dav 3. **Notifications serveur** — Nextcloud push notifications pour les rappels même si le frontend n'est pas ouvert 4. **Même instance** que celle utilisée pour Ultidrive → un seul backend à maintenir ### Architecture cible ``` ┌──────────────┐ CalDAV (REPORT, PUT, DELETE) ┌──────────────┐ │ Agenda │─────────────────────────────────────▶│ Nextcloud │ │ (frontend) │ OCS (upcoming events, sharing) │ (PHP-FPM) │ └──────────────┘ └──────────────┘ │ Même instance que celle d'Ultidrive ``` Le frontend Agenda parse les réponses CalDAV (XML/iCalendar) et les affiche dans une UI identique à Google Calendar. Librairie JS recommandée pour parser iCalendar : `ical.js` ou `tsdav` (client CalDAV TypeScript). ## Briques technologiques envisagées | Besoin | Option retenue | Alternatives | |--------|----------------|--------------| | Backend CalDAV | Nextcloud sabre/dav (même instance qu'Ultidrive) | Radicale, Baikal | | Client CalDAV (JS) | tsdav (TypeScript) | ical.js + fetch custom | | Parsing iCalendar | ical.js | — | | Récurrence | rrule.js (expansion côté client) | — | | Auth | Partagée via Ulti Suite (OIDC → NC) | — | | Notifications/rappels | NC push + Service Worker | — |