暂无描述

views.py 6.0KB

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