ultisuite-backend/project-plan/agenda.md

6.0 KiB

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 événement, delete événement.
  • Client CalDAV Nextcloud intégré côté serveur.

Partiel / incomplet

  • Pas d'update événement avec gestion ETag/If-Match.
  • Pas de free/busy ni gestion complète invitations/réponses participants.
  • 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