mirror of
https://github.com/pacnpal/thrillwiki_django_no_react.git
synced 2025-12-23 15:11:08 -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:
@@ -307,3 +307,85 @@ class RideService:
|
||||
ride = Ride.objects.select_for_update().get(id=ride_id)
|
||||
ride.open(user=user)
|
||||
return ride
|
||||
|
||||
@staticmethod
|
||||
def handle_new_entity_suggestions(
|
||||
*,
|
||||
form_data: Dict[str, Any],
|
||||
submitter: UserType,
|
||||
) -> Dict[str, Any]:
|
||||
"""
|
||||
Handle suggestions for new manufacturers, designers, and ride models.
|
||||
|
||||
Creates moderation submissions for entities that don't exist in the system.
|
||||
This extracts the business logic from RideCreateView and RideUpdateView.
|
||||
|
||||
Args:
|
||||
form_data: Cleaned form data containing search fields and selections
|
||||
submitter: User making the suggestions
|
||||
|
||||
Returns:
|
||||
Dictionary with lists of created submission IDs by type:
|
||||
{
|
||||
'manufacturers': [...],
|
||||
'designers': [...],
|
||||
'ride_models': [...],
|
||||
'total_submissions': int
|
||||
}
|
||||
"""
|
||||
from apps.moderation.services import ModerationService
|
||||
|
||||
result = {
|
||||
'manufacturers': [],
|
||||
'designers': [],
|
||||
'ride_models': [],
|
||||
'total_submissions': 0
|
||||
}
|
||||
|
||||
# Check for new manufacturer
|
||||
manufacturer_name = form_data.get("manufacturer_search")
|
||||
if manufacturer_name and not form_data.get("manufacturer"):
|
||||
submission = ModerationService.create_edit_submission_with_queue(
|
||||
content_object=None,
|
||||
changes={"name": manufacturer_name, "roles": ["MANUFACTURER"]},
|
||||
submitter=submitter,
|
||||
submission_type="CREATE",
|
||||
reason=f"New manufacturer suggested: {manufacturer_name}",
|
||||
)
|
||||
if submission:
|
||||
result['manufacturers'].append(submission.id)
|
||||
result['total_submissions'] += 1
|
||||
|
||||
# Check for new designer
|
||||
designer_name = form_data.get("designer_search")
|
||||
if designer_name and not form_data.get("designer"):
|
||||
submission = ModerationService.create_edit_submission_with_queue(
|
||||
content_object=None,
|
||||
changes={"name": designer_name, "roles": ["DESIGNER"]},
|
||||
submitter=submitter,
|
||||
submission_type="CREATE",
|
||||
reason=f"New designer suggested: {designer_name}",
|
||||
)
|
||||
if submission:
|
||||
result['designers'].append(submission.id)
|
||||
result['total_submissions'] += 1
|
||||
|
||||
# Check for new ride model
|
||||
ride_model_name = form_data.get("ride_model_search")
|
||||
manufacturer = form_data.get("manufacturer")
|
||||
if ride_model_name and not form_data.get("ride_model") and manufacturer:
|
||||
submission = ModerationService.create_edit_submission_with_queue(
|
||||
content_object=None,
|
||||
changes={
|
||||
"name": ride_model_name,
|
||||
"manufacturer": manufacturer.id,
|
||||
},
|
||||
submitter=submitter,
|
||||
submission_type="CREATE",
|
||||
reason=f"New ride model suggested: {ride_model_name}",
|
||||
)
|
||||
if submission:
|
||||
result['ride_models'].append(submission.id)
|
||||
result['total_submissions'] += 1
|
||||
|
||||
return result
|
||||
|
||||
Reference in New Issue
Block a user