8.9 KiB
8.9 KiB
Story 3.3: Summary History Management
Status
Ready for Implementation
Story
As an authenticated user
I want to view and manage my summary history
So that I can reference previous summaries, search through them, and organize my video insights
Acceptance Criteria
- History Display: Summary history displays in reverse chronological order with pagination
- Search Functionality: Filter summaries by video title, content, date range, or AI model used
- Favorites System: Users can star/favorite summaries for quick access
- Bulk Operations: Support bulk delete and export with confirmation dialogs
- Summary Sharing: Generate shareable links (public or private) for individual summaries
- Export Options: Export entire history or filtered results as JSON, CSV, or ZIP archive
- Summary Management: Edit summary titles, add notes, and organize with tags
- Usage Statistics: Display summary count, total videos processed, and cost tracking
Technical Requirements
Backend Implementation
Database Schema Updates
# Add to Summary model (backend/models/summary.py)
is_starred = Column(Boolean, default=False, index=True)
notes = Column(Text) # User's personal notes
tags = Column(JSON) # Array of user tags
shared_token = Column(String(64), unique=True, nullable=True) # For sharing
is_public = Column(Boolean, default=False)
view_count = Column(Integer, default=0)
# Add indexes for performance
Index('idx_user_starred', 'user_id', 'is_starred')
Index('idx_user_created', 'user_id', 'created_at')
API Endpoints (backend/api/summaries.py)
router = APIRouter(prefix="/api/summaries", tags=["summaries"])
# GET /api/summaries - List user's summaries with filters
# GET /api/summaries/{id} - Get single summary
# PUT /api/summaries/{id} - Update summary (star, notes, tags)
# DELETE /api/summaries/{id} - Delete single summary
# POST /api/summaries/bulk-delete - Delete multiple summaries
# GET /api/summaries/search - Advanced search
# GET /api/summaries/starred - Get starred summaries
# POST /api/summaries/{id}/share - Generate share link
# GET /api/summaries/shared/{token} - Access shared summary
# GET /api/summaries/export - Export summaries
# GET /api/summaries/stats - User statistics
Frontend Implementation
Components Structure
frontend/src/
├── pages/
│ └── history/
│ ├── SummaryHistoryPage.tsx # Main history page
│ └── SharedSummaryPage.tsx # Public share view
├── components/
│ └── summaries/
│ ├── SummaryList.tsx # List with pagination
│ ├── SummaryCard.tsx # Individual summary card
│ ├── SummarySearch.tsx # Search and filters
│ ├── SummaryDetails.tsx # Full summary view
│ ├── SummaryActions.tsx # Star, share, delete actions
│ ├── BulkActions.tsx # Bulk operations toolbar
│ ├── ExportDialog.tsx # Export configuration
│ └── UsageStats.tsx # Statistics display
└── hooks/
├── useSummaryHistory.ts # History data fetching
├── useSummarySearch.ts # Search functionality
└── useSummaryActions.ts # CRUD operations
Tasks / Subtasks
Task 1: Database Schema Updates (4 hours)
- Add new columns to Summary model (starred, notes, tags, sharing)
- Create database migration with Alembic
- Add indexes for performance optimization
- Update model relationships and validators
Task 2: Backend API Implementation (8 hours)
- Create summaries.py router with all endpoints
- Implement pagination with cursor-based approach
- Add search functionality with full-text search
- Implement sharing token generation and validation
- Create export service for multiple formats
- Add usage statistics aggregation
- Implement proper authorization checks
- Add rate limiting for export operations
Task 3: Frontend History Page (6 hours)
- Create SummaryHistoryPage with routing
- Implement SummaryList with infinite scroll
- Build SummaryCard with preview and actions
- Add loading states and empty states
- Implement responsive grid layout
- Add keyboard navigation support
Task 4: Search and Filtering (4 hours)
- Create SummarySearch component with filters
- Implement date range picker
- Add tag-based filtering
- Create saved search functionality
- Implement search highlighting in results
Task 5: Summary Actions (4 hours)
- Implement star/unstar functionality
- Create share dialog with options
- Add copy-to-clipboard for share links
- Implement delete with confirmation
- Add bulk selection interface
- Create bulk operations toolbar
Task 6: Export Functionality (4 hours)
- Create ExportDialog component
- Implement format selection (JSON, CSV, ZIP)
- Add date range and filter options
- Show export progress
- Handle large exports with streaming
Task 7: Usage Statistics (2 hours)
- Create UsageStats component
- Display summary count and trends
- Show cost tracking if available
- Add time-based analytics charts
Task 8: Testing & Documentation (4 hours)
- Write unit tests for API endpoints
- Add integration tests for history flow
- Create frontend component tests
- Update API documentation
- Add user documentation
Dependencies
Technical Dependencies
- Story 3.1: User Authentication (✅ Complete)
- Story 3.2: Frontend Auth Integration (✅ Complete)
- Database models with user relationships
- Authentication middleware
- Export service from Epic 2
External Dependencies
- React Query for data fetching
- Tanstack Table for data grid
- date-fns for date handling
- Chart.js for statistics visualization
Definition of Done
- All database migrations applied successfully
- API endpoints return correct data with proper pagination
- Search functionality works across title, content, and tags
- Starring system persists and filters correctly
- Bulk operations handle edge cases gracefully
- Share links work for both authenticated and public access
- Export generates valid files in all formats
- Frontend displays history with smooth scrolling
- All actions show appropriate loading states
- Mobile responsive design works correctly
- Unit tests pass with >80% coverage
- Integration tests verify complete flows
- Performance: Page loads in <2 seconds with 100+ summaries
- Accessibility: WCAG 2.1 AA compliance
- Documentation updated
Notes
Implementation Considerations
- Performance: Use cursor-based pagination for large datasets
- Caching: Implement Redis caching for frequently accessed summaries
- Search: Consider full-text search with PostgreSQL or Elasticsearch
- Export: Stream large exports to prevent memory issues
- Sharing: Use signed URLs with expiration for security
- Mobile: Implement swipe gestures for mobile actions
Future Enhancements
- Collaborative folders for team sharing
- Summary collections/playlists
- Advanced analytics dashboard
- Integration with note-taking apps
- Automated summary recommendations
- Version history for edited summaries
Design Mockup Structure
┌─────────────────────────────────────────────┐
│ 🎬 Summary History [Stats] │
├─────────────────────────────────────────────┤
│ [Search...] [Date] [Tags] [Model] [Export] │
├─────────────────────────────────────────────┤
│ [✓] Select All [★ Star] [🗑 Delete] [↗ Share]│
├─────────────────────────────────────────────┤
│ ┌──────────────┐ ┌──────────────┐ │
│ │ Video Title │ │ Video Title │ │
│ │ ★ 2 days ago │ │ 5 days ago │ │
│ │ Summary... │ │ Summary... │ │
│ │ [View] [···] │ │ [View] [···] │ │
│ └──────────────┘ └──────────────┘ │
│ │
│ [Load More] │
└─────────────────────────────────────────────┘
Estimated Time: 36 hours
Priority: High - Core user experience feature Risk: Medium - Requires careful database design and performance optimization