appiq-solution
Version:
APPIQ SOLUTION: Flutter Mobile Development Extension for BMAD Method
278 lines (230 loc) • 12.3 kB
Markdown
# Livestream Feature PRD
## Overview
Implementierung einer Live-Streaming-Funktionalität in die bestehende Flutter-App mit intelligenter Integration in vorhandene Komponenten.
## Implementation Paths
> Spezifische Pfade für optimale Integration
### Suggested File Structure
```
lib/
├── features/
│ └── livestream/ # ← Neues Feature
│ ├── data/
│ │ ├── datasources/
│ │ │ ├── livestream_remote_datasource.dart
│ │ │ └── livestream_local_datasource.dart
│ │ ├── models/
│ │ │ ├── stream_model.dart
│ │ │ └── stream_chat_model.dart
│ │ └── repositories/
│ │ └── livestream_repository_impl.dart
│ ├── domain/
│ │ ├── entities/
│ │ │ ├── stream_entity.dart
│ │ │ └── stream_message_entity.dart
│ │ ├── repositories/
│ │ │ └── livestream_repository.dart
│ │ └── usecases/
│ │ ├── start_stream_usecase.dart
│ │ ├── join_stream_usecase.dart
│ │ └── send_chat_message_usecase.dart
│ └── presentation/
│ ├── cubit/
│ │ ├── livestream_cubit.dart
│ │ ├── livestream_state.dart
│ │ ├── stream_chat_cubit.dart
│ │ └── stream_chat_state.dart
│ ├── pages/
│ │ ├── stream_list_page.dart
│ │ ├── stream_viewer_page.dart
│ │ └── stream_creator_page.dart
│ └── widgets/
│ ├── stream_player_widget.dart
│ ├── stream_controls_widget.dart
│ └── stream_chat_widget.dart
```
### Integration Points
> Bestehende Dateien/Klassen für Integration:
- **Main Navigation**: `lib/features/home/presentation/pages/home_page.dart`
- Füge "Go Live" Button in AppBar hinzu
- Integriere Stream-Liste in Home-Feed
- **Existing API Service**: `lib/shared/services/api_service.dart`
- Erweitere für WebRTC-Endpoints
- Nutze bestehende Auth-Header
- **Video Player Base**: `lib/features/media/presentation/widgets/video_player_widget.dart`
- Erweitere für Live-Stream-Funktionalität
- Nutze bestehende Player-Controls
- **Chat System**: `lib/features/chat/presentation/widgets/chat_widget.dart`
- Adaptiere für Live-Stream-Chat
- Nutze bestehende Message-Patterns
- **User Profile Integration**: `lib/features/user/presentation/pages/profile_page.dart`
- Füge "My Streams" Sektion hinzu
- Zeige Stream-History
### Code Reuse Analysis
> Bestehende Komponenten prüfen und wiederverwenden:
#### Existing Similar Features (PRÜFEN ZUERST!)
- [ ] **Video Feature**: `lib/features/video/` - Für Player-Logik
- [ ] **Chat Feature**: `lib/features/chat/` - Für Chat-Implementation
- [ ] **Camera Feature**: `lib/features/camera/` - Für Stream-Aufnahme
- [ ] **Notification Feature**: `lib/features/notifications/` - Für Stream-Alerts
#### Shared Components to Reuse (VERWENDEN STATT NEU ERSTELLEN!)
- [ ] `lib/shared/widgets/loading_widget.dart` - Für Stream-Loading
- [ ] `lib/shared/widgets/error_widget.dart` - Für Stream-Errors
- [ ] `lib/shared/widgets/custom_button.dart` - Für Stream-Controls
- [ ] `lib/shared/widgets/user_avatar.dart` - Für Streamer-Avatar
- [ ] `lib/shared/widgets/bottom_sheet_widget.dart` - Für Stream-Settings
- [ ] `lib/shared/services/navigation_service.dart` - Für Stream-Navigation
- [ ] `lib/shared/services/websocket_service.dart` - Für Real-time Chat
- [ ] `lib/shared/utils/validators.dart` - Für Stream-Input-Validation
- [ ] `lib/shared/utils/permission_handler.dart` - Für Camera/Mic-Permissions
#### Common Patterns to Follow (BESTEHENDE PATTERNS BEFOLGEN!)
- [ ] **Cubit Naming**: `LivestreamCubit`, `LivestreamState` (wie `AuthCubit`)
- [ ] **Error Handling**: `StreamFailure` extends `Failure` (wie `AuthFailure`)
- [ ] **API Patterns**: `ApiResponse<StreamModel>` (wie bestehende APIs)
- [ ] **Repository Pattern**: Folge `UserRepository` Struktur
- [ ] **DI Pattern**: Registrierung wie in `injection_container.dart`
## UI References
> Mockups und Referenz-Bilder für Development
### Design Assets Location
```
assets/
├── images/
│ └── livestream/
│ ├── mockup_stream_list.png # ← Haupt-Stream-Liste
│ ├── mockup_stream_viewer.png # ← Stream-Viewer mit Chat
│ ├── mockup_stream_creator.png # ← Stream-Erstellung
│ ├── wireframe_stream_flow.png # ← User-Flow Diagramm
│ └── ui_components_reference.png # ← UI-Komponenten Guide
└── icons/
└── livestream/
├── stream_icon.svg # ← Live-Stream Icon
├── camera_icon.svg # ← Kamera Icon
├── chat_icon.svg # ← Chat Icon
└── viewer_count_icon.svg # ← Viewer-Anzahl Icon
```
### UI Reference Links
- **Figma Design**: https://figma.com/livestream-feature-v2
- **Design System**: `lib/shared/theme/app_theme.dart` - Folge bestehende Patterns
- **Similar UI Reference**:
- `lib/features/video/presentation/pages/video_player_page.dart` - Für Player-Layout
- `lib/features/chat/presentation/widgets/chat_list_widget.dart` - Für Chat-UI
### Visual Guidelines (BESTEHENDE PATTERNS VERWENDEN!)
- **Theme**: Erweitere `lib/shared/theme/app_theme.dart`
- Füge `livestreamColors` zu `AppColors` hinzu
- Nutze bestehende `primaryColor` für Live-Indicator
- **Typography**: Verwende `AppTextStyles.headline1` für Stream-Titel
- **Spacing**: Nutze `AppSpacing.medium` für konsistente Abstände
- **Components**: Erweitere `lib/shared/widgets/` statt neue zu erstellen
## Features
- **Live Stream Starten**: Integration mit bestehender Camera-Feature
- **Stream Discovery**: Erweitere Home-Feed um Stream-Liste
- **Real-time Chat**: Nutze bestehende Chat-Infrastruktur
- **Stream Controls**: Erweitere bestehende Video-Controls
- **Viewer Analytics**: Integration in bestehende Analytics
## Acceptance Criteria
### Live Stream Starten
- [ ] **Reuse Camera Permission**: Nutze `lib/shared/utils/permission_handler.dart`
- [ ] **Extend Navigation**: Füge zu `lib/core/routing/app_router.dart` hinzu
- [ ] **Follow Button Pattern**: Nutze `lib/shared/widgets/custom_button.dart`
### Stream Viewer
- [ ] **Extend Video Player**: Erweitere `lib/features/video/presentation/widgets/video_player_widget.dart`
- [ ] **Reuse Loading States**: Nutze `lib/shared/widgets/loading_widget.dart`
- [ ] **Follow Page Structure**: Wie `lib/features/video/presentation/pages/video_player_page.dart`
### Chat Integration
- [ ] **Extend Chat Widget**: Adaptiere `lib/features/chat/presentation/widgets/chat_widget.dart`
- [ ] **Reuse WebSocket**: Nutze `lib/shared/services/websocket_service.dart`
- [ ] **Follow Message Pattern**: Wie `lib/features/chat/domain/entities/message_entity.dart`
## Technical Requirements
### Architecture Compliance (BESTEHENDE PATTERNS BEFOLGEN!)
- [ ] **Clean Architecture**: Folge `lib/features/user/` Struktur
- [ ] **Cubit State Management**: Wie `lib/features/auth/presentation/cubit/auth_cubit.dart`
- [ ] **Repository Pattern**: Wie `lib/features/user/data/repositories/user_repository_impl.dart`
- [ ] **Dependency Injection**: Registrierung in `lib/core/di/injection_container.dart`
### Code Integration Requirements (ZUERST PRÜFEN!)
- [ ] **Before New API Client**: Erweitere `lib/shared/services/api_service.dart`
- [ ] **Before New WebSocket**: Prüfe `lib/shared/services/websocket_service.dart`
- [ ] **Before New Widgets**: Prüfe `lib/shared/widgets/` für ähnliche Komponenten
- [ ] **Before New Utils**: Prüfe `lib/shared/utils/` für Helper-Functions
- [ ] **Before New Services**: Prüfe `lib/shared/services/` für ähnliche Services
### Performance Requirements (BESTEHENDE OPTIMIERUNGEN NUTZEN!)
- [ ] **Image Caching**: Nutze bestehende `lib/shared/services/image_cache_service.dart`
- [ ] **Network Optimization**: Folge bestehende API-Caching-Patterns
- [ ] **Memory Management**: Wie in `lib/features/video/` implementiert
## Auto-Analysis Instructions
> Für das smart-auto-detect System
### Code Analysis Tasks
1. **Scan Similar Features**:
```bash
# Prüfe Video-Feature für Player-Patterns
find lib/features/video/ -name "*.dart" | head -10
# Prüfe Chat-Feature für Message-Patterns
find lib/features/chat/ -name "*.dart" | head -10
# Prüfe Camera-Feature für Aufnahme-Patterns
find lib/features/camera/ -name "*.dart" | head -10
```
2. **Shared Component Analysis**:
```bash
# Prüfe verfügbare Widgets
ls -la lib/shared/widgets/ | grep -E "(video|chat|button|loading)"
# Prüfe verfügbare Services
ls -la lib/shared/services/ | grep -E "(api|websocket|navigation)"
# Prüfe verfügbare Utils
ls -la lib/shared/utils/ | grep -E "(validator|permission|formatter)"
```
### Architect Fallback Rules
> Wenn Pfade nicht spezifiziert sind:
1. **Feature Complexity**: HOCH → Eigenes Feature-Verzeichnis
2. **Dependencies**: Video + Chat + Camera → Nutze bestehende Integration-Patterns
3. **UI Complexity**: Multiple Screens → Folge `lib/features/video/` Struktur
## User Stories
### Epic: Live Streaming Infrastructure
- Als Entwickler möchte ich bestehende Video-Player-Komponenten erweitern, damit ich keine redundante Player-Logik erstelle
- Als Entwickler möchte ich bestehende Chat-Infrastruktur nutzen, damit Real-time-Messaging bereits funktioniert
- Als Entwickler möchte ich bestehende Camera-Services verwenden, damit Permissions bereits verwaltet sind
### Epic: Stream Creation & Management
- Als Content Creator möchte ich den vertrauten Camera-Button verwenden, damit die Stream-Erstellung intuitiv ist
- Als Content Creator möchte ich bestehende Navigation-Patterns nutzen, damit die App konsistent bleibt
- Als Content Creator möchte ich bekannte UI-Komponenten sehen, damit die Bedienung vertraut ist
### Epic: Stream Consumption
- Als Viewer möchte ich den gewohnten Video-Player sehen, damit die Bedienung vertraut ist
- Als Viewer möchte ich das bekannte Chat-Interface nutzen, damit ich sofort weiß, wie ich interagiere
- Als Viewer möchte ich konsistente Loading-States sehen, damit die App professionell wirkt
## Dependencies
### Existing Code Dependencies (WIEDERVERWENDEN!)
- `lib/features/video/` - Video Player Base-Funktionalität
- `lib/features/chat/` - Real-time Chat Infrastructure
- `lib/features/camera/` - Camera Access & Permissions
- `lib/shared/services/api_service.dart` - HTTP Client für Stream-APIs
- `lib/shared/services/websocket_service.dart` - Real-time Communication
- `lib/shared/widgets/` - UI Components (Button, Loading, Error)
### New External Dependencies
- `webrtc_interface: ^1.0.0` - Für Live-Streaming
- `agora_rtc_engine: ^6.0.0` - Stream Infrastructure (falls nicht WebRTC)
### Backend Dependencies
- WebRTC Signaling Server
- Stream Media Server (RTMP/HLS)
- Chat WebSocket Endpoints (erweitere bestehende)
## Migration/Integration Notes
### Existing Feature Integration
- [ ] **Video Feature**: Erweitere Player für Live-Streams
- [ ] **Chat Feature**: Adaptiere für Stream-spezifische Messages
- [ ] **Home Feature**: Integriere Stream-Liste in Feed
- [ ] **Profile Feature**: Füge Stream-History hinzu
### Navigation Integration
- [ ] Erweitere `lib/core/routing/app_router.dart`:
```dart
GoRoute(
path: '/livestream',
builder: (context, state) => const StreamListPage(),
),
GoRoute(
path: '/livestream/:streamId',
builder: (context, state) => StreamViewerPage(
streamId: state.params['streamId']!,
),
),
```
### State Management Integration
- [ ] Erweitere globale App-State falls nötig
- [ ] Integration mit bestehenden User-State für Streamer-Info
- [ ] Benachrichtigungs-State für Stream-Alerts
Das ist ein intelligentes PRD, das maximale Code-Wiederverwendung sicherstellt! 🧠✨