暫無描述

views.py 15KB

    # -*- coding: utf-8 -*- from django.conf import settings from django.core.files.storage import default_storage from django.db import transaction from django.http import JsonResponse from rest_framework import viewsets from account.models import UserInfo from group.models import GroupInfo, GroupUserInfo, GroupPhotoInfo from group.serializers import GroupInfoSerializer, GroupUserInfoSerializer, GroupPhotoInfoSerializer from utils.thumbnail_utils import make_thumb from utils.ip_utils import ip_addr from curtail_uuid import CurtailUUID from TimeConvert import TimeConvert as tc import os import shortuuid @transaction.atomic def group_create_api(request): user_id = request.POST.get('user_id', '') group_name = request.POST.get('group_name', '') try: user = UserInfo.objects.get(user_id=user_id) except UserInfo.DoesNotExist: return JsonResponse({ 'status': 4011, 'message': u'用户不存在', }) group_id = CurtailUUID.uuid(GroupInfo, 'group_id') group = GroupInfo.objects.create( group_id=group_id, admin_id=user_id, group_name=group_name, group_from=GroupInfo.APP_GROUP, ) GroupUserInfo.objects.create( group_id=group_id, user_id=user_id, nickname=user.final_nickname, avatar=user.avatar, admin=True, user_status=GroupUserInfo.PASSED, passed_at=tc.utc_datetime(), ) return JsonResponse({ 'status': 200, 'message': u'群组创建成功', 'data': { 'group_id': group_id, 'group': group.data, 'users': group.users(user_id), }, }) def group_detail_api(request): group_id = request.POST.get('group_id', '') user_id = request.POST.get('user_id', '') try: user = UserInfo.objects.get(user_id=user_id) except UserInfo.DoesNotExist: return JsonResponse({ 'status': 4011, 'message': u'用户不存在', }) try: group = GroupInfo.objects.get(group_id=group_id) except GroupInfo.DoesNotExist: return JsonResponse({ 'status': 4020, 'message': u'群组不存在', }) # 判断用户是否已被丛群组移除 return JsonResponse({ 'status': 200, 'message': u'获取群组详情成功', 'data': { 'group_id': group_id, 'group': group.data, 'users': group.users(user_id), }, }) def group_update_api(request): group_id = request.POST.get('group_id', '') admin_id = request.POST.get('admin_id', '') group_name = request.POST.get('group_name', '') group_desc = request.POST.get('group_desc', '') try: admin = UserInfo.objects.get(user_id=admin_id) except UserInfo.DoesNotExist: return JsonResponse({ 'status': 4011, 'message': u'用户不存在', }) try: group = GroupInfo.objects.get(group_id=group_id) except GroupInfo.DoesNotExist: return JsonResponse({ 'status': 4020, 'message': u'群组不存在', }) if group.admin_id != admin_id: return JsonResponse({ 'status': 40220, 'message': u'没有更新权限', }) if group_name: group.group_name = group_name if group_desc: group.group_desc = group_desc group.save() return JsonResponse({ 'status': 200, 'message': u'用户更新成功', 'data': { 'group_id': group_id, 'group': group.data, 'users': group.users(admin_id), }, }) def group_list_api(request): user_id = request.POST.get('user_id', '') group_users = GroupUserInfo.objects.filter(user_id=user_id) groups = [] for group_user in group_users: try: groups.append(GroupInfo.objects.get(group_id=group_user.group_id).data) except GroupInfo.DoesNotExist: pass return JsonResponse({ 'status': 200, 'message': u'获取群组列表成功', 'data': { 'groups': groups, }, }) def group_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) except UserInfo.DoesNotExist: return JsonResponse({ 'status': 4011, 'message': u'用户不存在', }) try: group = GroupInfo.objects.get(group_id=group_id) except GroupInfo.DoesNotExist: return JsonResponse({ 'status': 4020, 'message': u'群组不存在', }) if group.group_lock: return JsonResponse({ 'status': 4021, 'message': u'群组已锁定', }) if GroupUserInfo.objects.filter(group_id=group_id, user_id=user_id, user_status__in=[GroupUserInfo.APPLYING, GroupUserInfo.PASSED]).exists(): return JsonResponse({ 'status': 4027, 'message': u'重复加群申请', }) group_photo = GroupPhotoInfo.objects.filter(group_id=group_id).last() GroupUserInfo.objects.create( group_id=group_id, user_id=user_id, current_id=group_photo and group_photo.id or -1, nickname=nickname or user.final_nickname, avatar=user.avatar, admin=False, user_status=GroupUserInfo.PASSED, passed_at=tc.utc_datetime(), ) return JsonResponse({ 'status': 200, 'message': u'申请已提交', }) def group_lock_api(request): group_id = request.POST.get('group_id', '') user_id = request.POST.get('user_id', '') try: user = UserInfo.objects.get(user_id=user_id) except UserInfo.DoesNotExist: return JsonResponse({ 'status': 4011, 'message': u'用户不存在', }) try: group = GroupInfo.objects.get(group_id=group_id) except GroupInfo.DoesNotExist: return JsonResponse({ 'status': 4020, 'message': u'群组不存在', }) if group.admin_id != user_id: return JsonResponse({ 'status': 40221, 'message': u'没有锁定权限', }) group.group_lock = True group.save() return JsonResponse({ 'status': 200, 'message': u'锁定成功', }) def group_unlock_api(request): group_id = request.POST.get('group_id', '') user_id = request.POST.get('user_id', '') try: user = UserInfo.objects.get(user_id=user_id) except UserInfo.DoesNotExist: return JsonResponse({ 'status': 4011, 'message': u'用户不存在', }) try: group = GroupInfo.objects.get(group_id=group_id) except GroupInfo.DoesNotExist: return JsonResponse({ 'status': 4020, 'message': u'群组不存在', }) if group.admin_id != user_id: return JsonResponse({ 'status': 40221, 'message': u'没有解锁权限', }) group.group_lock = False group.save() return JsonResponse({ 'status': 200, 'message': u'解锁成功', }) def group_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: admin = UserInfo.objects.get(user_id=admin_id) except UserInfo.DoesNotExist: return JsonResponse({ 'status': 4011, 'message': u'用户不存在', }) try: user = UserInfo.objects.get(user_id=user_id) except UserInfo.DoesNotExist: return JsonResponse({ 'status': 4011, 'message': u'用户不存在', }) try: group = GroupInfo.objects.get(group_id=group_id) except GroupInfo.DoesNotExist: return JsonResponse({ 'status': 4020, 'message': u'群组不存在', }) if group.admin_id != admin_id: return JsonResponse({ 'status': 40222, 'message': u'没有移除权限', }) try: group_user = GroupUserInfo.objects.get(group_id=group_id, user_id=user_id, user_status=GroupUserInfo.PASSED) except GroupUserInfo.DoesNotExist: return JsonResponse({ 'status': 4029, 'message': u'该用户不在群组', }) group_user.user_status = GroupUserInfo.DELETED group_user.deleted_at = tc.utc_datetime() group_user.save() return JsonResponse({ 'status': 200, 'message': u'用户移除成功', 'data': { 'group_id': group_id, 'users': group.users(admin_id), }, }) def group_pass_api(request): group_id = request.POST.get('group_id', '') admin_id = request.POST.get('admin_id', '') user_id = request.POST.get('user_id', '') try: admin = UserInfo.objects.get(user_id=admin_id) except UserInfo.DoesNotExist: return JsonResponse({ 'status': 4011, 'message': u'用户不存在', }) try: user = UserInfo.objects.get(user_id=user_id) except UserInfo.DoesNotExist: return JsonResponse({ 'status': 4011, 'message': u'用户不存在', }) try: group = GroupInfo.objects.get(group_id=group_id) except GroupInfo.DoesNotExist: return JsonResponse({ 'status': 4020, 'message': u'群组不存在', }) if group.admin_id != admin_id: return JsonResponse({ 'status': 40223, 'message': u'没有通过权限', }) try: group_user = GroupUserInfo.objects.get(group_id=group_id, user_id=user_id, user_status=GroupUserInfo.APPLYING) except GroupUserInfo.DoesNotExist: return JsonResponse({ 'status': 4028, 'message': u'加群申请不存在', }) group_user.user_status = GroupUserInfo.PASSED group_user.passed_at = tc.utc_datetime() group_user.save() return JsonResponse({ 'status': 200, 'message': u'申请通过成功', 'data': { 'group_id': group_id, 'users': group.users(admin_id), }, }) def group_refuse_api(request): group_id = request.POST.get('group_id', '') admin_id = request.POST.get('admin_id', '') user_id = request.POST.get('user_id', '') try: admin = UserInfo.objects.get(user_id=admin_id) except UserInfo.DoesNotExist: return JsonResponse({ 'status': 4011, 'message': u'用户不存在', }) try: user = UserInfo.objects.get(user_id=user_id) except UserInfo.DoesNotExist: return JsonResponse({ 'status': 4011, 'message': u'用户不存在', }) try: group = GroupInfo.objects.get(group_id=group_id) except GroupInfo.DoesNotExist: return JsonResponse({ 'status': 4020, 'message': u'群组不存在', }) if group.admin_id != admin_id: return JsonResponse({ 'status': 40224, 'message': u'没有拒绝权限', }) try: group_user = GroupUserInfo.objects.get(group_id=group_id, user_id=user_id, user_status=GroupUserInfo.APPLYING) except GroupUserInfo.DoesNotExist: return JsonResponse({ 'status': 4028, 'message': u'加群申请不存在', }) group_user.user_status = GroupUserInfo.REFUSED group_user.refused_at = tc.utc_datetime() group_user.save() return JsonResponse({ 'status': 200, 'message': u'申请拒绝成功', 'data': { 'group_id': group_id, 'users': group.users(admin_id), }, }) def flyimg_upload_api(request): group_id = request.POST.get('group_id', '') user_id = request.POST.get('user_id', '') nickname = request.POST.get('nickname', '') photo = request.FILES.get('photo', '') current_id = int(request.POST.get('current_id', -1)) try: user = UserInfo.objects.get(user_id=user_id) except UserInfo.DoesNotExist: return JsonResponse({ 'status': 4011, 'message': u'用户不存在', }) try: group = GroupInfo.objects.get(group_id=group_id) except GroupInfo.DoesNotExist: return JsonResponse({ 'status': 4020, 'message': u'群组不存在', }) try: group_user = GroupUserInfo.objects.get(group_id=group_id, user_id=user_id, user_status=GroupUserInfo.PASSED) except GroupUserInfo.DoesNotExist: return JsonResponse({ 'status': 4029, 'message': u'该用户不在群组', }) if photo: _, extension = os.path.splitext(photo.name) uuid = shortuuid.uuid() photo_path = 'fly/{uuid}{extension}'.format(uuid=uuid, extension=extension) photo_thumbnail_path = 'fly/{uuid}_thumbnail{extension}'.format(uuid=uuid, extension=extension) if default_storage.exists(photo_path): default_storage.delete(photo_path) default_storage.save(photo_path, photo) if default_storage.exists(photo_thumbnail_path): default_storage.delete(photo_thumbnail_path) default_storage.save(photo_thumbnail_path, photo) make_thumb( os.path.join(settings.MEDIA_ROOT, photo_thumbnail_path).replace('\\', '/'), settings.THUMBNAIL_MAX_WIDTH ) group_photo = GroupPhotoInfo.objects.create( group_id=group_id, user_id=user_id, nickname=nickname, photo_path=photo_path, photo_thumbnail_path=photo_thumbnail_path, ) group_photos = GroupPhotoInfo.objects.filter( group_id=group_id, pk__gt=max(current_id, group_user.current_id), ) latest_photo = group_photos.last() return JsonResponse({ 'status': 200, 'message': u'飞图上传成功', 'data': { 'current_id': latest_photo and latest_photo.pk or current_id, 'photos': [photo.photo_info for photo in group_photos], } }) class GroupInfoViewSet(viewsets.ModelViewSet): queryset = GroupInfo.objects.all().order_by('-created_at') serializer_class = GroupInfoSerializer class GroupUserInfoViewSet(viewsets.ModelViewSet): queryset = GroupUserInfo.objects.all().order_by('-created_at') serializer_class = GroupUserInfoSerializer class GroupPhotoInfoViewSet(viewsets.ModelViewSet): queryset = GroupPhotoInfo.objects.all().order_by('-created_at') serializer_class = GroupPhotoInfoSerializer