first 7 年之前 HU.js 11e3a9652a first 7 年之前 ID.js 11e3a9652a first 7 年之前 IE.js 11e3a9652a first 7 年之前 IL.js 11e3a9652a first 7 年之前 IM.js 11e3a9652a first 7 年之前 IN.js 11e3a9652a first 7 年之前 IQ.js 11e3a9652a first 7 年之前 IR.js 11e3a9652a first 7 年之前 IS.js 11e3a9652a first 7 年之前 IT.js 11e3a9652a first 7 年之前 JE.js 11e3a9652a first 7 年之前 JM.js 11e3a9652a first 7 年之前 JO.js 11e3a9652a first 7 年之前 JP.js 11e3a9652a first 7 年之前 KE.js 11e3a9652a first 7 年之前 KG.js 11e3a9652a first 7 年之前 KH.js 11e3a9652a first 7 年之前 KI.js 11e3a9652a first 7 年之前 KM.js 11e3a9652a first 7 年之前 KN.js 11e3a9652a first 7 年之前 KP.js 11e3a9652a first 7 年之前 KR.js 11e3a9652a first 7 年之前 KW.js 11e3a9652a first 7 年之前 KY.js 11e3a9652a first 7 年之前 KZ.js 11e3a9652a first 7 年之前 LA.js 11e3a9652a first 7 年之前 LB.js 11e3a9652a first 7 年之前 LC.js 11e3a9652a first 7 年之前 LI.js 11e3a9652a first 7 年之前 LK.js 11e3a9652a first 7 年之前 LR.js 11e3a9652a first 7 年之前 LS.js 11e3a9652a first 7 年之前 LT.js 11e3a9652a first 7 年之前 LU.js 11e3a9652a first 7 年之前 LV.js 11e3a9652a first 7 年之前 LY.js 11e3a9652a first 7 年之前 MA.js 11e3a9652a first 7 年之前 MC.js 11e3a9652a first 7 年之前 MD.js 11e3a9652a first 7 年之前 ME.js 11e3a9652a first 7 年之前 MG.js 11e3a9652a first 7 年之前 MH.js 11e3a9652a first 7 年之前 MK.js 11e3a9652a first 7 年之前 ML.js 11e3a9652a first 7 年之前 MM.js 11e3a9652a first 7 年之前 MN.js 11e3a9652a first 7 年之前 MO.js 11e3a9652a first 7 年之前 MP.js 11e3a9652a first 7 年之前 MQ.js 11e3a9652a first 7 年之前 MR.js 11e3a9652a first 7 年之前 MS.js 11e3a9652a first 7 年之前 MT.js 11e3a9652a first 7 年之前 MU.js 11e3a9652a first 7 年之前 MV.js 11e3a9652a first 7 年之前 MW.js 11e3a9652a first 7 年之前 MX.js 11e3a9652a first 7 年之前 MY.js 11e3a9652a first 7 年之前 MZ.js 11e3a9652a first 7 年之前 NA.js 11e3a9652a first 7 年之前 NC.js 11e3a9652a first 7 年之前 NE.js 11e3a9652a first 7 年之前 NF.js 11e3a9652a first 7 年之前 NG.js 11e3a9652a first 7 年之前 NI.js 11e3a9652a first 7 年之前 NL.js 11e3a9652a first 7 年之前 NO.js 11e3a9652a first 7 年之前 NP.js 11e3a9652a first 7 年之前 NR.js 11e3a9652a first 7 年之前 NU.js 11e3a9652a first 7 年之前 NZ.js 11e3a9652a first 7 年之前 OM.js 11e3a9652a first 7 年之前 PA.js 11e3a9652a first 7 年之前 PE.js 11e3a9652a first 7 年之前 PF.js 11e3a9652a first 7 年之前 PG.js 11e3a9652a first 7 年之前 PH.js 11e3a9652a first 7 年之前 PK.js 11e3a9652a first 7 年之前 PL.js 11e3a9652a first 7 年之前 PM.js 11e3a9652a first 7 年之前 PN.js 11e3a9652a first 7 年之前 PR.js 11e3a9652a first 7 年之前 PS.js 11e3a9652a first 7 年之前 PT.js 11e3a9652a first 7 年之前 PW.js 11e3a9652a first 7 年之前 PY.js 11e3a9652a first 7 年之前 QA.js 11e3a9652a first 7 年之前 RE.js 11e3a9652a first 7 年之前 RO.js 11e3a9652a first 7 年之前 RS.js 11e3a9652a first 7 年之前 RU.js 11e3a9652a first 7 年之前 RW.js 11e3a9652a first 7 年之前 SA.js 11e3a9652a first 7 年之前 SB.js 11e3a9652a first 7 年之前 SC.js 11e3a9652a first 7 年之前 SD.js 11e3a9652a first 7 年之前 SE.js 11e3a9652a first 7 年之前 SG.js 11e3a9652a first 7 年之前 SH.js 11e3a9652a first 7 年之前 SI.js 11e3a9652a first 7 年之前 SK.js 11e3a9652a first 7 年之前 SL.js 11e3a9652a first 7 年之前 SM.js 11e3a9652a first 7 年之前 SN.js 11e3a9652a first 7 年之前 SO.js 11e3a9652a first 7 年之前 SR.js 11e3a9652a first 7 年之前 ST.js 11e3a9652a first 7 年之前 SV.js 11e3a9652a first 7 年之前 SY.js 11e3a9652a first 7 年之前 SZ.js 11e3a9652a first 7 年之前 TC.js 11e3a9652a first 7 年之前 TD.js 11e3a9652a first 7 年之前 TG.js 11e3a9652a first 7 年之前 TH.js 11e3a9652a first 7 年之前 TJ.js 11e3a9652a first 7 年之前 TK.js 11e3a9652a first 7 年之前 TL.js 11e3a9652a first 7 年之前 TM.js 11e3a9652a first 7 年之前 TN.js 11e3a9652a first 7 年之前 TO.js 11e3a9652a first 7 年之前 TR.js 11e3a9652a first 7 年之前 TT.js 11e3a9652a first 7 年之前 TV.js 11e3a9652a first 7 年之前 TW.js 11e3a9652a first 7 年之前 TZ.js 11e3a9652a first 7 年之前 UA.js 11e3a9652a first 7 年之前 UG.js 11e3a9652a first 7 年之前 US.js 11e3a9652a first 7 年之前 UY.js 11e3a9652a first 7 年之前 UZ.js 11e3a9652a first 7 年之前 VA.js 11e3a9652a first 7 年之前 VC.js 11e3a9652a first 7 年之前 VE.js 11e3a9652a first 7 年之前 VG.js 11e3a9652a first 7 年之前 VI.js 11e3a9652a first 7 年之前 VN.js 11e3a9652a first 7 年之前 VU.js 11e3a9652a first 7 年之前 WF.js 11e3a9652a first 7 年之前 WS.js 11e3a9652a first 7 年之前 YE.js 11e3a9652a first 7 年之前 YT.js 11e3a9652a first 7 年之前 ZA.js 11e3a9652a first 7 年之前 ZM.js 11e3a9652a first 7 年之前 ZW.js 11e3a9652a first 7 年之前 alt-af.js 11e3a9652a first 7 年之前 alt-an.js 11e3a9652a first 7 年之前 alt-as.js 11e3a9652a first 7 年之前 alt-eu.js 11e3a9652a first 7 年之前 alt-na.js 11e3a9652a first 7 年之前 alt-oc.js 11e3a9652a first 7 年之前 alt-sa.js 11e3a9652a first 7 年之前 alt-ww.js 11e3a9652a first 7 年之前 kodo - Gogs: Go Git Service

Keine Beschreibung

groupuser_views.py 5.5KB

    # -*- coding: utf-8 -*- from __future__ import division from django_logit import logit from django_response import response from TimeConvert import TimeConvert as tc from account.models import UserInfo from group.models import GroupInfo, GroupUserInfo from utils.error.errno_utils import GroupStatusCode, GroupUserStatusCode, UserStatusCode from utils.group_photo_utils import get_current_photos from utils.redis.connect import r from utils.redis.rgroup import get_group_info, get_group_users_info, set_group_users_info from utils.redis.rkeys import (GROUP_LAST_PHOTO_PK, GROUP_USERS_DELETED_SET, GROUP_USERS_PASSED_SET, GROUP_USERS_QUIT_SET, GROUP_USERS_REFUSED_SET) @logit def group_user_join_api(request): """ 群成员加群 """ group_id = request.POST.get('group_id', '') user_id = request.POST.get('user_id', '') nickname = request.POST.get('nickname', '') # 用户校验 try: user = UserInfo.objects.get(user_id=user_id, status=True) except UserInfo.DoesNotExist: return response(UserStatusCode.USER_NOT_FOUND) # 群组校验 try: group = GroupInfo.objects.get(group_id=group_id, status=True) except GroupInfo.DoesNotExist: return response(GroupStatusCode.GROUP_NOT_FOUND) # 群组锁定校验 if group.group_lock: return response(GroupStatusCode.GROUP_HAS_LOCKED) # 群组用户记录创建,若记录不存在,则创建,若记录已存在,则更新 group_user, created = GroupUserInfo.objects.get_or_create( group_id=group_id, user_id=user_id, ) if group_user.user_status != GroupUserInfo.PASSED: group_user.current_id = -1 if group.group_from == GroupInfo.SESSION_GROUP else int(r.get(GROUP_LAST_PHOTO_PK % group_id) or -1) group_user.nickname = nickname or user.final_nickname group_user.avatar = user.avatar # group_user.admin = False # Admin Field Default False, Should Not Assign group_user.user_status = GroupUserInfo.PASSED group_user.passed_at = tc.utc_datetime() group_user.save() # Redis 群组用户数据缓存 set_group_users_info(group) # Redis 群组通过集合缓存 r.srem(GROUP_USERS_REFUSED_SET % group_id, user_id) r.srem(GROUP_USERS_DELETED_SET % group_id, user_id) r.srem(GROUP_USERS_QUIT_SET % group_id, user_id) r.sadd(GROUP_USERS_PASSED_SET % group_id, user_id) curinfo = get_current_photos(group_id, user_id, group_user.current_id, request=request) return response(200, 'Group User Join Success', u'群成员加群成功', { 'current_id': curinfo.get('current_id', ''), 'photos': curinfo.get('photos', ''), 'group_id': group_id, 'group': get_group_info(group_id), 'user_id': user_id, 'users': get_group_users_info(group_id, user_id), }) @logit def group_user_remove_api(request): """ 群成员移除,管理员主动,群成员被动 """ group_id = request.POST.get('group_id', '') admin_id = request.POST.get('admin_id', '') user_id = request.POST.get('user_id', '') # 群组校验 try: group = GroupInfo.objects.get(group_id=group_id, status=True) except GroupInfo.DoesNotExist: return response(GroupStatusCode.GROUP_NOT_FOUND) # 权限校验 if group.admin_id != admin_id: return response(GroupStatusCode.NOT_GROUP_ADMIN) # 管理员也不允许将自己移除 if group.admin_id == user_id: return response(GroupStatusCode.ADMIN_CANNOT_HANDLE_SELF) # 群组用户校验 try: group_user = GroupUserInfo.objects.get(group_id=group_id, user_id=user_id, status=True) except GroupUserInfo.DoesNotExist: return response(GroupUserStatusCode.GROUP_USER_NOT_FOUND) # 群组用户移除 group_user.user_status = GroupUserInfo.DELETED group_user.deleted_at = tc.utc_datetime() group_user.save() # Redis 群组数据缓存更新 group_users = set_group_users_info(group) # Redis 群组删除集合缓存 r.srem(GROUP_USERS_PASSED_SET % group_id, user_id) r.sadd(GROUP_USERS_DELETED_SET % group_id, user_id) return response(200, 'Group User Remove Success', u'群成员移除成功', { 'group_id': group_id, 'users': group_users, }) @logit def group_user_quit_api(request): """ 群成员退出,群成员主动 """ group_id = request.POST.get('group_id', '') user_id = request.POST.get('user_id', '') # 群组校验 try: group = GroupInfo.objects.get(group_id=group_id, status=True) except GroupInfo.DoesNotExist: return response(GroupStatusCode.GROUP_NOT_FOUND) # 权限校验 if group.admin_id == user_id: # 管理员也不允许自己退出 return response(GroupStatusCode.NOT_GROUP_ADMIN) # 群组用户校验 try: group_user = GroupUserInfo.objects.get(group_id=group_id, user_id=user_id, status=True) except GroupUserInfo.DoesNotExist: return response(GroupUserStatusCode.GROUP_USER_NOT_FOUND) # 群组用户移除 group_user.user_status = GroupUserInfo.QUIT group_user.quit_at = tc.utc_datetime() group_user.save() # Redis 群组数据缓存更新 group_users = set_group_users_info(group) # Redis 群组删除集合缓存 r.srem(GROUP_USERS_PASSED_SET % group_id, user_id) r.sadd(GROUP_USERS_QUIT_SET % group_id, user_id) return response(200, 'Group User Quit Success', u'群成员退出成功', { 'group_id': group_id, 'users': group_users, })