class BiddingView(APIView):
permission_classes = [permissions.IsAuthenticated]
def patch(self, request, article_id):
article = get_object_or_404(Article, id=article_id)
if timezone.now() > article.finished_at:
return Response({'message': "경매가 종료된 상품입니다."}, status=status.HTTP_400_BAD_REQUEST)
elif article.user == request.user:
return Response({'message': "게시자는 경매에 참여할 수 없습니다."}, status=status.HTTP_400_BAD_REQUEST)
elif article.max_user == request.user:
return Response({'message': "최고입찰자가 재입찰 할 수 없습니다."}, status=status.HTTP_400_BAD_REQUEST)
elif article.max_point >= int(request.data['max_point']):
return Response({'message': "최고가보다 낮습니다."}, status=status.HTTP_400_BAD_REQUEST)
else:
serializer = BiddingSerializer(article, data=request.data)
if serializer.is_valid():
serializer.save(max_user=request.user)
return Response(serializer.data)
else:
return Response({"message": "권한이 없습니다."}, status=status.HTTP_403_FORBIDDEN)
경매 기능을 구현중이다.
실시간 경매 기능을 구현하기는 아직 까다롭기 때문에 트리거는 유저가 들어올 때 새로 업데이트하는 걸로 생각했다. 유저가 메인페이지에 들어와 get요청을 날리면 페이지를 보여줌과 동시에 경매가 끝난 아이템이 있는지 체크하고 상태를 바꿔준다. 그리고 상태가 바뀐 아이템이 있다면 그 아이템을 체크해서 입찰자를 정해준다.
오늘 내에 마무리 짓는다!