Files
sbbb/docs/PR_SPLIT_PLAN.md

197 lines
5.5 KiB
Markdown
Raw Normal View History

# Plan : Découpage en plusieurs PRs
## Contexte
- **24 commits** depuis `main`
- **158 fichiers** modifiés (+16,943 / -10,848 lignes)
- Travail accumulé sans découpage en PRs
---
## Stratégie
Créer **5-6 branches** depuis `main`, chacune avec des commits logiques,
puis créer une PR pour chaque branche.
**Approche technique :**
1. Rester sur `poc/event-calendar` (branche actuelle de travail)
2. Pour chaque PR : créer une nouvelle branche depuis `main`, copier les
fichiers pertinents depuis `poc/event-calendar`, commiter
---
## Découpage proposé (6 PRs)
### PR 1 : Backend - Invitations CalDAV avec emails
**Branche** : `feat/caldav-invitations`
**Fichiers :**
- `docker/sabredav/src/AttendeeNormalizerPlugin.php`
- `docker/sabredav/src/HttpCallbackIMipPlugin.php`
- `docker/sabredav/server.php`
- `docker/sabredav/sql/pgsql.calendars.sql`
- `src/backend/core/services/calendar_invitation_service.py`
- `src/backend/core/api/viewsets_caldav.py`
- `src/backend/core/templates/emails/calendar_invitation*.html/txt`
- `src/backend/calendars/settings.py`
- `env.d/development/backend.defaults`
- `env.d/development/caldav.defaults`
- `compose.yaml`
**Description PR** : Ajout du scheduling CalDAV (iTIP) avec envoi d'emails
pour les invitations, mises à jour et annulations.
---
### PR 2 : Frontend - Refactoring CalDavService et helpers
**Branche** : `refactor/caldav-service`
**Fichiers :**
- `features/calendar/services/dav/CalDavService.ts`
- `features/calendar/services/dav/EventCalendarAdapter.ts`
- `features/calendar/services/dav/caldav-helpers.ts`
- `features/calendar/services/dav/helpers/*.ts`
- `features/calendar/services/dav/types/*.ts`
- `features/calendar/services/dav/constants.ts`
- `features/calendar/services/dav/__tests__/*.ts`
**Description PR** : Refactoring du service CalDAV avec extraction des
helpers, meilleure gestion des types et ajout de tests.
---
### PR 3 : Frontend - Composant Scheduler (EventModal, handlers)
**Branche** : `feat/scheduler-component`
**Dépend de** : PR 2
**Fichiers :**
- `features/calendar/components/scheduler/*`
- `features/calendar/components/RecurrenceEditor.tsx`
- `features/calendar/components/RecurrenceEditor.scss`
- `features/calendar/components/AttendeesInput.tsx`
- `features/calendar/components/AttendeesInput.scss`
- `features/calendar/contexts/CalendarContext.tsx`
- `pages/calendar.tsx`
- `pages/calendar.scss`
**Description PR** : Nouveau composant Scheduler avec EventModal pour
la création/édition d'événements, gestion des récurrences et des invités.
---
### PR 4 : Frontend - Refactoring CalendarList modulaire
**Branche** : `refactor/calendar-list`
**Fichiers :**
- `features/calendar/components/calendar-list/*`
- `features/calendar/components/LeftPanel.tsx`
- `features/calendar/components/MiniCalendar.tsx`
- `features/calendar/components/MiniCalendar.scss`
- `features/calendar/components/CreateCalendarModal.tsx`
- `features/calendar/components/CalendarList.scss`
- `features/calendar/components/index.ts`
**Description PR** : Refactoring de CalendarList en composants modulaires
(CalendarItemMenu, CalendarListItem, CalendarModal, DeleteConfirmModal).
---
### PR 5 : Frontend - Support i18n et locales
**Branche** : `feat/calendar-i18n`
**Fichiers :**
- `features/calendar/hooks/useCalendarLocale.ts`
- `features/i18n/*` (si modifié)
- `src/frontend/apps/e2e/__tests__/calendar-locale.test.ts`
**Description PR** : Ajout du support des locales pour le calendrier
avec tests e2e.
---
### PR 6 : Frontend - Nettoyage code mort
**Branche** : `chore/remove-dead-code`
**Fichiers supprimés :**
- `features/ui/components/breadcrumbs/`
- `features/ui/components/circular-progress/`
- `features/ui/components/infinite-scroll/`
- `features/ui/components/info/`
- `features/ui/components/responsive/`
- `features/forms/components/RhfInput.tsx`
- `hooks/useCopyToClipboard.tsx`
- `utils/useLayout.tsx`
- `features/calendar/components/EventModalDeprecated.tsx`
- `features/calendar/components/EventModalAdapter.tsx`
- `features/calendar/hooks/useEventModal.tsx`
- `features/calendar/hooks/useCreateEventModal.tsx`
- `src/frontend/packages/open-calendar/` (package entier)
**Description PR** : Suppression du code mort et des composants inutilisés.
---
## Ordre de merge recommandé
```
1. PR 1 (Backend invitations) - indépendante
2. PR 2 (CalDavService) - indépendante
3. PR 6 (Dead code) - indépendante
4. PR 5 (i18n) - indépendante
5. PR 4 (CalendarList) - après PR 6
6. PR 3 (Scheduler) - après PR 2, PR 4
```
---
## Étapes d'exécution
Pour chaque PR :
```bash
# 1. Créer la branche depuis main
git checkout main
git pull origin main
git checkout -b <branch-name>
# 2. Copier les fichiers depuis poc/event-calendar
git checkout poc/event-calendar -- <fichiers>
# 3. Vérifier et commiter
git add .
git commit -m "..."
# 4. Pousser et créer la PR
git push -u origin <branch-name>
gh pr create --title "..." --body "..."
```
---
## Fichiers à exclure des PRs
- `CLAUDE.md` (fichier local)
- `IMPLEMENTATION_CHECKLIST.md`, `README_RECURRENCE.md`, etc.
(documentation temporaire à supprimer ou consolider)
---
## Vérification
Avant chaque PR :
```bash
cd src/frontend/apps/calendars
yarn tsc --noEmit # Types OK
yarn lint # Lint OK
yarn test # Tests OK
```
---
## Faisabilité
**Oui, c'est tout à fait possible.** La stratégie `git checkout <branch> -- <files>`
permet de récupérer des fichiers spécifiques d'une branche sans perdre
l'historique de travail. Chaque PR sera autonome et reviewable indépendamment.