major changes, including tailwind v4

This commit is contained in:
pacnpal
2025-08-15 12:24:20 -04:00
parent f6c8e0e25c
commit da7c7e3381
261 changed files with 22783 additions and 10465 deletions

View File

@@ -0,0 +1,91 @@
# Location App Analysis
## 1. PostGIS Features in Use
### Spatial Fields
- **`gis_models.PointField`**: The `Location` model in [`location/models.py`](location/models.py:51) uses a `PointField` to store geographic coordinates.
### GeoDjango QuerySet Methods
- **`distance`**: The `distance_to` method in the `Location` model calculates the distance between two points.
- **`distance_lte`**: The `nearby_locations` method uses the `distance_lte` lookup to find locations within a certain distance.
### Other GeoDjango Features
- **`django.contrib.gis.geos.Point`**: The `Point` object is used to create point geometries from latitude and longitude.
- **PostGIS Backend**: The project is configured to use the `django.contrib.gis.db.backends.postgis` database backend in [`thrillwiki/settings.py`](thrillwiki/settings.py:96).
### Spatial Indexes
- No explicit spatial indexes are defined in the `Location` model's `Meta` class.
## 2. Location-Related Views Analysis
### Map Rendering
- There is no direct map rendering functionality in the provided views. The views focus on searching, creating, updating, and deleting location data, as well as reverse geocoding.
### Spatial Calculations
- The `distance_to` and `nearby_locations` methods in the `Location` model perform spatial calculations, but these are not directly exposed as view actions. The views themselves do not perform spatial calculations.
### GeoJSON Serialization
- There is no GeoJSON serialization in the views. The views return standard JSON responses.
## 3. Migration Strategy
### Identified Risks
1. **Data Loss Potential**:
- Legacy latitude/longitude fields are synchronized with PostGIS point field
- Removing legacy fields could break synchronization logic
- Older entries might rely on legacy fields exclusively
2. **Breaking Changes**:
- Views depend on external Nominatim API rather than PostGIS
- Geocoding logic would need complete rewrite
- Address parsing differs between Nominatim and PostGIS
3. **Performance Concerns**:
- Missing spatial index on point field
- Could lead to performance degradation as dataset grows
### Phased Migration Timeline
```mermaid
gantt
title Location System Migration Timeline
dateFormat YYYY-MM-DD
section Phase 1
Spatial Index Implementation :2025-08-16, 3d
PostGIS Geocoding Setup :2025-08-19, 5d
section Phase 2
Dual-system Operation :2025-08-24, 7d
Legacy Field Deprecation :2025-08-31, 3d
section Phase 3
API Migration :2025-09-03, 5d
Cache Strategy Update :2025-09-08, 2d
```
### Backward Compatibility Strategy
- Maintain dual coordinate storage during transition
- Implement compatibility shim layer:
```python
def get_coordinates(obj):
return obj.point.coords if obj.point else (obj.latitude, obj.longitude)
```
- Gradual migration of views to PostGIS functions
- Maintain legacy API endpoints during transition
### Spatial Data Migration Plan
1. Add spatial index to Location model:
```python
class Meta:
indexes = [
models.Index(fields=['content_type', 'object_id']),
models.Index(fields=['city']),
models.Index(fields=['country']),
gis_models.GistIndex(fields=['point']) # Spatial index
]
```
2. Migrate to PostGIS geocoding functions:
- Use `ST_Geocode` for address searches
- Use `ST_ReverseGeocode` for coordinate to address conversion
3. Implement Django's `django.contrib.gis.gdal` for address parsing
4. Create data migration script to:
- Convert existing Nominatim data to PostGIS format
- Generate spatial indexes for existing data
- Update cache keys and invalidation strategy