拍爱

groupuser_views.py 5.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. # -*- coding: utf-8 -*-
  2. from __future__ import division
  3. from logit import logit
  4. from TimeConvert import TimeConvert as tc
  5. from account.models import UserInfo
  6. from group.models import GroupInfo, GroupUserInfo
  7. from utils.error.errno_utils import GroupStatusCode, GroupUserStatusCode, UserStatusCode
  8. from utils.error.response_utils import response
  9. from utils.group_photo_utils import get_current_photos
  10. from utils.redis.connect import r
  11. from utils.redis.rgroup import get_group_info, get_group_users_info, set_group_users_info
  12. from utils.redis.rkeys import (GROUP_LAST_PHOTO_PK, GROUP_USERS_DELETED_SET, GROUP_USERS_PASSED_SET,
  13. GROUP_USERS_QUIT_SET, GROUP_USERS_REFUSED_SET)
  14. @logit
  15. def group_user_join_api(request):
  16. """ 群成员加群 """
  17. group_id = request.POST.get('group_id', '')
  18. user_id = request.POST.get('user_id', '')
  19. nickname = request.POST.get('nickname', '')
  20. # 用户校验
  21. try:
  22. user = UserInfo.objects.get(user_id=user_id)
  23. except UserInfo.DoesNotExist:
  24. return response(UserStatusCode.USER_NOT_FOUND)
  25. # 群组校验
  26. try:
  27. group = GroupInfo.objects.get(group_id=group_id)
  28. except GroupInfo.DoesNotExist:
  29. return response(GroupStatusCode.GROUP_NOT_FOUND)
  30. # 群组锁定校验
  31. if group.group_lock:
  32. return response(GroupStatusCode.GROUP_HAS_LOCKED)
  33. # 群组用户记录创建,若记录不存在,则创建,若记录已存在,则更新
  34. group_user, created = GroupUserInfo.objects.get_or_create(
  35. group_id=group_id,
  36. user_id=user_id,
  37. )
  38. if group_user.user_status != GroupUserInfo.PASSED:
  39. group_user.current_id = -1 if group.group_from == GroupInfo.SESSION_GROUP else int(r.get(GROUP_LAST_PHOTO_PK % group_id) or -1)
  40. group_user.nickname = nickname or user.final_nickname
  41. group_user.avatar = user.avatar
  42. # group_user.admin = False # Admin Field Default False, Should Not Assign
  43. group_user.user_status = GroupUserInfo.PASSED
  44. group_user.passed_at = tc.utc_datetime()
  45. group_user.save()
  46. # Redis 群组用户数据缓存
  47. set_group_users_info(group)
  48. # Redis 群组通过集合缓存
  49. r.srem(GROUP_USERS_REFUSED_SET % group_id, user_id)
  50. r.srem(GROUP_USERS_DELETED_SET % group_id, user_id)
  51. r.srem(GROUP_USERS_QUIT_SET % group_id, user_id)
  52. r.sadd(GROUP_USERS_PASSED_SET % group_id, user_id)
  53. curinfo = get_current_photos(group_id, user_id, group_user.current_id)
  54. return response(200, 'Group User Join Success', u'群成员加群成功', {
  55. 'current_id': curinfo.get('current_id', ''),
  56. 'photos': curinfo.get('photos', ''),
  57. 'group_id': group_id,
  58. 'group': get_group_info(group_id),
  59. 'user_id': user_id,
  60. 'users': get_group_users_info(group_id, user_id),
  61. })
  62. @logit
  63. def group_user_remove_api(request):
  64. """ 群成员移除,管理员主动,群成员被动 """
  65. group_id = request.POST.get('group_id', '')
  66. admin_id = request.POST.get('admin_id', '')
  67. user_id = request.POST.get('user_id', '')
  68. # 群组校验
  69. try:
  70. group = GroupInfo.objects.get(group_id=group_id)
  71. except GroupInfo.DoesNotExist:
  72. return response(GroupStatusCode.GROUP_NOT_FOUND)
  73. # 权限校验
  74. if group.admin_id != admin_id or group.admin_id == user_id: # 管理员也不允许将自己移除
  75. return response(GroupStatusCode.NO_REMOVE_PERMISSION)
  76. # 群组用户校验
  77. try:
  78. group_user = GroupUserInfo.objects.get(group_id=group_id, user_id=user_id, status=True)
  79. except GroupUserInfo.DoesNotExist:
  80. return response(GroupUserStatusCode.GROUP_USER_NOT_FOUND)
  81. # 群组用户移除
  82. group_user.user_status = GroupUserInfo.DELETED
  83. group_user.deleted_at = tc.utc_datetime()
  84. group_user.save()
  85. # Redis 群组数据缓存更新
  86. group_users = set_group_users_info(group)
  87. # Redis 群组删除集合缓存
  88. r.srem(GROUP_USERS_PASSED_SET % group_id, user_id)
  89. r.sadd(GROUP_USERS_DELETED_SET % group_id, user_id)
  90. return response(200, 'Group User Remove Success', u'群成员移除成功', {
  91. 'group_id': group_id,
  92. 'users': group_users,
  93. })
  94. @logit
  95. def group_user_quit_api(request):
  96. """ 群成员退出,群成员主动 """
  97. group_id = request.POST.get('group_id', '')
  98. user_id = request.POST.get('user_id', '')
  99. # 群组校验
  100. try:
  101. group = GroupInfo.objects.get(group_id=group_id)
  102. except GroupInfo.DoesNotExist:
  103. return response(GroupStatusCode.GROUP_NOT_FOUND)
  104. # 权限校验
  105. if group.admin_id == user_id: # 管理员也不允许自己退出
  106. return response(GroupStatusCode.NO_QUIT_PERMISSION)
  107. # 群组用户校验
  108. try:
  109. group_user = GroupUserInfo.objects.get(group_id=group_id, user_id=user_id, status=True)
  110. except GroupUserInfo.DoesNotExist:
  111. return response(GroupUserStatusCode.GROUP_USER_NOT_FOUND)
  112. # 群组用户移除
  113. group_user.user_status = GroupUserInfo.QUIT
  114. group_user.quit_at = tc.utc_datetime()
  115. group_user.save()
  116. # Redis 群组数据缓存更新
  117. group_users = set_group_users_info(group)
  118. # Redis 群组删除集合缓存
  119. r.srem(GROUP_USERS_PASSED_SET % group_id, user_id)
  120. r.sadd(GROUP_USERS_QUIT_SET % group_id, user_id)
  121. return response(200, 'Group User Quit Success', u'群成员退出成功', {
  122. 'group_id': group_id,
  123. 'users': group_users,
  124. })