mirror of
https://github.com/pacnpal/thrillwiki_django_no_react.git
synced 2025-12-24 11:11:09 -05:00
Add secret management guide, client-side performance monitoring, and search accessibility enhancements
- Introduced a comprehensive Secret Management Guide detailing best practices, secret classification, development setup, production management, rotation procedures, and emergency protocols. - Implemented a client-side performance monitoring script to track various metrics including page load performance, paint metrics, layout shifts, and memory usage. - Enhanced search accessibility with keyboard navigation support for search results, ensuring compliance with WCAG standards and improving user experience.
This commit is contained in:
@@ -24,9 +24,9 @@ class Park(StateMachineMixin, TrackedModel):
|
||||
objects = ParkManager()
|
||||
id: int # Type hint for Django's automatic id field
|
||||
|
||||
name = models.CharField(max_length=255)
|
||||
slug = models.SlugField(max_length=255, unique=True)
|
||||
description = models.TextField(blank=True)
|
||||
name = models.CharField(max_length=255, help_text="Park name")
|
||||
slug = models.SlugField(max_length=255, unique=True, help_text="URL-friendly identifier")
|
||||
description = models.TextField(blank=True, help_text="Park description")
|
||||
state_field_name = "status"
|
||||
|
||||
status = RichFSMField(
|
||||
@@ -50,20 +50,20 @@ class Park(StateMachineMixin, TrackedModel):
|
||||
# ParkLocation
|
||||
|
||||
# Details
|
||||
opening_date = models.DateField(null=True, blank=True)
|
||||
closing_date = models.DateField(null=True, blank=True)
|
||||
operating_season = models.CharField(max_length=255, blank=True)
|
||||
opening_date = models.DateField(null=True, blank=True, help_text="Opening date")
|
||||
closing_date = models.DateField(null=True, blank=True, help_text="Closing date")
|
||||
operating_season = models.CharField(max_length=255, blank=True, help_text="Operating season")
|
||||
size_acres = models.DecimalField(
|
||||
max_digits=10, decimal_places=2, null=True, blank=True
|
||||
max_digits=10, decimal_places=2, null=True, blank=True, help_text="Park size in acres"
|
||||
)
|
||||
website = models.URLField(blank=True)
|
||||
website = models.URLField(blank=True, help_text="Official website URL")
|
||||
|
||||
# Statistics
|
||||
average_rating = models.DecimalField(
|
||||
max_digits=3, decimal_places=2, null=True, blank=True
|
||||
max_digits=3, decimal_places=2, null=True, blank=True, help_text="Average user rating (1–10)"
|
||||
)
|
||||
ride_count = models.IntegerField(null=True, blank=True)
|
||||
coaster_count = models.IntegerField(null=True, blank=True)
|
||||
ride_count = models.IntegerField(null=True, blank=True, help_text="Total ride count")
|
||||
coaster_count = models.IntegerField(null=True, blank=True, help_text="Total coaster count")
|
||||
|
||||
# Image settings - references to existing photos
|
||||
banner_image = models.ForeignKey(
|
||||
@@ -133,6 +133,8 @@ class Park(StateMachineMixin, TrackedModel):
|
||||
)
|
||||
|
||||
class Meta:
|
||||
verbose_name = "Park"
|
||||
verbose_name_plural = "Parks"
|
||||
ordering = ["name"]
|
||||
constraints = [
|
||||
# Business rule: Closing date must be after opening date
|
||||
|
||||
Reference in New Issue
Block a user