170 lines
4.8 KiB
Markdown
170 lines
4.8 KiB
Markdown
# PR7b — Resilience & Performance (PARTIAL)
|
|
|
|
## Résumé
|
|
|
|
Cette PR commence les corrections pour **MOD-P2-006** et **MOD-P2-003** :
|
|
- **MOD-P2-006**: Retry HTTP externes ✅ (complété pour oauth_service)
|
|
- **MOD-P2-003**: AppError partout ⚠️ (partiellement complété - ~10 occurrences converties)
|
|
- **MOD-P2-007**: Circuit breakers ⏳ (non commencé - documenté)
|
|
- **MOD-P2-008**: File I/O asynchrone ⏳ (non commencé - documenté)
|
|
|
|
**Note**: PR7b est partiellement complétée. Les items restants sont documentés dans `docs/PR7B_REMAINING_WORK.md`.
|
|
|
|
## Items Corrigés (Partiellement)
|
|
|
|
### MOD-P2-006: Retry HTTP Externes ✅
|
|
**Fichiers**:
|
|
- `internal/services/oauth_service.go:311-332` (modifié)
|
|
|
|
**Problème**:
|
|
- Pas de retry dans `oauth_service.go` pour requêtes OAuth externes
|
|
|
|
**Fix**:
|
|
1. **Retry avec backoff exponentiel**: Ajouté dans `GetOAuthUser()`
|
|
- 3 tentatives maximum
|
|
- Backoff exponentiel: 1s, 2s, 4s
|
|
- Gestion d'erreurs améliorée
|
|
|
|
**État**:
|
|
- ✅ `stream_service.go`: Déjà avait retry
|
|
- ✅ `webhook_service.go`: Déjà avait retry
|
|
- ✅ `oauth_service.go`: Retry ajouté
|
|
|
|
**Validation**:
|
|
```bash
|
|
go build ./internal/services
|
|
# ✅ Succès
|
|
```
|
|
|
|
### MOD-P2-003: AppError Partout ⚠️ (Partiel)
|
|
**Fichiers**:
|
|
- `internal/core/track/handler.go` (modifié - quelques occurrences)
|
|
|
|
**Problème**:
|
|
- 53 occurrences de `gin.H{"error":...}` dans `handler.go`
|
|
- Incohérence format erreur
|
|
|
|
**Fix**:
|
|
1. **Quelques occurrences converties**:
|
|
- `LikeTrack`: Converti vers `respondWithError`
|
|
- `UnlikeTrack`: Converti vers `respondWithError`
|
|
- `GetTrackLikes`: Converti vers `respondWithError`
|
|
- `GetTrackByShareToken`: Converti vers `respondWithError`
|
|
|
|
2. **Helper existant**: `respondWithError` utilise déjà `RespondWithAppError`
|
|
|
|
**État**:
|
|
- ✅ ~10 occurrences converties
|
|
- ⏳ ~45 occurrences restantes
|
|
|
|
**Recommandation**:
|
|
- Convertir les occurrences restantes progressivement
|
|
- Prioriser les handlers les plus utilisés
|
|
|
|
**Validation**:
|
|
```bash
|
|
go build ./internal/core/track
|
|
# ✅ Succès
|
|
|
|
grep -n "gin\.H.*error" internal/core/track/handler.go | wc -l
|
|
# → ~45 occurrences restantes
|
|
```
|
|
|
|
## Items Non Commencés (Documentés)
|
|
|
|
### MOD-P2-007: Circuit Breakers ⏳
|
|
**Status**: Documenté dans `docs/PR7B_REMAINING_WORK.md`
|
|
|
|
**Action requise**:
|
|
- Ajouter dépendance `github.com/sony/gobreaker`
|
|
- Créer wrapper pour services externes
|
|
- Intégrer dans stream_service, oauth_service
|
|
- Tests unitaires
|
|
|
|
**Effort estimé**: 4h
|
|
|
|
### MOD-P2-008: File I/O Asynchrone ⏳
|
|
**Status**: Documenté dans `docs/PR7B_REMAINING_WORK.md`
|
|
|
|
**Action requise**:
|
|
- Rendre `os.Create` et `io.Copy` asynchrones
|
|
- Utiliser goroutines avec channels
|
|
- Gérer synchronisation
|
|
- Tests unitaires
|
|
|
|
**Effort estimé**: 4h
|
|
|
|
## Fichiers Modifiés
|
|
|
|
1. `internal/services/oauth_service.go`
|
|
- Ajout retry avec backoff exponentiel dans `GetOAuthUser()` (lignes 311-332)
|
|
|
|
2. `internal/core/track/handler.go`
|
|
- Conversion de quelques occurrences `gin.H{"error":...}` vers `respondWithError`
|
|
- Handlers: LikeTrack, UnlikeTrack, GetTrackLikes, GetTrackByShareToken
|
|
|
|
3. `docs/PR7B_REMAINING_WORK.md` (nouveau)
|
|
- Documentation des items restants
|
|
|
|
## Commandes de Validation
|
|
|
|
### Build
|
|
```bash
|
|
# Compilation
|
|
go build ./internal/services
|
|
# ✅ Succès
|
|
|
|
go build ./internal/core/track
|
|
# ✅ Succès
|
|
|
|
# Build complet
|
|
go build ./cmd/api/main.go
|
|
# ✅ Succès
|
|
```
|
|
|
|
### Tests
|
|
```bash
|
|
# Tous les tests
|
|
go test ./... -count=1 -short
|
|
# ✅ Tests unitaires passent
|
|
```
|
|
|
|
## Détails Techniques
|
|
|
|
### Corrections Apportées
|
|
|
|
1. **MOD-P2-006 (Retry HTTP)**:
|
|
- **Pattern**: Retry avec backoff exponentiel (1s, 2s, 4s)
|
|
- **Tentatives**: 3 maximum
|
|
- **Gestion erreurs**: Retourne erreur après toutes les tentatives
|
|
|
|
2. **MOD-P2-003 (AppError)**:
|
|
- **Helper**: Utilise `respondWithError` qui appelle `RespondWithAppError`
|
|
- **Conversion**: Quelques handlers critiques convertis
|
|
- **Reste**: ~45 occurrences à convertir progressivement
|
|
|
|
## Risques / Limitations
|
|
|
|
1. **MOD-P2-003 partiel**: Beaucoup d'occurrences restantes
|
|
- **Impact**: Incohérence format erreur persiste
|
|
- **Mitigation**: Conversion progressive, prioriser handlers critiques
|
|
|
|
2. **MOD-P2-007 et MOD-P2-008 non commencés**:
|
|
- **Impact**: Améliorations de qualité/performance non implémentées
|
|
- **Mitigation**: Documentés pour phase ultérieure
|
|
|
|
## Prochaines Étapes
|
|
|
|
- ⏳ Compléter MOD-P2-003 (convertir occurrences restantes)
|
|
- ⏳ Implémenter MOD-P2-007 (circuit breakers)
|
|
- ⏳ Implémenter MOD-P2-008 (file I/O asynchrone)
|
|
|
|
**Note**: Les items P2 restants sont des améliorations de qualité/performance, pas critiques pour la production. Le système est fonctionnel avec les corrections P0/P1 complétées.
|
|
|
|
---
|
|
|
|
**Statut**: ⚠️ **PARTIAL** - Some items completed, others documented for future work
|
|
|
|
**Effort**: ~3h (sur ~17h estimé)
|
|
|
|
**Breaking Changes**: Aucun
|