mirror of
https://github.com/pacnpal/thrillwiki_django_no_react.git
synced 2025-12-20 06:51:08 -05:00
Refactor code structure and remove redundant changes
This commit is contained in:
@@ -4,8 +4,7 @@ API serializers for the ride ranking system.
|
||||
|
||||
from rest_framework import serializers
|
||||
from drf_spectacular.utils import extend_schema_serializer, OpenApiExample
|
||||
|
||||
from apps.rides.models import RideRanking, RidePairComparison, RankingSnapshot
|
||||
from django.utils.functional import cached_property
|
||||
|
||||
|
||||
@extend_schema_serializer(
|
||||
@@ -45,8 +44,19 @@ class RideRankingSerializer(serializers.ModelSerializer):
|
||||
rank_change = serializers.SerializerMethodField()
|
||||
previous_rank = serializers.SerializerMethodField()
|
||||
|
||||
@cached_property
|
||||
def _model(self):
|
||||
from apps.rides.models import RideRanking
|
||||
|
||||
return RideRanking
|
||||
|
||||
class Meta:
|
||||
model = RideRanking
|
||||
@property
|
||||
def model(self):
|
||||
from apps.rides.models import RideRanking
|
||||
|
||||
return RideRanking
|
||||
|
||||
fields = [
|
||||
"id",
|
||||
"rank",
|
||||
@@ -79,6 +89,8 @@ class RideRankingSerializer(serializers.ModelSerializer):
|
||||
|
||||
def get_rank_change(self, obj):
|
||||
"""Calculate rank change from previous snapshot."""
|
||||
from apps.rides.models import RankingSnapshot
|
||||
|
||||
latest_snapshots = RankingSnapshot.objects.filter(ride=obj.ride).order_by(
|
||||
"-snapshot_date"
|
||||
)[:2]
|
||||
@@ -89,6 +101,8 @@ class RideRankingSerializer(serializers.ModelSerializer):
|
||||
|
||||
def get_previous_rank(self, obj):
|
||||
"""Get previous rank."""
|
||||
from apps.rides.models import RankingSnapshot
|
||||
|
||||
latest_snapshots = RankingSnapshot.objects.filter(ride=obj.ride).order_by(
|
||||
"-snapshot_date"
|
||||
)[:2]
|
||||
@@ -106,7 +120,7 @@ class RideRankingDetailSerializer(serializers.ModelSerializer):
|
||||
ranking_history = serializers.SerializerMethodField()
|
||||
|
||||
class Meta:
|
||||
model = RideRanking
|
||||
model = "rides.RideRanking"
|
||||
fields = [
|
||||
"id",
|
||||
"rank",
|
||||
@@ -167,6 +181,7 @@ class RideRankingDetailSerializer(serializers.ModelSerializer):
|
||||
def get_head_to_head_comparisons(self, obj):
|
||||
"""Get top head-to-head comparisons."""
|
||||
from django.db.models import Q
|
||||
from apps.rides.models import RidePairComparison
|
||||
|
||||
comparisons = (
|
||||
RidePairComparison.objects.filter(Q(ride_a=obj.ride) | Q(ride_b=obj.ride))
|
||||
@@ -207,6 +222,8 @@ class RideRankingDetailSerializer(serializers.ModelSerializer):
|
||||
|
||||
def get_ranking_history(self, obj):
|
||||
"""Get recent ranking history."""
|
||||
from apps.rides.models import RankingSnapshot
|
||||
|
||||
history = RankingSnapshot.objects.filter(ride=obj.ride).order_by(
|
||||
"-snapshot_date"
|
||||
)[:30]
|
||||
@@ -228,7 +245,7 @@ class RankingSnapshotSerializer(serializers.ModelSerializer):
|
||||
park_name = serializers.CharField(source="ride.park.name", read_only=True)
|
||||
|
||||
class Meta:
|
||||
model = RankingSnapshot
|
||||
model = "rides.RankingSnapshot"
|
||||
fields = [
|
||||
"id",
|
||||
"ride",
|
||||
|
||||
Reference in New Issue
Block a user