拍爱

views.py 5.9KB

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