change message_list_api to return unread message num

Brightcells %!s(int64=9) %!d(string=hace) años
padre
commit
b7a21719c7
Se han modificado 3 ficheros con 24 adiciones y 10 borrados
  1. 8 8
      message/views.py
  2. 1 0
      utils/redis/rkeys.py
  3. 15 2
      utils/redis/rmessage.py

+ 8 - 8
message/views.py

@@ -11,6 +11,7 @@ from utils.page_utils import pagination
11 11
 from utils.error.errno_utils import UserStatusCode, MessageStatusCode
12 12
 from utils.error.response_utils import response
13 13
 
14
+from utils.redis.rmessage import set_system_message_read_info, get_system_message_read_info
14 15
 from utils.redis.rmessage import set_system_message_delete_info, get_system_message_delete_info
15 16
 
16 17
 
@@ -28,23 +29,21 @@ def message_list_api(request):
28 29
     for message in messages:
29 30
         msg_type = message['msg_type']
30 31
         if msg_type == UserMessageInfo.SYSTEM:
32
+            read_message_ids = get_system_message_read_info(user_id)
31 33
             deleted_message_ids = get_system_message_delete_info(user_id)
32
-            type_messages = SystemMessageInfo.objects.filter(
34
+            type_unread_messages = SystemMessageInfo.objects.filter(
33 35
                 status=True,
34 36
             ).exclude(
35
-                pk__in=deleted_message_ids,
37
+                pk__in=list(set(read_message_ids + deleted_message_ids)),
36 38
             )
37 39
         else:
38
-            type_messages = UserMessageInfo.objects.filter(
40
+            type_unread_messages = UserMessageInfo.objects.filter(
39 41
                 to_uid=user_id,
40 42
                 msg_type=msg_type,
43
+                read=False,
41 44
                 status=True,
42 45
             )
43
-        type_messages = type_messages.order_by(
44
-            '-pk'
45
-        )[:settings.MESSAGE_NUM_PER_PAGE]
46
-        type_messages = [msg.msg_info(user_id) for msg in type_messages]
47
-        message['msg_list'] = type_messages
46
+        message['msg_unread_num'] = type_unread_messages.count()
48 47
         final_messages.append(message)
49 48
 
50 49
     return JsonResponse({
@@ -121,6 +120,7 @@ def message_type_read_api(request, msg_type=None):
121 120
         if _all == 'true':  # 系统消息全部读取
122 121
             for msg in SystemMessageInfo.objects.filter(status=True):
123 122
                 SystemMessageReadInfo.objects.get_or_create(user_id=user_id, msg_id=msg.pk)
123
+        get_system_message_read_info(user_id)
124 124
     else:
125 125
         if pk > 0:  # 用户(点赞/评论)消息单个读取
126 126
             UserMessageInfo.objects.filter(pk=pk, to_uid=user_id).update(read=True)

+ 1 - 0
utils/redis/rkeys.py

@@ -24,4 +24,5 @@ LENSMAN_PHOTO_HAGGLE_TIMES = 'lensman:photo:haggle:times:%s:%s:%s'  # STRING,
24 24
 LENSMAN_PHOTO_ORDER_RECORD = 'lensman:photo:order:record:%s:%s'  # STRING,摄影师照片购买记录,photo_id、user_id
25 25
 
26 26
 # 系统消息相关
27
+SYSTEM_MESSAGE_READ_INFO = 'system:message:read:info:%s'  # STRING,系统消息读取信息,user_id
27 28
 SYSTEM_MESSAGE_DELETED_INFO = 'system:message:deleted:info:%s'  # STRING,系统消息删除信息,user_id

+ 15 - 2
utils/redis/rmessage.py

@@ -2,9 +2,9 @@
2 2
 
3 3
 from django.conf import settings
4 4
 
5
-from message.models import SystemMessageDeleteInfo
5
+from message.models import SystemMessageReadInfo, SystemMessageDeleteInfo
6 6
 
7
-from utils.redis.rkeys import SYSTEM_MESSAGE_DELETED_INFO
7
+from utils.redis.rkeys import SYSTEM_MESSAGE_READ_INFO, SYSTEM_MESSAGE_DELETED_INFO
8 8
 
9 9
 import json
10 10
 
@@ -15,6 +15,19 @@ r = settings.REDIS_CACHE
15 15
 # 系统消息相关
16 16
 
17 17
 
18
+def set_system_message_read_info(user_id):
19
+    """ 设置系统消息读取信息 """
20
+    read_messages = SystemMessageReadInfo.objects.filter(user_id=user_id, status=True)
21
+    read_message_ids = [msg.msg_id for msg in read_messages]
22
+    r.setex(SYSTEM_MESSAGE_READ_INFO % user_id, settings.REDIS_EXPIRED_MONTH, json.dumps(read_message_ids))
23
+    return read_message_ids
24
+
25
+
26
+def get_system_message_read_info(user_id):
27
+    """ 获取系统消息读取信息 """
28
+    return json.loads(r.get(SYSTEM_MESSAGE_READ_INFO % user_id) or '[]') or set_system_message_read_info(user_id)
29
+
30
+
18 31
 def set_system_message_delete_info(user_id):
19 32
     """ 设置系统消息删除信息 """
20 33
     deleted_messages = SystemMessageDeleteInfo.objects.filter(user_id=user_id, status=True)