mirror of
https://github.com/pacnpal/thrillwiki_django_no_react.git
synced 2025-12-23 01:31:09 -05:00
feat: Refactor rides app with unique constraints, mixins, and enhanced documentation
- Added migration to convert unique_together constraints to UniqueConstraint for RideModel. - Introduced RideFormMixin for handling entity suggestions in ride forms. - Created comprehensive code standards documentation outlining formatting, docstring requirements, complexity guidelines, and testing requirements. - Established error handling guidelines with a structured exception hierarchy and best practices for API and view error handling. - Documented view pattern guidelines, emphasizing the use of CBVs, FBVs, and ViewSets with examples. - Implemented a benchmarking script for query performance analysis and optimization. - Developed security documentation detailing measures, configurations, and a security checklist. - Compiled a database optimization guide covering indexing strategies, query optimization patterns, and computed fields.
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
import logging
|
||||
|
||||
from django.db.models.signals import pre_save
|
||||
from django.db.models.signals import pre_save, post_save
|
||||
from django.dispatch import receiver
|
||||
from django.utils import timezone
|
||||
|
||||
@@ -10,6 +10,28 @@ from .models import Ride
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
# =============================================================================
|
||||
# Computed Field Maintenance
|
||||
# =============================================================================
|
||||
|
||||
def update_ride_search_text(ride):
|
||||
"""
|
||||
Update ride's search_text computed field.
|
||||
|
||||
This is called when related objects (park, manufacturer, ride_model)
|
||||
change and might affect the ride's search text.
|
||||
"""
|
||||
if ride is None:
|
||||
return
|
||||
|
||||
try:
|
||||
ride._populate_computed_fields()
|
||||
ride.save(update_fields=['search_text'])
|
||||
logger.debug(f"Updated search_text for ride {ride.pk}")
|
||||
except Exception as e:
|
||||
logger.exception(f"Failed to update search_text for ride {ride.pk}: {e}")
|
||||
|
||||
|
||||
@receiver(pre_save, sender=Ride)
|
||||
def handle_ride_status(sender, instance, **kwargs):
|
||||
"""
|
||||
@@ -186,3 +208,58 @@ def apply_post_closing_status(instance, user=None):
|
||||
f"Applied post_closing_status {target_status} to ride {instance.pk} (direct)"
|
||||
)
|
||||
return True
|
||||
|
||||
|
||||
# =============================================================================
|
||||
# Computed Field Maintenance Signal Handlers
|
||||
# =============================================================================
|
||||
|
||||
@receiver(post_save, sender='parks.Park')
|
||||
def update_ride_search_text_on_park_change(sender, instance, **kwargs):
|
||||
"""
|
||||
Update ride search_text when park name or location changes.
|
||||
|
||||
When a park's name changes, all rides at that park need their
|
||||
search_text regenerated.
|
||||
"""
|
||||
try:
|
||||
for ride in instance.rides.all():
|
||||
update_ride_search_text(ride)
|
||||
except Exception as e:
|
||||
logger.exception(f"Failed to update ride search_text on park change: {e}")
|
||||
|
||||
|
||||
@receiver(post_save, sender='parks.Company')
|
||||
def update_ride_search_text_on_company_change(sender, instance, **kwargs):
|
||||
"""
|
||||
Update ride search_text when manufacturer/designer name changes.
|
||||
|
||||
When a company's name changes, all rides manufactured or designed
|
||||
by that company need their search_text regenerated.
|
||||
"""
|
||||
try:
|
||||
# Update all rides manufactured by this company
|
||||
for ride in instance.manufactured_rides.all():
|
||||
update_ride_search_text(ride)
|
||||
|
||||
# Update all rides designed by this company
|
||||
for ride in instance.designed_rides.all():
|
||||
update_ride_search_text(ride)
|
||||
|
||||
except Exception as e:
|
||||
logger.exception(f"Failed to update ride search_text on company change: {e}")
|
||||
|
||||
|
||||
@receiver(post_save, sender='rides.RideModel')
|
||||
def update_ride_search_text_on_ride_model_change(sender, instance, **kwargs):
|
||||
"""
|
||||
Update ride search_text when ride model name changes.
|
||||
|
||||
When a ride model's name changes, all rides using that model need
|
||||
their search_text regenerated.
|
||||
"""
|
||||
try:
|
||||
for ride in instance.rides.all():
|
||||
update_ride_search_text(ride)
|
||||
except Exception as e:
|
||||
logger.exception(f"Failed to update ride search_text on ride model change: {e}")
|
||||
|
||||
Reference in New Issue
Block a user