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