feat: add shared scouting notes mvp
This commit is contained in:
@ -3,14 +3,14 @@ from __future__ import annotations
|
||||
from decimal import Decimal
|
||||
|
||||
from django.core.paginator import Paginator
|
||||
from django.db.models import Exists, OuterRef, Prefetch
|
||||
from django.db.models import Count, Exists, OuterRef, Prefetch
|
||||
from django.http import HttpResponseRedirect
|
||||
from django.shortcuts import get_object_or_404, render
|
||||
from django.urls import reverse
|
||||
from django.views.decorators.http import require_POST
|
||||
|
||||
from .forms import PlayerSearchForm
|
||||
from .models import FavoritePlayer, Player, PlayerSeason
|
||||
from .models import FavoritePlayer, Player, PlayerNote, PlayerSeason
|
||||
|
||||
PAGE_SIZE = 20
|
||||
PLAYER_SORTS = {
|
||||
@ -269,7 +269,7 @@ def player_list(request):
|
||||
|
||||
def player_detail(request, player_id: int):
|
||||
player = get_object_or_404(
|
||||
Player.objects.prefetch_related("roles", "specialties"),
|
||||
Player.objects.prefetch_related("roles", "specialties", "notes"),
|
||||
pk=player_id,
|
||||
)
|
||||
|
||||
@ -278,6 +278,7 @@ def player_detail(request, player_id: int):
|
||||
.select_related("season", "team", "competition", "stats")
|
||||
.order_by("-season__start_year", "team__name", "competition__name")
|
||||
)
|
||||
notes = player.notes.all()
|
||||
|
||||
return render(
|
||||
request,
|
||||
@ -285,6 +286,7 @@ def player_detail(request, player_id: int):
|
||||
{
|
||||
"player": player,
|
||||
"contexts": contexts,
|
||||
"notes": notes,
|
||||
"is_favorite": FavoritePlayer.objects.filter(player=player).exists(),
|
||||
},
|
||||
)
|
||||
@ -304,10 +306,27 @@ def remove_favorite(request, player_id: int):
|
||||
return redirect_to_next(request, reverse("scouting:player_detail", args=[player.id]))
|
||||
|
||||
|
||||
@require_POST
|
||||
def add_note(request, player_id: int):
|
||||
player = get_object_or_404(Player, pk=player_id)
|
||||
body = (request.POST.get("body") or "").strip()
|
||||
if body:
|
||||
PlayerNote.objects.create(player=player, body=body)
|
||||
return redirect_to_next(request, reverse("scouting:player_detail", args=[player.id]))
|
||||
|
||||
|
||||
@require_POST
|
||||
def delete_note(request, player_id: int, note_id: int):
|
||||
player = get_object_or_404(Player, pk=player_id)
|
||||
PlayerNote.objects.filter(player=player, pk=note_id).delete()
|
||||
return redirect_to_next(request, reverse("scouting:player_detail", args=[player.id]))
|
||||
|
||||
|
||||
def favorites_list(request):
|
||||
favorites = list(
|
||||
FavoritePlayer.objects.select_related("player")
|
||||
.prefetch_related("player__roles", "player__specialties")
|
||||
.annotate(note_count=Count("player__notes"))
|
||||
.order_by("-created_at", "player__full_name")
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user