group.data,
+ 'group': get_group_info(group_id),
'user_id': user_id,
- 'users': group.users(user_id),
+ 'users': get_group_users_info(group_id, user_id),
}
})
@@ -45,7 +45,6 @@ class GroupStatusCode(BaseStatusCode): |
||
| 45 | 45 |
NO_REFUSE_PERMISSION = StatusCodeField(402009, u'No Refuse Permission', description=u'没有拒绝权限') |
| 46 | 46 |
DUPLICATE_JOIN_REQUEST = StatusCodeField(402010, u'Duplicate Join Request', description=u'重复加群申请') |
| 47 | 47 |
JOIN_REQUEST_NOT_FOUND = StatusCodeField(402011, u'Join Request Not Found', description=u'加群申请不存在') |
| 48 |
- GROUP_USER_NOT_FOUND = StatusCodeField(402012, u'Group User Not Found', description=u'该用户不在群组') |
|
| 49 | 48 |
|
| 50 | 49 |
|
| 51 | 50 |
class GroupUserStatusCode(BaseStatusCode): |
@@ -6,6 +6,7 @@ from django.http import JsonResponse |
||
| 6 | 6 |
def response(status_code, data={}):
|
| 7 | 7 |
return JsonResponse({
|
| 8 | 8 |
'status': status_code, |
| 9 |
- 'message': status_code.description, |
|
| 9 |
+ 'message': status_code.message, |
|
| 10 |
+ 'description': status_code.description, |
|
| 10 | 11 |
'data': data, |
| 11 | 12 |
}) |
@@ -1,7 +0,0 @@ |
||
| 1 |
-# -*- coding: utf-8 -*- |
|
| 2 |
- |
|
| 3 |
-# 用户相关 |
|
| 4 |
-PROFILE_USER_INFO = 'profile:user:info:%s' # 用户信息,uid |
|
| 5 |
- |
|
| 6 |
-# 群组相关 |
|
| 7 |
-GROUP_INFO = 'group:info:%s' # 群组信息,group_id |
@@ -0,0 +1,33 @@ |
||
| 1 |
+# -*- coding: utf-8 -*- |
|
| 2 |
+ |
|
| 3 |
+from django.conf import settings |
|
| 4 |
+ |
|
| 5 |
+from group.models import GroupInfo, GroupUserInfo, GroupPhotoInfo |
|
| 6 |
+ |
|
| 7 |
+from utils.redis.rkeys import GROUP_USERS_APPLYING_SET, GROUP_USERS_PASSED_SET, GROUP_USERS_REFUSED_SET, GROUP_USERS_DELETED_SET |
|
| 8 |
+from utils.redis.rkeys import GROUP_LAST_PHOTO_PK |
|
| 9 |
+ |
|
| 10 |
+ |
|
| 11 |
+r = settings.REDIS_CACHE |
|
| 12 |
+ |
|
| 13 |
+ |
|
| 14 |
+def retrieve_redis_data(): |
|
| 15 |
+ # 群组/群组照片相关 |
|
| 16 |
+ groups = GroupInfo.objects.filter(status=True) |
|
| 17 |
+ for group in groups: |
|
| 18 |
+ group_photo = GroupPhotoInfo.objects.filter(group_id=group.group_id).last() |
|
| 19 |
+ # 设置群组最后一张照片PK |
|
| 20 |
+ r.set(GROUP_LAST_PHOTO_PK % group.group_id, group_photo and group_photo.pk or -1) |
|
| 21 |
+ |
|
| 22 |
+ # 群组用户相关 |
|
| 23 |
+ group_users = GroupUserInfo.objects.filter(status=True) |
|
| 24 |
+ for group_user in group_users: |
|
| 25 |
+ group_id, user_id = group_user.group_id, group_user.user_id |
|
| 26 |
+ if group_user.user_status == GroupUserInfo.PASSED: |
|
| 27 |
+ r.sadd(GROUP_USERS_PASSED_SET % group_id, user_id) |
|
| 28 |
+ elif group_user.user_status == GroupUserInfo.DELETED: |
|
| 29 |
+ r.sadd(GROUP_USERS_DELETED_SET % group_id, user_id) |
|
| 30 |
+ elif group_user.user_status == GroupUserInfo.APPLYING: |
|
| 31 |
+ r.sadd(GROUP_USERS_APPLYING_SET % group_id, user_id) |
|
| 32 |
+ elif group_user.user_status == GroupUserInfo.REFUSED: |
|
| 33 |
+ r.sadd(GROUP_USERS_REFUSED_SET % group_id, user_id) |
@@ -0,0 +1,68 @@ |
||
| 1 |
+# -*- coding: utf-8 -*- |
|
| 2 |
+ |
|
| 3 |
+from django.conf import settings |
|
| 4 |
+from django.core.serializers.json import DjangoJSONEncoder |
|
| 5 |
+ |
|
| 6 |
+from utils.redis.rkeys import GROUP_INFO, GROUP_USERS_INFO, GROUP_LAST_PHOTO_PK |
|
| 7 |
+ |
|
| 8 |
+import json |
|
| 9 |
+ |
|
| 10 |
+ |
|
| 11 |
+r = settings.REDIS_CACHE |
|
| 12 |
+ |
|
| 13 |
+ |
|
| 14 |
+# 群组信息相关 |
|
| 15 |
+ |
|
| 16 |
+ |
|
| 17 |
+def set_group_info(group): |
|
| 18 |
+ """ 设置群组信息 """ |
|
| 19 |
+ group_data = group.data |
|
| 20 |
+ r.set(GROUP_INFO % group.group_id, json.dumps(group_data, cls=DjangoJSONEncoder)) |
|
| 21 |
+ return group_data |
|
| 22 |
+ |
|
| 23 |
+ |
|
| 24 |
+def set_group_info_by_id(group_id): |
|
| 25 |
+ """ 设置群组信息 """ |
|
| 26 |
+ from group.models import GroupInfo |
|
| 27 |
+ try: |
|
| 28 |
+ group = GroupInfo.objects.get(group_id=group_id) |
|
| 29 |
+ except GroupInfo.DoesNotExist: |
|
| 30 |
+ return {}
|
|
| 31 |
+ return set_group_info(group) |
|
| 32 |
+ |
|
| 33 |
+ |
|
| 34 |
+def get_group_info(group_id): |
|
| 35 |
+ """ 获取群组信息 """ |
|
| 36 |
+ return json.loads(r.get(GROUP_INFO % group_id) or '{}') or set_group_info_by_id(group_id)
|
|
| 37 |
+ |
|
| 38 |
+ |
|
| 39 |
+# 群组用户信息相关 |
|
| 40 |
+ |
|
| 41 |
+ |
|
| 42 |
+def set_group_users_info(group): |
|
| 43 |
+ """ 设置群组用户信息 """ |
|
| 44 |
+ group_users = group.users(admin=False) |
|
| 45 |
+ r.set(GROUP_USERS_INFO % group.group_id, json.dumps({
|
|
| 46 |
+ 'group_users': group_users, |
|
| 47 |
+ 'admin_id': group.admin_id, |
|
| 48 |
+ }, cls=DjangoJSONEncoder)) |
|
| 49 |
+ return group_users |
|
| 50 |
+ |
|
| 51 |
+ |
|
| 52 |
+def set_group_users_info_by_id(group_id): |
|
| 53 |
+ """ 设置群组用户信息 """ |
|
| 54 |
+ from group.models import GroupInfo |
|
| 55 |
+ try: |
|
| 56 |
+ group = GroupInfo.objects.get(group_id=group_id) |
|
| 57 |
+ except GroupInfo.DoesNotExist: |
|
| 58 |
+ return {}
|
|
| 59 |
+ return set_group_users_info(group) |
|
| 60 |
+ |
|
| 61 |
+ |
|
| 62 |
+def get_group_users_info(group_id, user_id): |
|
| 63 |
+ """ 获取群组用户信息 """ |
|
| 64 |
+ group_users_data = json.loads(r.get(GROUP_USERS_INFO % group_id) or '{}') or set_group_users_info_by_id(group_id)
|
|
| 65 |
+ group_users, admin_id = group_users_data.get('group_users', {}), group_users_data.get('admin_id', '')
|
|
| 66 |
+ if group_users and user_id != admin_id: |
|
| 67 |
+ [group_users.pop(k) for k in ['applying_count', 'applying']] |
|
| 68 |
+ return group_users |
@@ -0,0 +1,17 @@ |
||
| 1 |
+# -*- coding: utf-8 -*- |
|
| 2 |
+ |
|
| 3 |
+# 用户相关 |
|
| 4 |
+PROFILE_INFO = 'profile:info:%s' # STRING,用户信息,uid |
|
| 5 |
+ |
|
| 6 |
+# 群组相关 |
|
| 7 |
+GROUP_INFO = 'group:info:%s' # STRING,群组信息,group_id |
|
| 8 |
+ |
|
| 9 |
+# 群组用户相关 |
|
| 10 |
+GROUP_USERS_INFO = 'group:users:info:%s' # STRING,群组用户信息,group_id |
|
| 11 |
+GROUP_USERS_APPLYING_SET = 'group:users:applying:set:%s' # SET,群组用户申请集合,group_id |
|
| 12 |
+GROUP_USERS_PASSED_SET = 'group:users:passed:set:%s' # SET,群组用户通过集合,group_id |
|
| 13 |
+GROUP_USERS_REFUSED_SET = 'group:users:refused:set:%s' # SET,群组用户拒绝集合,group_id |
|
| 14 |
+GROUP_USERS_DELETED_SET = 'group:users:deleted:set:%s' # SET,群组用户移除集合,group_id |
|
| 15 |
+ |
|
| 16 |
+# 群组照片相关 |
|
| 17 |
+GROUP_LAST_PHOTO_PK = 'group:last:photo:pk:%s' # STRING,群组最后一张照片PK,group_id |