1313class GoogleRegister (serializers .ModelSerializer ):
1414 token = serializers .SerializerMethodField ()
1515 avatar_url = serializers .URLField (write_only = True , required = False )
16+ from_invite_code = serializers .CharField (
17+ required = False ,
18+ allow_null = True ,
19+ allow_blank = True ,
20+ write_only = True
21+ )
1622
1723 class Meta :
1824 model = User
19- fields = ("user_id" , "email" , "username" , "token" , "avatar" , "avatar_url" )
25+ fields = ("user_id" , "email" , "username" , "token" , "avatar" , "avatar_url" , "from_invite_code" )
2026
2127 def get_token (self , obj ):
2228 refresh = RefreshToken .for_user (obj )
@@ -27,13 +33,29 @@ def get_token(self, obj):
2733
2834 @transaction .atomic
2935 def create (self , validated_data ):
36+ from user .models import InviteUser
37+
3038 avatar_url = validated_data .pop ("avatar_url" , None )
39+ invite_code = validated_data .pop ("from_invite_code" , None )
40+
41+ invite_obj = None
42+ if invite_code :
43+ invite_obj = InviteUser .objects .filter (invite_code = invite_code ).first ()
3144
3245 user , created = User .objects .get_or_create (
3346 email = validated_data ["email" ],
34- defaults = {"username" : validated_data ["username" ]},
47+ defaults = {
48+ "username" : validated_data ["username" ],
49+ "from_invite_code" : invite_obj ,
50+ "auth_provider" : "google" ,
51+ },
3552 )
3653
54+ if created and invite_obj :
55+ from django .db .models import F
56+ invite_obj .invited_count = F ('invited_count' ) + 1
57+ invite_obj .save (update_fields = ['invited_count' ])
58+
3759 if created and avatar_url :
3860 try :
3961 response = requests .get (avatar_url , timeout = 5 )
0 commit comments