1- from typing import Optional
1+ from typing import TYPE_CHECKING , Annotated
22
3+ from submissions .models import Submission as SubmissionModel
34from strawberry .scalars import JSON
45import strawberry
56from strawberry import ID
67
78from api .submissions .permissions import CanSeeSubmissionPrivateFields
89
10+ if TYPE_CHECKING :
11+ from api .submissions .types import Submission
12+
913
1014@strawberry .type
1115class Participant :
1216 id : ID
13- user_id : ID
1417 bio : str
1518 website : str
1619 photo : str | None
@@ -21,22 +24,39 @@ class Participant:
2124 linkedin_url : str
2225 facebook_url : str
2326 mastodon_handle : str
24- speaker_id : strawberry .Private [int ]
2527 fullname : str
26- speaker_availabilities : JSON
2728
2829 _speaker_level : strawberry .Private [str ]
2930 _previous_talk_video : strawberry .Private [str ]
31+ _conference_id : strawberry .Private [int ]
32+ _user_id : strawberry .Private [int ]
33+ _speaker_availabilities : strawberry .Private [int ]
34+
35+ @strawberry .field
36+ def proposals (
37+ self , info
38+ ) -> list [Annotated ["Submission" , strawberry .lazy ("api.submissions.types" )]]:
39+ return SubmissionModel .objects .for_conference (self ._conference_id ).filter (
40+ speaker_id = self ._user_id ,
41+ status = SubmissionModel .STATUS .accepted ,
42+ )
3043
3144 @strawberry .field
32- def speaker_level (self , info ) -> Optional [str ]:
45+ def speaker_availabilities (self , info ) -> JSON | None :
46+ if not CanSeeSubmissionPrivateFields ().has_permission (self , info ):
47+ return None
48+
49+ return self ._speaker_availabilities
50+
51+ @strawberry .field
52+ def speaker_level (self , info ) -> str | None :
3353 if not CanSeeSubmissionPrivateFields ().has_permission (self , info ):
3454 return None
3555
3656 return self ._speaker_level
3757
3858 @strawberry .field
39- def previous_talk_video (self , info ) -> Optional [ str ] :
59+ def previous_talk_video (self , info ) -> str | None :
4060 if not CanSeeSubmissionPrivateFields ().has_permission (self , info ):
4161 return None
4262
@@ -46,20 +66,20 @@ def previous_talk_video(self, info) -> Optional[str]:
4666 def from_model (cls , instance ):
4767 return cls (
4868 id = instance .hashid ,
49- user_id = instance .user_id ,
50- speaker_id = instance .user_id ,
5169 fullname = instance .user .fullname ,
5270 photo = instance .photo_url ,
5371 photo_id = instance .photo_file_id ,
5472 bio = instance .bio ,
5573 website = instance .website ,
5674 public_profile = instance .public_profile ,
57- _speaker_level = instance .speaker_level ,
58- _previous_talk_video = instance .previous_talk_video ,
5975 twitter_handle = instance .twitter_handle ,
6076 instagram_handle = instance .instagram_handle ,
6177 linkedin_url = instance .linkedin_url ,
6278 facebook_url = instance .facebook_url ,
6379 mastodon_handle = instance .mastodon_handle ,
64- speaker_availabilities = instance .speaker_availabilities or {},
80+ _speaker_availabilities = instance .speaker_availabilities or {},
81+ _conference_id = instance .conference_id ,
82+ _user_id = instance .user_id ,
83+ _speaker_level = instance .speaker_level ,
84+ _previous_talk_video = instance .previous_talk_video ,
6585 )
0 commit comments