Skip to content

Commit 5b71f2d

Browse files
committed
feat: back invite system into registrantion
1 parent c1259c0 commit 5b71f2d

3 files changed

Lines changed: 32 additions & 3 deletions

File tree

backend/NextVibeAPI/user/serializers_pac/google_registration.py

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,16 @@
1313
class 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)

backend/NextVibeAPI/user/views_pac/google_registration.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@ def post(self, request, *args, **kwargs):
2929
serializer = GoogleRegister(user)
3030
return Response(serializer.data, status=200)
3131

32+
if "from_invite_code" not in request.data:
33+
return Response({"error": "invite_code_required"}, status=status.HTTP_400_BAD_REQUEST)
34+
3235
username = request.data.get("username")
3336
avatar_url = request.data.get("avatar_url")
3437
if not username:

backend/NextVibeAPI/user/views_pac/wallet_singin.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,13 @@ def post(self, request):
4444
'username': user.username
4545
})
4646
else:
47+
if "from_invite_code" not in request.data:
48+
return Response({"error": "invite_code_required"}, status=status.HTTP_400_BAD_REQUEST)
49+
4750
serializer = UserWalletSignInSerializer(data={
4851
"wallet_address": wallet_address,
49-
"username": username
52+
"username": username,
53+
"from_invite_code": request.data.get("from_invite_code")
5054
})
5155
if serializer.is_valid():
5256
user = serializer.save()

0 commit comments

Comments
 (0)