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
31 changes: 31 additions & 0 deletions wadium/user/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,38 @@ def get_user(self, validated_data):
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.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',
)


class MyStorySerializer(serializers.ModelSerializer):
class Meta:
model = Story
Expand Down
48 changes: 47 additions & 1 deletion wadium/user/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@
from django.db import transaction
from django.utils import timezone
from django.shortcuts import get_object_or_404
from .serializers import UserSerializer, UserLoginSerializer, MyStorySerializer, UserStorySerializer

from .serializers import UserSerializer, UserLoginSerializer, UserSelfSerializer, UserSocialSerializer, MyStorySerializer, UserStorySerializer
from .models import EmailAddress, EmailAuth, UserProfile
from .permissions import UserAccessPermission
from story.paginators import StoryPagination
Expand Down Expand Up @@ -118,6 +119,50 @@ 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 = users.select_related('userprofile').prefetch_related('emails')
gyusang marked this conversation as resolved.
Show resolved Hide resolved
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()
if user.is_authenticated:
return Response(self.get_serializer(user).data)
else :
return Response(status=status.HTTP_404_NOT_FOUND)

#자신의 정보 확인
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

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

@action(detail=True, methods=['GET'])
def story(self, request, pk=None):
if pk == 'me':
Expand Down Expand Up @@ -163,3 +208,4 @@ def story(self, request, pk=None):
assert page is not None
serializer = self.get_serializer(page, many=True)
return self.get_paginated_response(serializer.data)