Skip to content

Commit 232b84c

Browse files
authored
Merge: drf-spectacluar 스키마 추가, 메시지 정렬 오류 수정, 테스트코드 수정
[Inspection] drf-spectacluar 스키마 추가, 메시지 정렬 오류 수정, 테스트코드 수정
2 parents 3ed3b89 + 96598ed commit 232b84c

File tree

7 files changed

+52
-16
lines changed

7 files changed

+52
-16
lines changed

apps/chat/serializers.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ class Meta:
7777
class EnterChatroomSerializer(serializers.ModelSerializer[Chatroom]):
7878
product_image = serializers.SerializerMethodField() # 상품 이미지
7979
product_name = serializers.CharField(source="product.name", read_only=True)
80-
product_rental_fee = serializers.CharField(source="product.rental_fee", read_only=True)
80+
product_rental_fee = serializers.IntegerField(source="product.rental_fee", read_only=True)
8181
product_condition = serializers.CharField(source="product.condition", read_only=True)
8282

8383
class Meta:

apps/chat/tests.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -167,8 +167,8 @@ def test_채팅메시지가_db_redis에_분산되어_있는경우(self) -> None:
167167
else:
168168
data["nickname"] = self.user.nickname
169169
self.redis_conn.lpush(key, json.dumps(data))
170-
# self.assertEqual(self.redis_conn.llen(key), 10)
171-
# self.assertEqual(Message.objects.count(), 50)
170+
self.assertEqual(self.redis_conn.llen(key), 10)
171+
self.assertEqual(Message.objects.count(), 50)
172172

173173
url = reverse("chat-detail", kwargs={"chatroom_id": self.chatroom.id})
174174
response = self.client.get(url, headers={"Authorization": f"Bearer {self.token}"})

apps/chat/utils.py

+2-4
Original file line numberDiff line numberDiff line change
@@ -176,13 +176,11 @@ def get_chatroom_message(chatroom_id: int) -> Any:
176176
# 디비에 저장된 메시지가 30-stored_message_num 보다 많으면 슬라이싱해서 필요한 만큼의 데이터를 가져옴
177177
if len(db_messages) >= 30 - stored_message_num:
178178
serialized_messages = MessageSerializer(db_messages[: 30 - stored_message_num], many=True).data
179-
serialized_message_list = [serialized_messages]
180-
return messages + serialized_message_list
179+
return messages + list(serialized_messages)
181180

182181
# 디비에 저장된 메시지가 30-stored_message_num 보다 적으면 db에 저장된 채팅방의 모든 메시지를 가져옴
183182
serialized_messages = MessageSerializer(db_messages, many=True).data
184-
serialized_message_list = [serialized_messages]
185-
return messages + serialized_message_list
183+
return messages + list(serialized_messages)
186184

187185
# 레디스에 해당 채팅방 그룹 네임으로 지정된 키값이 없으면 데이터베이스에서 채팅 메시지를 가져옴
188186
db_messages = Message.objects.filter(chatroom_id=chatroom_id)

apps/chat/views.py

+27-6
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22
from django.db.models import Q
33
from django.http import HttpRequest, HttpResponse
44
from django.shortcuts import render
5-
from drf_spectacular.utils import extend_schema
5+
from drf_spectacular.utils import extend_schema, inline_serializer
6+
from rest_framework import serializers as serializer
67
from rest_framework import status
78
from rest_framework.request import Request
89
from rest_framework.response import Response
@@ -15,6 +16,7 @@
1516
check_entered_chatroom,
1617
delete_chatroom,
1718
)
19+
from apps.user.api_schema import UserInfoSerializer
1820

1921

2022
def render_chat(request: HttpRequest) -> HttpResponse:
@@ -23,8 +25,18 @@ def render_chat(request: HttpRequest) -> HttpResponse:
2325

2426
class ChatRoomView(APIView):
2527
@extend_schema(
26-
request=serializers.ChatroomListSerializer,
27-
responses=serializers.ChatroomListSerializer,
28+
responses=inline_serializer(
29+
name="ChatRoomSerializer",
30+
fields={
31+
"id": serializer.IntegerField(),
32+
"product": serializer.UUIDField(),
33+
"product_image": serializer.URLField(),
34+
"last_message": serializer.CharField(),
35+
"unread_chat_count": serializer.IntegerField(),
36+
"user_info": UserInfoSerializer(),
37+
},
38+
many=True,
39+
),
2840
description="유저가 참여한 채팅방 리스트를 내려주는 get메서드",
2941
)
3042
def get(self, request: Request) -> Response:
@@ -58,10 +70,19 @@ def post(self, request: Request) -> Response:
5870

5971
class ChatDetailView(APIView):
6072
@extend_schema(
61-
responses=serializers.EnterChatroomSerializer,
73+
responses=inline_serializer(
74+
name="inline_serializer",
75+
fields={
76+
"product_image": serializer.CharField(),
77+
"product_name": serializer.CharField(),
78+
"product_rental_fee": serializer.CharField(),
79+
"product_condition": serializer.CharField(),
80+
"messages": serializers.MessageSerializer(many=True),
81+
},
82+
),
6283
description="""
63-
채팅방에 입장시 채팅방의 메시지를 내려주고, 상품에 대한 정보를 내려줌
64-
""",
84+
채팅방에 입장시 채팅방의 메시지를 내려주고, 상품에 대한 정보를 내려줌
85+
""",
6586
)
6687
def get(self, request: Request, chatroom_id: int) -> Response:
6788
try:

apps/product/views.py

-1
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,5 @@ class RentalHistoryUpdateView(UpdateAPIView[RentalHistory]):
9393
permission_classes = [permissions.IsAuthenticated]
9494

9595
def get_queryset(self) -> QuerySet[RentalHistory]:
96-
print(self.request.data)
9796
queryset = RentalHistory.objects.all()
9897
return queryset

apps/user/api_schema.py

+5
Original file line numberDiff line numberDiff line change
@@ -41,3 +41,8 @@ class SignupRequestSchema(serializers.Serializer[Account]):
4141
class SignupResponseSchema(serializers.Serializer[Account]):
4242
access = serializers.CharField()
4343
refresh = serializers.CharField()
44+
45+
46+
class UserInfoSerializer(serializers.Serializer[Account]):
47+
nickname = serializers.CharField()
48+
profile_img = serializers.ImageField()

apps/user/views.py

+15-2
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@
1111
from django.core.cache import cache
1212
from django.core.files.base import ContentFile
1313
from django.utils import timezone
14-
from drf_spectacular.utils import extend_schema
15-
from rest_framework import permissions, status
14+
from drf_spectacular.utils import extend_schema, inline_serializer
15+
from rest_framework import permissions, serializers, status
1616
from rest_framework.request import Request
1717
from rest_framework.response import Response
1818
from rest_framework.views import APIView
@@ -156,6 +156,19 @@ class OAuthLoginView(APIView):
156156
def get_provider_info(self) -> dict[str, Any]:
157157
raise NotImplementedError
158158

159+
@extend_schema(
160+
request=inline_serializer(name="CodeSeralizer", fields={"code": serializers.CharField()}),
161+
responses=inline_serializer(
162+
name="SocialLoginSeralizer",
163+
fields={
164+
"access": serializers.CharField(),
165+
"refresh": serializers.CharField(),
166+
"email": serializers.CharField(),
167+
"nickname": serializers.CharField(),
168+
"profile_image": serializers.ImageField(),
169+
},
170+
),
171+
)
159172
def post(self, request: Request, *args: Any, **kwargs: Any) -> Response:
160173
code = request.data.get("code")
161174
if not code:

0 commit comments

Comments
 (0)