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: 45 additions & 1 deletion wadium/user/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
from django.db import transaction
from django.utils import timezone
from django.shortcuts import get_object_or_404
from .serializers import UserSerializer, UserLoginSerializer
from .serializers import UserSerializer, UserLoginSerializer, UserSelfSerializer, UserSocialSerializer
from .models import EmailAddress, EmailAuth, UserProfile

from rest_framework import status, viewsets
Expand Down Expand Up @@ -96,3 +96,47 @@ 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 = 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