Skip to content

Commit

Permalink
Merge branch 'hotfix'
Browse files Browse the repository at this point in the history
  • Loading branch information
hepheir committed Aug 17, 2023
2 parents 0ebd189 + 266f72c commit b604bfb
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 35 deletions.
36 changes: 13 additions & 23 deletions feed/serializers.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
from typing import Union

from django.conf import settings
from django.contrib.auth.models import AbstractBaseUser, AnonymousUser
from django.contrib.auth.models import AnonymousUser
from django.http import HttpRequest
from rest_framework import serializers

from user.models import User
Expand Down Expand Up @@ -47,14 +48,11 @@ class Meta:
model = Post
exclude = ['created_by']

user: Union[AbstractBaseUser, AnonymousUser]

def __init__(self, user: Union[AbstractBaseUser, AnonymousUser], instance=None, data=None, **kwargs):
if data is None:
super().__init__(instance, **kwargs)
else:
super().__init__(data=data, **kwargs)
self.user = user
def _get_current_user(self) -> Union[User, AnonymousUser]:
if 'request' not in self.context:
return AnonymousUser()
request: HttpRequest = self.context['request']
return request.user

def get_image_urls(self, obj: Post):
return [settings.HOSTNAME + o.image.url for o in obj.postimage_set.order_by('order')]
Expand All @@ -66,21 +64,13 @@ def get_is_edited(self, obj: Post):
return obj.created_at != obj.modified_at

def get_is_liked(self, obj: Post):
return not self.user.is_anonymous and self.is_liked_by(obj, self.user)

def is_liked_by(self, post: Post, user: User) -> bool:
try:
post.likedpost_set.get(user=user)
except LikedPost.DoesNotExist:
user = self._get_current_user()
if user.is_anonymous:
return False
return True
return obj.likedpost_set.filter(user=user).exists()

def get_is_saved(self, obj: Post):
return not self.user.is_anonymous and self.is_saved_by(obj, self.user)

def is_saved_by(self, post: Post, user: User) -> bool:
try:
post.savedpost_set.get(user=user)
except SavedPost.DoesNotExist:
user = self._get_current_user()
if user.is_anonymous:
return False
return True
return obj.savedpost_set.filter(user=user).exists()
19 changes: 8 additions & 11 deletions feed/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ def get(self, request: HttpRequest):
# TODO: 추천 알고리즘 만들기
queryset = queryset.order_by('-likedpost')
page = simple_pagination.paginate_queryset(queryset, request, view=self)
serializer = PostSerializer(user=request.user, instance=page, many=True)
serializer = PostSerializer(instance=page, many=True)
return simple_pagination.get_paginated_response(serializer.data)

def post(self, request: HttpRequest):
Expand Down Expand Up @@ -70,7 +70,7 @@ def post(self, request: HttpRequest):
postimage.image = image
postimage.order = order
postimage.save()
serializer = PostSerializer(user=request.user, instance=post)
serializer = PostSerializer(instance=post)
return Response(serializer.data, status=HTTPStatus.CREATED)

def get_user_by_id_or_handle(self, id_or_handle: str) -> User:
Expand All @@ -90,12 +90,12 @@ def is_uuid(self, uuid_to_test: str) -> bool:


@permission_classes([IsAuthenticatedOrReadOnly])
@authentication_classes([JWTAuthentication])
@authentication_classes([JWTAuthentication]) # 토큰을 사용한 로그인 검사 (외부모듈 사용)
class FeedDetailView(APIView):
def get(self, request: HttpRequest, post_id: UUID, **kwargs):
post = get_object_or_404(Post, id=post_id)
serializer = PostSerializer(user=request.user, instance=post)
return Response(serializer.data, status=HTTPStatus.OK)
post = get_object_or_404(Post, id=post_id) # 피드 아이디에 해당하는 피드 가져옴
serializer = PostSerializer(instance=post) # 로그인한 사용자 정보를 반영하여 피드 정보를 JSON으로 변경
return Response(serializer.data, status=HTTPStatus.OK) # 재전송

def put(self, request: HttpRequest, post_id: UUID, **kwargs):
post = get_object_or_404(Post, id=post_id)
Expand Down Expand Up @@ -124,7 +124,7 @@ def put(self, request: HttpRequest, post_id: UUID, **kwargs):
except ValueError:
print(postimage.image.url, 'not found from', image_urls)
postimage.delete()
serializer = PostSerializer(user=request.user, instance=post)
serializer = PostSerializer(instance=post)
return Response(serializer.data, status=HTTPStatus.OK)

def delete(self, request: HttpRequest, post_id: UUID, **kwargs):
Expand Down Expand Up @@ -197,10 +197,7 @@ def post(self, request: HttpRequest, post_id: UUID):
@authentication_classes([JWTAuthentication])
class FeedCommentDetailView(APIView):
def delete(self, request: HttpRequest, post_id: UUID, comment_id: UUID):
try:
comment = Comment.objects.get(id=comment_id)
except Comment.DoesNotExist:
return Response(status=HTTPStatus.NOT_FOUND)
comment = get_object_or_404(Comment, id=comment_id)
if comment.created_by != request.user:
return Response(status=HTTPStatus.FORBIDDEN)
comment.delete()
Expand Down
2 changes: 1 addition & 1 deletion user/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -229,7 +229,7 @@ def post(self, request, user_id, feed_id):
saved_post.save()
user = saved_post.user
post = saved_post.post
serializer = PostSerializer(user=user, instance=post)
serializer = PostSerializer(instance=post)
return Response(serializer.data, status=HTTPStatus.CREATED)

def delete(self, request, user_id, feed_id):
Expand Down

0 comments on commit b604bfb

Please sign in to comment.