feat: learnable activity type mapping system (DB-based, auto-learning)
Replaces hardcoded mappings with database-driven, self-learning system.
Backend:
- Migration 007: activity_type_mappings table
- Supports global and user-specific mappings
- Seeded with 40+ default mappings (German + English)
- Unique constraint: (activity_type, profile_id)
- Refactored: get_training_type_for_activity() queries DB
- Priority: user-specific → global → NULL
- Bulk categorization now saves mapping automatically
- Source: 'bulk' for learned mappings
- admin_activity_mappings.py: Full CRUD endpoints
- List, Get, Create, Update, Delete
- Coverage stats endpoint
- CSV import uses DB mappings (no hardcoded logic)
Frontend:
- AdminActivityMappingsPage: Full mapping management UI
- Coverage stats (% mapped, unmapped count)
- Filter: All / Global
- Create/Edit/Delete mappings
- Tip: System learns from bulk categorization
- Added route + admin link
- API methods: adminList/Get/Create/Update/DeleteActivityMapping
Benefits:
- No code changes needed for new activity types
- System learns from user bulk categorizations
- User-specific mappings override global defaults
- Admin can manage all mappings via UI
- Migration pre-populates 40+ common German/English types
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>