Skip to content

Commit

Permalink
Merge pull request #19 from wafflestudio18-5/Feature/#7.1
Browse files Browse the repository at this point in the history
Feature#7.1 Update
  • Loading branch information
yuri-0415 authored Jan 3, 2021
2 parents 34270e6 + 08c244d commit e868965
Show file tree
Hide file tree
Showing 2 changed files with 85 additions and 1 deletion.
33 changes: 33 additions & 0 deletions wadium/user/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,39 @@ def get_user(self, validated_data):
raise NotImplementedError()


class UserSelfSerializer(serializers.ModelSerializer):
name = serializers.CharField()
bio = serializers.CharField(required=False)
profile_image = serializers.URLField(required=False)
email = serializers.CharField(read_only=True)
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)

class Meta:
model = User
fields = (
'google',
'facebook',
)


class MyStorySerializer(serializers.ModelSerializer):
class Meta:
model = Story
Expand Down
53 changes: 52 additions & 1 deletion wadium/user/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@
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 +120,55 @@ def logout(self, request):
logout(request)
return Response(status=status.HTTP_204_NO_CONTENT)

def list(self, request):
username = request.query_params.get('username', '')
if not username:
return Response({
'error': 'username query is required.'
}, status=status.HTTP_400_BAD_REQUEST)
users = self.get_queryset().filter(username__icontains=username).select_related('userprofile')
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)
if not request.user.is_authenticated:
return Response(status=status.HTTP_404_NOT_FOUND)
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

0 comments on commit e868965

Please sign in to comment.