mirror of
https://github.com/pacnpal/thrillwiki_django_no_react.git
synced 2025-12-20 02:11:08 -05:00
89 lines
2.6 KiB
Python
89 lines
2.6 KiB
Python
"""
|
|
Search domain serializers for ThrillWiki API v1.
|
|
|
|
This module contains serializers for entity search, location search,
|
|
and other search functionality.
|
|
"""
|
|
|
|
from rest_framework import serializers
|
|
from drf_spectacular.utils import (
|
|
extend_schema_serializer,
|
|
extend_schema_field,
|
|
OpenApiExample,
|
|
)
|
|
|
|
|
|
# === CORE ENTITY SEARCH SERIALIZERS ===
|
|
|
|
|
|
class EntitySearchInputSerializer(serializers.Serializer):
|
|
"""Input serializer for entity search requests."""
|
|
|
|
query = serializers.CharField(max_length=255, help_text="Search query string")
|
|
entity_types = serializers.ListField(
|
|
child=serializers.ChoiceField(choices=["park", "ride", "company", "user"]),
|
|
required=False,
|
|
help_text="Types of entities to search for",
|
|
)
|
|
limit = serializers.IntegerField(
|
|
default=10,
|
|
min_value=1,
|
|
max_value=50,
|
|
help_text="Maximum number of results to return",
|
|
)
|
|
|
|
|
|
class EntitySearchResultSerializer(serializers.Serializer):
|
|
"""Serializer for individual entity search results."""
|
|
|
|
id = serializers.IntegerField()
|
|
name = serializers.CharField()
|
|
slug = serializers.CharField()
|
|
type = serializers.CharField()
|
|
description = serializers.CharField()
|
|
relevance_score = serializers.FloatField()
|
|
|
|
# Context-specific info
|
|
context = serializers.JSONField(help_text="Additional context based on entity type")
|
|
|
|
|
|
class EntitySearchOutputSerializer(serializers.Serializer):
|
|
"""Output serializer for entity search results."""
|
|
|
|
query = serializers.CharField()
|
|
total_results = serializers.IntegerField()
|
|
results = EntitySearchResultSerializer(many=True)
|
|
search_time_ms = serializers.FloatField()
|
|
|
|
|
|
# === LOCATION SEARCH SERIALIZERS ===
|
|
|
|
|
|
class LocationSearchResultSerializer(serializers.Serializer):
|
|
"""Serializer for location search results."""
|
|
|
|
display_name = serializers.CharField()
|
|
lat = serializers.FloatField()
|
|
lon = serializers.FloatField()
|
|
type = serializers.CharField()
|
|
importance = serializers.FloatField()
|
|
address = serializers.JSONField()
|
|
|
|
|
|
class LocationSearchOutputSerializer(serializers.Serializer):
|
|
"""Output serializer for location search."""
|
|
|
|
results = LocationSearchResultSerializer(many=True)
|
|
query = serializers.CharField()
|
|
count = serializers.IntegerField()
|
|
|
|
|
|
class ReverseGeocodeOutputSerializer(serializers.Serializer):
|
|
"""Output serializer for reverse geocoding."""
|
|
|
|
display_name = serializers.CharField()
|
|
lat = serializers.FloatField()
|
|
lon = serializers.FloatField()
|
|
address = serializers.JSONField()
|
|
type = serializers.CharField()
|