ld">
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,
|
|
|
|
@@ -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
|
|
|
|
@@ -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)
|