# History Tracking Migration

## Context
The project is transitioning from django-simple-history to django-pghistory for model history tracking.

## Implementation Details

### Base Implementation (history_tracking/models.py)
- Both old and new implementations maintained during transition:
  - `HistoricalModel` - Legacy base class using django-simple-history
  - `TrackedModel` - New base class using django-pghistory
- Custom `DiffMixin` for comparing historical records
- Maintained `HistoricalSlug` for backward compatibility

### Transition Strategy
1. Maintain Backward Compatibility
   - Keep both HistoricalModel and TrackedModel during transition
   - Update models one at a time to use TrackedModel
   - Ensure no breaking changes during migration

2. Model Updates
   - Designer (Completed)
     - Migrated to TrackedModel
     - Updated get_by_slug to use pghistory queries
     - Removed SimpleHistoryAdmin dependency
   
   - Pending Model Updates
     - Companies (Company, Manufacturer)
     - Parks (Park, ParkArea)
     - Rides (Ride, RollerCoasterStats)
     - Location models

### Migration Process
1. For Each Model:
   - Switch base class from HistoricalModel to TrackedModel
   - Update admin.py to remove SimpleHistoryAdmin
   - Create and apply migrations
   - Test history tracking functionality
   - Update any history-related queries

2. Testing Steps
   - Create test objects
   - Make changes
   - Verify history records
   - Check diff functionality
   - Validate historical slug lookup

3. Admin Integration
   - Remove SimpleHistoryAdmin
   - Use standard ModelAdmin
   - Keep existing list displays and search fields

## Benefits
- Native PostgreSQL trigger-based tracking
- More efficient storage and querying
- Better performance characteristics
- Context tracking capabilities

## Rollback Plan
Since both implementations are maintained:
1. Revert model inheritance to HistoricalModel
2. Restore SimpleHistoryAdmin
3. Keep existing migrations

## Next Steps
1. Create migrations for Designer model
2. Update remaining models in this order:
   a. Companies app
   b. Parks app
   c. Rides app
   d. Location app
3. Test historical functionality
4. Once all models are migrated:
   - Remove HistoricalModel class
   - Remove django-simple-history dependency
   - Update documentation

## Technical Notes
- Uses pghistory's default tracking configuration
- Maintains compatibility with existing code patterns
- Custom diff functionality preserved
- Historical slug tracking unchanged
- Both tracking systems can coexist during migration

## Completion Criteria
1. All models migrated to TrackedModel
2. All functionality tested and working
3. No dependencies on django-simple-history
4. Documentation updated to reflect new implementation
5. All migrations applied successfully