Fix Bug: some session group admin_id not exists

Brightcells 8 年之前
父節點
當前提交
220efd7cc7
共有 2 個文件被更改,包括 14 次插入5 次删除
  1. 1 1
      group/lensman_views.py
  2. 13 4
      photo/views.py

+ 1 - 1
group/lensman_views.py

@@ -160,7 +160,7 @@ def lensman_photo_upload_api(request):
160 160
         # 判断通过 session_id 创建的群组是否存在,如果不存在,则直接创建
161 161
         group, group_created = GroupInfo.objects.get_or_create(session_id=session_id, group_from=GroupInfo.SESSION_GROUP, defaults={
162 162
             'group_id': CurtailUUID.uuid(GroupInfo, 'group_id'),
163
-            'admin_id': user_id,
163
+            # 'admin_id': user_id,  # 摄影师非管理员,首个扫码进群的用户为管理员
164 164
             'group_name': user.final_nickname,
165 165
             'group_default_avatar': 0,
166 166
         })

+ 13 - 4
photo/views.py

@@ -100,6 +100,7 @@ def upload_photo(request):
100 100
 
101 101
 
102 102
 @logit
103
+@transaction.atomic
103 104
 def session_join_api(request):
104 105
     """ Session 详情 """
105 106
     user_id = request.POST.get('user_id', '')
@@ -124,9 +125,9 @@ def session_join_api(request):
124 125
     user_id = user.user_id
125 126
 
126 127
     # 判断通过 session_id 创建的群组是否存在,如果不存在,则直接创建
127
-    group, group_created = GroupInfo.objects.get_or_create(session_id=session_id, group_from=GroupInfo.SESSION_GROUP, defaults={
128
+    group, group_created = GroupInfo.objects.select_for_update().get_or_create(session_id=session_id, group_from=GroupInfo.SESSION_GROUP, defaults={
128 129
         'group_id': CurtailUUID.uuid(GroupInfo, 'group_id'),
129
-        'admin_id': lensman_id,
130
+        # 'admin_id': lensman_id,
130 131
         'group_name': lensman.final_nickname,
131 132
         'group_default_avatar': 0,
132 133
     })
@@ -141,7 +142,7 @@ def session_join_api(request):
141 142
         'current_id': current_id,  # 通过扫描 session_id 二维码进群的用户,默认可以查看该群组所有照片
142 143
         'nickname': nickname or user.final_nickname,
143 144
         'avatar': user.avatar,
144
-        'admin': group_created,
145
+        # 'admin': group_created,
145 146
         'user_status': GroupUserInfo.PASSED,
146 147
         'passed_at': tc.utc_datetime(),
147 148
     })
@@ -150,6 +151,14 @@ def session_join_api(request):
150 151
         group_user.user_status = GroupUserInfo.PASSED
151 152
         group_user.save()
152 153
 
154
+    # 管理员处理
155
+    tobe_admin = not GroupUserInfo.objects.filter(admin=True, status=True).exists()
156
+    if tobe_admin:
157
+        group.admin_id = user_id
158
+        group.save()
159
+        group_user.admin = True
160
+        group_user.save()
161
+
153 162
     # Redis 群组用户数据缓存
154 163
     group_users = set_group_users_info(group)
155 164
 
@@ -211,7 +220,7 @@ def session_join_api(request):
211 220
     )
212 221
     latest_photo = group_photos.first()
213 222
 
214
-    return response(200, 'Apply Success', u'申请成功', {
223
+    return response(200, 'Apply Join Session Group Success', u'申请加入摄影师群成功', {
215 224
         'current_id': latest_photo and latest_photo.pk or current_id,
216 225
         'photos': [photo.photo_info(user_id) for photo in group_photos],
217 226
         'group_id': group_id,