nes-num-old"> 102
+        }
103
+
104
+
105
+class SystemMessageReadInfo(CreateUpdateMixin):
106
+    user_id = models.CharField(_(u'user_id'), max_length=255, blank=True, null=True, help_text=u'用户唯一标识', db_index=True)
107
+    msg_id = models.CharField(_(u'msg_id'), max_length=255, blank=True, null=True, help_text=u'系统消息唯一标识', db_index=True)
108
+
109
+    class Meta:
110
+        verbose_name = _('systemmessagereadinfo')
111
+        verbose_name_plural = _('systemmessagereadinfo')
112
+
113
+    def __unicode__(self):
114
+        return unicode(self.pk)
115
+
116
+
117
+class SystemMessageDeleteInfo(CreateUpdateMixin):
118
+    user_id = models.CharField(_(u'user_id'), max_length=255, blank=True, null=True, help_text=u'用户唯一标识', db_index=True)
119
+    msg_id = models.CharField(_(u'msg_id'), max_length=255, blank=True, null=True, help_text=u'系统消息唯一标识', db_index=True)
120
+
121
+    class Meta:
122
+        verbose_name = _('systemmessagedeleteinfo')
123
+        verbose_name_plural = _('systemmessagedeleteinfo')
124
+
125
+    def __unicode__(self):
126
+        return unicode(self.pk)

+ 82 - 24
message/views.py

@@ -3,13 +3,16 @@
3 3
 from django.conf import settings
4 4
 from django.http import JsonResponse
5 5
 
6
-from message.models import UserMessageInfo
6
+from account.models import UserInfo
7
+from message.models import UserMessageInfo, SystemMessageInfo, SystemMessageReadInfo, SystemMessageDeleteInfo
7 8
 
8 9
 from utils.page_utils import pagination
9 10
 
10
-from utils.error.errno_utils import MessageStatusCode
11
+from utils.error.errno_utils import UserStatusCode, MessageStatusCode
11 12
 from utils.error.response_utils import response
12 13
 
14
+from utils.redis.rmessage import set_system_message_delete_info, get_system_message_delete_info
15
+
13 16
 
14 17
 def message_list_api(request):
15 18
     """
@@ -23,14 +26,24 @@ def message_list_api(request):
23 26
 
24 27
     final_messages = []
25 28
     for message in messages:
26
-        type_messages = UserMessageInfo.objects.filter(
27
-            to_uid=user_id,
28
-            msg_type=message['msg_type'],
29
-            status=True,
30
-        ).order_by(
29
+        msg_type = message['msg_type']
30
+        if msg_type == UserMessageInfo.SYSTEM:
31
+            deleted_message_ids = get_system_message_delete_info(user_id)
32
+            type_messages = SystemMessageInfo.objects.filter(
33
+                status=True,
34
+            ).exclude(
35
+                pk__in=deleted_message_ids,
36
+            )
37
+        else:
38
+            type_messages = UserMessageInfo.objects.filter(
39
+                to_uid=user_id,
40
+                msg_type=msg_type,
41
+                status=True,
42
+            )
43
+        type_messages = type_messages.order_by(
31 44
             '-pk'
32 45
         )[:settings.MESSAGE_NUM_PER_PAGE]
33
-        type_messages = [msg.msg_info for msg in type_messages]
46
+        type_messages = [msg.msg_info(user_id) for msg in type_messages]
34 47
         message['msg_list'] = type_messages
35 48
         final_messages.append(message)
36 49
 
@@ -54,15 +67,24 @@ def message_type_list_api(request, msg_type):
54 67
     page = int(request.POST.get('page', 0) or request.GET.get('page', 0) or 1)
55 68
     num = int(request.POST.get('num', 0) or request.GET.get('num', 0) or settings.MESSAGE_NUM_PER_PAGE)
56 69
 
57
-    type_messages = UserMessageInfo.objects.filter(
58
-        to_uid=user_id,
59
-        msg_type=msg_type,
60
-        status=True,
61
-    ).order_by(
70
+    if msg_type == UserMessageInfo.SYSTEM:
71
+        deleted_message_ids = get_system_message_delete_info(user_id)
72
+        type_messages = SystemMessageInfo.objects.filter(
73
+            status=True,
74
+        ).exclude(
75
+            pk__in=deleted_message_ids,
76
+        )
77
+    else:
78
+        type_messages = UserMessageInfo.objects.filter(
79
+            to_uid=user_id,
80
+            msg_type=msg_type,
81
+            status=True,
82
+        )
83
+    type_messages = type_messages.order_by(
62 84
         '-pk'
63 85
     )
64 86
     type_messages, left = pagination(type_messages, page, num)
65
-    type_messages = [msg.msg_info for msg in type_messages]
87
+    type_messages = [msg.msg_info(user_id) for msg in type_messages]
66 88
 
67 89
     return JsonResponse({
68 90
         'status': 200,
@@ -74,16 +96,35 @@ def message_type_list_api(request, msg_type):
74 96
     })
75 97
 
76 98
 
77
-def message_read_api(request):
99
+def message_type_read_api(request, msg_type=None):
78 100
     """
79 101
     消息读取
80 102
     :param request:
81 103
     :return:
82 104
     """
83
-    pk = int(request.POST.get('pk', 0) or request.GET.get('pk', 0) or -1)
84 105
     user_id = request.POST.get('user_id', '') or request.GET.get('user_id', '')
85
-
86
-    UserMessageInfo.objects.filter(pk=pk, to_uid=user_id).update(read=True)
106
+    pk = int(request.POST.get('pk', 0) or request.GET.get('pk', 0) or -1)
107
+    _all = request.POST.get('all', '') or request.GET.get('all', '')
108
+
109
+    # 用户校验
110
+    try:
111
+        user = UserInfo.objects.get(user_id=user_id)
112
+    except UserInfo.DoesNotExist:
113
+        return response(UserStatusCode.USER_NOT_FOUND)
114
+
115
+    if msg_type == UserMessageInfo.SYSTEM:
116
+        if pk > 0:  # 系统消息单个读取
117
+            if not SystemMessageInfo.objects.filter(pk=pk).exists():
118
+                return response(MessageStatusCode.MESSAGE_NOT_FOUND)
119
+            SystemMessageReadInfo.objects.get_or_create(user_id=user_id, msg_id=pk)
120
+        if _all:  # 系统消息全部读取
121
+            for msg in SystemMessageInfo.objects.filter(status=True):
122
+                SystemMessageReadInfo.objects.get_or_create(user_id=user_id, msg_id=msg.pk)
123
+    else:
124
+        if pk > 0:  # 用户(点赞/评论)消息单个读取
125
+            UserMessageInfo.objects.filter(pk=pk, to_uid=user_id).update(read=True)
126
+        if _all:  # 用户消息(点赞/评论)全部读取
127
+            UserMessageInfo.objects.filter(to_uid=user_id, msg_type=msg_type).update(read=True)
87 128
 
88 129
     return JsonResponse({
89 130
         'status': 200,
@@ -91,7 +132,7 @@ def message_read_api(request):
91 132
     })
92 133
 
93 134
 
94
-def message_delete_api(request, msg_type=None):
135
+def message_type_delete_api(request, msg_type=None):
95 136
     """
96 137
     消息删除
97 138
     :param request:
@@ -99,12 +140,29 @@ def message_delete_api(request, msg_type=None):
99 140
     :return:
100 141
     """
101 142
     user_id = request.POST.get('user_id', '') or request.GET.get('user_id', '')
102
-
103
-    if msg_type:
104
-        UserMessageInfo.objects.filter(to_uid=user_id, msg_type=msg_type).update(status=False)
143
+    pk = int(request.POST.get('pk', 0) or request.GET.get('pk', 0) or -1)
144
+    _all = request.POST.get('all', '') or request.GET.get('all', '')
145
+
146
+    # 用户校验
147
+    try:
148
+        user = UserInfo.objects.get(user_id=user_id)
149
+    except UserInfo.DoesNotExist:
150
+        return response(UserStatusCode.USER_NOT_FOUND)
151
+
152
+    if msg_type == UserMessageInfo.SYSTEM:
153
+        if pk > 0:  # 系统消息单个删除
154
+            if not SystemMessageInfo.objects.filter(pk=pk).exists():
155
+                return response(MessageStatusCode.MESSAGE_NOT_FOUND)
156
+            SystemMessageDeleteInfo.objects.get_or_create(user_id=user_id, msg_id=pk)
157
+        if _all:  # 系统消息全部删除
158
+            for msg in SystemMessageInfo.objects.filter(status=True):
159
+                SystemMessageDeleteInfo.objects.get_or_create(user_id=user_id, msg_id=msg.pk)
160
+        set_system_message_delete_info(user_id)
105 161
     else:
106
-        pk = int(request.POST.get('pk', 0) or request.GET.get('pk', 0) or -1)
107
-        UserMessageInfo.objects.filter(pk=pk, to_uid=user_id).update(status=False)
162
+        if pk > 0:  # 用户(点赞/评论)消息单个删除
163
+            UserMessageInfo.objects.filter(pk=pk, to_uid=user_id).update(status=False)
164
+        if _all:  # 用户消息(点赞/评论)全部删除
165
+            UserMessageInfo.objects.filter(to_uid=user_id, msg_type=msg_type).update(status=False)
108 166
 
109 167
     return JsonResponse({
110 168
         'status': 200,

+ 4 - 1
utils/redis/rkeys.py

@@ -1,7 +1,7 @@
1 1
 # -*- coding: utf-8 -*-
2 2
 
3 3
 # 用户相关
4
-PROFILE_INFO = 'profile:info:%s'  # STRING,用户信息,uid
4
+PROFILE_INFO = 'profile:info:%s'  # STRING,用户信息,user_id
5 5
 
6 6
 # 群组相关
7 7
 GROUP_INFO = 'group:info:%s'  # STRING,群组信息,group_id
@@ -16,3 +16,6 @@ GROUP_USERS_QUIT_SET = 'group:users:quit:set:%s'  # SET,群组用户退出集
16 16
 
17 17
 # 群组照片相关
18 18
 GROUP_LAST_PHOTO_PK = 'group:last:photo:pk:%s'  # STRING,群组最后一张照片PK,group_id
19
+
20
+# 系统消息相关
21
+SYSTEM_MESSAGE_DELETED_INFO = 'system:message:deleted:info:%s'  # STRING,系统消息删除信息,user_id

+ 28 - 0
utils/redis/rmessage.py

@@ -0,0 +1,28 @@
1
+# -*- coding: utf-8 -*-
2
+
3
+from django.conf import settings
4
+
5
+from message.models import SystemMessageDeleteInfo
6
+
7
+from utils.redis.rkeys import SYSTEM_MESSAGE_DELETED_INFO
8
+
9
+import json
10
+
11
+
12
+r = settings.REDIS_CACHE
13
+
14
+
15
+# 系统消息相关
16
+
17
+
18
+def set_system_message_delete_info(user_id):
19
+    """ 设置系统消息删除信息 """
20
+    deleted_messages = SystemMessageDeleteInfo.objects.filter(user_id=user_id, status=True)
21
+    deleted_message_ids = [msg.msg_id for msg in deleted_messages]
22
+    r.set(SYSTEM_MESSAGE_DELETED_INFO % user_id, json.dumps(deleted_message_ids))
23
+    return deleted_message_ids
24
+
25
+
26
+def get_system_message_delete_info(user_id):
27
+    """ 获取系统消息删除信息 """
28
+    return json.loads(r.get(SYSTEM_MESSAGE_DELETED_INFO % user_id) or '[]') or set_system_message_delete_info(user_id)

kodo - Gogs: Go Git Service

No Description

Brightcells: feebb32686 Add pc website 9 years ago
..
android.png feebb32686 Add pc website 9 years ago
android_button.png feebb32686 Add pc website 9 years ago
bg2.jpg feebb32686 Add pc website 9 years ago
ios.png feebb32686 Add pc website 9 years ago
logo.png feebb32686 Add pc website 9 years ago
mobile.png feebb32686 Add pc website 9 years ago
mobile_img.png feebb32686 Add pc website 9 years ago
text-bg.png feebb32686 Add pc website 9 years ago
weixin_qr.png feebb32686 Add pc website 9 years ago