Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature#7.1 Update #19

Merged
merged 12 commits into from
Jan 3, 2021
38 changes: 38 additions & 0 deletions wadium/user/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -171,3 +171,41 @@ def get_user(self, validated_data):
return email_auth.email_address.user
else:
raise NotImplementedError()

#자신의 정보 확인/수정
class UserSelfSerializer(serializers.ModelSerializer):
name = serializers.CharField()
bio = serializers.CharField(required=False)
profile_image = serializers.URLField(required=False)
email = serializers.CharField()
gyusang marked this conversation as resolved.
Show resolved Hide resolved
connection = serializers.SerializerMethodField()
class Meta:
model = UserProfile
fields = (
'name',
'bio',
'profile_image',
'email',
'connection'
)
def get_connection(self, user):
return UserSocialSerializer(user, context=self.context).data

class UserSocialSerializer(serializers.ModelSerializer):
#google = serializers.SerializerMethodField()
#facebook = serializers.SerializerMethodField()
google = serializers.CharField(source='user.usergoogle.google_sub', required=False)
facebook = serializers.CharField(source='user.userfacebook.facebook_sub', required=False)
gyusang marked this conversation as resolved.
Show resolved Hide resolved
class Meta:
model = User
fields = (
'google',
'facebook',
)

# def get_google(self, user):
# return UserGoogle.objects.filter(user=user.user).last()

# def get_facebook(self, user):
# return UserFacebook.objects.filter(user=user.user).last()

46 changes: 46 additions & 0 deletions wadium/user/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -96,3 +96,49 @@ def login(self, request):
def logout(self, request):
logout(request)
return Response(status=status.HTTP_204_NO_CONTENT)

def list(self, request):
username = request.query_params.get('username')
users = self.get_queryset().filter(username__icontains=username)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

users = users.select_related('userprofile').prefetch_related('emails') 등으로 N+1 문제를 완화하면 좋겠습니다.

if users.count() == 0:
return Response(status=status.HTTP_404_NOT_FOUND)
else:
return Response(self.get_serializer(users, many=True).data)

@action(detail=True, methods=['GET'])
def about(self, request, pk):
user = request.user if pk == 'me' else self.get_object()
return Response(self.get_serializer(user).data)
gyusang marked this conversation as resolved.
Show resolved Hide resolved

#자신의 정보 확인
def retrieve(self, request, pk=None):
if pk != 'me':
return Response({"error": "Can't show other user's information"}, status=status.HTTP_403_FORBIDDEN)

profile = request.user.userprofile
serializer = self.get_serializer(profile)
return Response(serializer.data)

#자신의 정보 수정
def update(self, request, pk=None):
if pk != 'me':
return Response({"error": "Can't update other user's information"}, status=status.HTTP_403_FORBIDDEN)

profile = request.user.userprofile
data = request.data.copy()
gyusang marked this conversation as resolved.
Show resolved Hide resolved

serializer = self.get_serializer(profile, data=data, partial=True)
serializer.is_valid(raise_exception=True)
serializer.update(profile, serializer.validated_data)
return Response(serializer.data, status=status.HTTP_200_OK)

def get_serializer_class(self):
if self.action == 'update' or self.action == 'retrieve':
return UserSelfSerializer
else:
return UserSerializer

#class UserSocialLoginViewSet(viwesets.GenericViewSet):
# queryset = User.objects.all()
# serializer_class = SocialSerializer