phase7: add minimal read-only drf api with player search endpoints

This commit is contained in:
Alfredo Di Stasio
2026-03-10 11:13:30 +01:00
parent ecd665e872
commit fa4c901bc1
12 changed files with 376 additions and 8 deletions

View File

@ -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()