mirror of
https://github.com/pacnpal/thrillwiki_django_no_react.git
synced 2025-12-20 07:31:07 -05:00
major changes, including tailwind v4
This commit is contained in:
91
memory-bank/documentation/location_app_analysis.md
Normal file
91
memory-bank/documentation/location_app_analysis.md
Normal 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
|
||||
Reference in New Issue
Block a user