[scrobbles] Fix log data parsing for tasks and boardgames

Add pagination to task and board game detail pages
This commit is contained in:
2025-07-30 11:37:57 -04:00
parent a7551ef162
commit 9437fdba60
6 changed files with 96 additions and 22 deletions

View File

@ -7,6 +7,7 @@ from typing import Optional
from dataclass_wizard import JSONWizard
from django.contrib.auth import get_user_model
from locations.models import GeoLocation
from people.models import Person
User = get_user_model()
@ -66,8 +67,7 @@ class WithOthersLogData(JSONDataclass):
@dataclass
class BoardGameScoreLogData(JSONDataclass):
user_id: Optional[int] = None
name_str: str = ""
person_id: Optional[int] = None
bgg_username: str = ""
color: Optional[str] = None
character: Optional[str] = None
@ -75,19 +75,19 @@ class BoardGameScoreLogData(JSONDataclass):
score: Optional[int] = None
win: Optional[bool] = None
new: Optional[bool] = None
rank: Optional[int] = None
seat_order: Optional[int] = None
role: Optional[str] = None
@property
def user(self) -> Optional[User]:
user = None
if self.user_id:
user = User.objects.filter(id=self.user_id).first()
return user
def person(self) -> Optional[Person]:
return Person.objects.filter(id=self.person_id).first()
@property
def name(self) -> str:
name = self.name_str
if self.user_id:
name = self.user.first_name
name = ""
if self.person:
name = self.person.name
return name
def __str__(self) -> str:
@ -106,17 +106,20 @@ class BoardGameLogData(LongPlayLogData):
serial_scrobble_id: Optional[int] = None
long_play_complete: Optional[bool] = None
players: Optional[list[BoardGameScoreLogData]] = None
location: Optional[str] = None
geo_location_id: Optional[int] = None
location_id: Optional[int] = None
difficulty: Optional[int] = None
solo: Optional[bool] = None
two_handed: Optional[bool] = None
expansion_ids: Optional[int] = None
@cached_property
def geo_location(self) -> Optional[GeoLocation]:
if self.geo_location_id:
return GeoLocation.objects.filter(id=self.geo_location_id).first()
@cached_property
def player_log(self) -> str:
return ", ".join([BoardGameScoreLogData(**player).__str__() for player in self.players])
@dataclass
class BookPageLogData(JSONDataclass):