phase7: add minimal read-only drf api with player search endpoints
This commit is contained in:
@ -1,6 +1,17 @@
|
||||
from datetime import date, timedelta
|
||||
|
||||
from django.db.models import Case, ExpressionWrapper, F, FloatField, Max, Q, Value, When
|
||||
from django.db.models import (
|
||||
Case,
|
||||
DecimalField,
|
||||
ExpressionWrapper,
|
||||
F,
|
||||
FloatField,
|
||||
IntegerField,
|
||||
Max,
|
||||
Q,
|
||||
Value,
|
||||
When,
|
||||
)
|
||||
from django.db.models.functions import Coalesce
|
||||
|
||||
from apps.players.models import Player
|
||||
@ -106,14 +117,42 @@ def filter_players(queryset, data: dict):
|
||||
)
|
||||
|
||||
queryset = queryset.annotate(
|
||||
games_played_value=Coalesce(Max("player_seasons__games_played"), Value(0)),
|
||||
games_played_value=Coalesce(
|
||||
Max("player_seasons__games_played"),
|
||||
Value(0, output_field=IntegerField()),
|
||||
output_field=IntegerField(),
|
||||
),
|
||||
mpg_value=Coalesce(Max(mpg_expression), Value(0.0)),
|
||||
ppg_value=Coalesce(Max("player_seasons__stats__points"), Value(0.0)),
|
||||
rpg_value=Coalesce(Max("player_seasons__stats__rebounds"), Value(0.0)),
|
||||
apg_value=Coalesce(Max("player_seasons__stats__assists"), Value(0.0)),
|
||||
spg_value=Coalesce(Max("player_seasons__stats__steals"), Value(0.0)),
|
||||
bpg_value=Coalesce(Max("player_seasons__stats__blocks"), Value(0.0)),
|
||||
top_efficiency=Coalesce(Max("player_seasons__stats__player_efficiency_rating"), Value(0.0)),
|
||||
ppg_value=Coalesce(
|
||||
Max("player_seasons__stats__points"),
|
||||
Value(0, output_field=DecimalField(max_digits=6, decimal_places=2)),
|
||||
output_field=DecimalField(max_digits=6, decimal_places=2),
|
||||
),
|
||||
rpg_value=Coalesce(
|
||||
Max("player_seasons__stats__rebounds"),
|
||||
Value(0, output_field=DecimalField(max_digits=6, decimal_places=2)),
|
||||
output_field=DecimalField(max_digits=6, decimal_places=2),
|
||||
),
|
||||
apg_value=Coalesce(
|
||||
Max("player_seasons__stats__assists"),
|
||||
Value(0, output_field=DecimalField(max_digits=6, decimal_places=2)),
|
||||
output_field=DecimalField(max_digits=6, decimal_places=2),
|
||||
),
|
||||
spg_value=Coalesce(
|
||||
Max("player_seasons__stats__steals"),
|
||||
Value(0, output_field=DecimalField(max_digits=6, decimal_places=2)),
|
||||
output_field=DecimalField(max_digits=6, decimal_places=2),
|
||||
),
|
||||
bpg_value=Coalesce(
|
||||
Max("player_seasons__stats__blocks"),
|
||||
Value(0, output_field=DecimalField(max_digits=6, decimal_places=2)),
|
||||
output_field=DecimalField(max_digits=6, decimal_places=2),
|
||||
),
|
||||
top_efficiency=Coalesce(
|
||||
Max("player_seasons__stats__player_efficiency_rating"),
|
||||
Value(0, output_field=DecimalField(max_digits=6, decimal_places=2)),
|
||||
output_field=DecimalField(max_digits=6, decimal_places=2),
|
||||
),
|
||||
)
|
||||
|
||||
return queryset.distinct()
|
||||
|
||||
Reference in New Issue
Block a user