Brak opisu

views.py 21KB

    # -*- coding: utf-8 -*- from django.conf import settings from django.core.files.storage import default_storage from django.db import connection, transaction from django.http import JsonResponse from rest_framework import viewsets from account.models import UserInfo from group.models import GroupInfo, GroupUserInfo, GroupPhotoInfo, PhotoCommentInfo, PhotoThumbUpInfo from message.models import UserMessageInfo from group.serializers import GroupInfoSerializer, GroupUserInfoSerializer, GroupPhotoInfoSerializer from utils.page_utils import pagination from utils.thumbnail_utils import make_thumb from utils.url_utils import img_url from utils.error.errno_utils import UserStatusCode, GroupStatusCode, GroupPhotoStatusCode from utils.error.response_utils import response from utils.sql.raw import PAI2_HOME_API from curtail_uuid import CurtailUUID from TimeConvert import TimeConvert as tc import os import shortuuid r = settings.REDIS_CACHE @transaction.atomic def group_create_api(request): user_id = request.POST.get('user_id', '') group_name = request.POST.get('group_name', '') group_default_avatar = int(request.POST.get('group_default_avatar', 0)) try: user = UserInfo.objects.get(user_id=user_id) except UserInfo.DoesNotExist: return response(UserStatusCode.USER_NOT_FOUND) group_id = CurtailUUID.uuid(GroupInfo, 'group_id') group = GroupInfo.objects.create( group_id=group_id, admin_id=user_id, group_name=group_name, group_default_avatar=group_default_avatar, 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 response(UserStatusCode.USER_NOT_FOUND) try: group = GroupInfo.objects.get(group_id=group_id) except GroupInfo.DoesNotExist: return response(GroupStatusCode.GROUP_NOT_FOUND) # 判断用户是否已被丛群组移除 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 response(UserStatusCode.USER_NOT_FOUND) try: group = GroupInfo.objects.get(group_id=group_id) except GroupInfo.DoesNotExist: return response(GroupStatusCode.GROUP_NOT_FOUND) if group.admin_id != admin_id: return response(GroupStatusCode.NO_UPDATE_PERMISSION) 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 response(UserStatusCode.USER_NOT_FOUND) try: group = GroupInfo.objects.get(group_id=group_id) except GroupInfo.DoesNotExist: return response(GroupStatusCode.GROUP_NOT_FOUND) if group.group_lock: return response(GroupStatusCode.GROUP_HAS_LOCKED) if GroupUserInfo.objects.filter(group_id=group_id, user_id=user_id, user_status__in=[GroupUserInfo.APPLYING, GroupUserInfo.PASSED]).exists(): return response(GroupStatusCode.DUPLICATE_JOIN_REQUEST) 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 response(UserStatusCode.USER_NOT_FOUND) try: group = GroupInfo.objects.get(group_id=group_id) except GroupInfo.DoesNotExist: return response(GroupStatusCode.GROUP_NOT_FOUND) 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 response(UserStatusCode.USER_NOT_FOUND) try: group = GroupInfo.objects.get(group_id=group_id) except GroupInfo.DoesNotExist: return response(GroupStatusCode.GROUP_NOT_FOUND) if group.admin_id != user_id: return response(GroupStatusCode.NO_UNLOCK_PERMISSION) 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 response(UserStatusCode.USER_NOT_FOUND) try: user = UserInfo.objects.get(user_id=user_id) except UserInfo.DoesNotExist: return response(UserStatusCode.USER_NOT_FOUND) try: group = GroupInfo.objects.get(group_id=group_id) except GroupInfo.DoesNotExist: return response(GroupStatusCode.GROUP_NOT_FOUND) 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 response(GroupStatusCode.GROUP_USER_NOT_FOUND) 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 response(UserStatusCode.USER_NOT_FOUND) try: user = UserInfo.objects.get(user_id=user_id) except UserInfo.DoesNotExist: return response(UserStatusCode.USER_NOT_FOUND) try: group = GroupInfo.objects.get(group_id=group_id) except GroupInfo.DoesNotExist: return response(GroupStatusCode.GROUP_NOT_FOUND) if group.admin_id != admin_id: return response(GroupStatusCode.NO_PASS_PERMISSION) try: group_user = GroupUserInfo.objects.get(group_id=group_id, user_id=user_id, user_status=GroupUserInfo.APPLYING) except GroupUserInfo.DoesNotExist: return response(GroupStatusCode.JOIN_REQUEST_NOT_FOUND) 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 response(UserStatusCode.USER_NOT_FOUND) try: user = UserInfo.objects.get(user_id=user_id) except UserInfo.DoesNotExist: return response(UserStatusCode.USER_NOT_FOUND) try: group = GroupInfo.objects.get(group_id=group_id) except GroupInfo.DoesNotExist: return response(GroupStatusCode.GROUP_NOT_FOUND) if group.admin_id != admin_id: return response(GroupStatusCode.NO_REFUSE_PERMISSION) try: group_user = GroupUserInfo.objects.get(group_id=group_id, user_id=user_id, user_status=GroupUserInfo.APPLYING) except GroupUserInfo.DoesNotExist: return response(GroupStatusCode.JOIN_REQUEST_NOT_FOUND) 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 response(UserStatusCode.USER_NOT_FOUND) try: group = GroupInfo.objects.get(group_id=group_id) except GroupInfo.DoesNotExist: return response(GroupStatusCode.GROUP_NOT_FOUND) try: group_user = GroupUserInfo.objects.get(group_id=group_id, user_id=user_id, user_status=GroupUserInfo.PASSED) except GroupUserInfo.DoesNotExist: return response(GroupStatusCode.GROUP_USER_NOT_FOUND) 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) photo_w, photo_h, photo_thumbnail_w, photo_thumbnail_h = 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 or user.final_nickname, avatar=user.avatar, photo_path=photo_path, photo_w=photo_w, photo_h=photo_h, photo_thumbnail_path=photo_thumbnail_path, photo_thumbnail_w=photo_thumbnail_w, photo_thumbnail_h=photo_thumbnail_h, ) group_photos = GroupPhotoInfo.objects.filter( group_id=group_id, status=True, 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], } }) def comment_submit_api(request): group_id = request.POST.get('group_id', '') user_id = request.POST.get('user_id', '') photo_id = request.POST.get('photo_id', '') comment = request.POST.get('comment', '') try: group = GroupInfo.objects.get(group_id=group_id) except GroupInfo.DoesNotExist: return response(GroupStatusCode.GROUP_NOT_FOUND) try: group_user = GroupUserInfo.objects.get(group_id=group_id, user_id=user_id, user_status=GroupUserInfo.PASSED) except GroupUserInfo.DoesNotExist: return response(GroupStatusCode.GROUP_USER_NOT_FOUND) try: group_photo = GroupPhotoInfo.objects.get(pk=photo_id) except GroupPhotoInfo.DoesNotExist: return response(GroupPhotoStatusCode.MESSAGE_NOT_FOUND) if comment: PhotoCommentInfo.objects.create( photo_id=photo_id, user_id=user_id, nickname=group_user.nickname, avatar=group_user.avatar, comment=comment, ) UserMessageInfo.objects.create( from_uid=user_id, from_nickname=group_user.nickname, from_avatar=group_user.avatar, to_uid=group_photo.user_id, group_id=group_photo.group_id, photo_id=group_photo.pk, msg_type=UserMessageInfo.COMMENT, msg_title=u'评论', msg_content=comment, ) photo_comments = PhotoCommentInfo.objects.filter( photo_id=photo_id, ) return JsonResponse({ 'status': 200, 'message': u'评论成功', 'data': { 'comments': [comment.comment_info for comment in photo_comments], } }) def thumbup_submit_api(request): group_id = request.POST.get('group_id', '') user_id = request.POST.get('user_id', '') photo_id = request.POST.get('photo_id', '') try: group = GroupInfo.objects.get(group_id=group_id) except GroupInfo.DoesNotExist: return response(GroupStatusCode.GROUP_NOT_FOUND) try: group_user = GroupUserInfo.objects.get(group_id=group_id, user_id=user_id, user_status=GroupUserInfo.PASSED) except GroupUserInfo.DoesNotExist: return response(GroupStatusCode.GROUP_USER_NOT_FOUND) try: group_photo = GroupPhotoInfo.objects.get(pk=photo_id) except GroupPhotoInfo.DoesNotExist: return response(GroupPhotoStatusCode.MESSAGE_NOT_FOUND) photo_thumbup, created = PhotoThumbUpInfo.objects.get_or_create( photo_id=photo_id, user_id=user_id, # defaults={ # 'nickname': group_user.nickname, # 'avatar': group_user.avatar, # } ) photo_thumbup.nickname = group_user.nickname photo_thumbup.avatar = group_user.avatar photo_thumbup.thumbup = True photo_thumbup.save() UserMessageInfo.objects.create( from_uid=user_id, from_nickname=group_user.nickname, from_avatar=group_user.avatar, to_uid=group_photo.user_id, group_id=group_photo.group_id, photo_id=group_photo.pk, msg_type=UserMessageInfo.THUMBUP, msg_title=u'点赞', msg_content=u'点赞', ) photo_thumbups = PhotoThumbUpInfo.objects.filter( photo_id=photo_id, thumbup=True, ) return JsonResponse({ 'status': 200, 'message': u'点赞提交成功', 'data': { 'thumbup': True, 'thumbups': [thumbup.thumbup_info for thumbup in photo_thumbups], } }) def thumbup_list_api(request): group_id = request.POST.get('group_id', '') user_id = request.POST.get('user_id', '') photo_id = request.POST.get('photo_id', '') try: group = GroupInfo.objects.get(group_id=group_id) except GroupInfo.DoesNotExist: return response(GroupStatusCode.GROUP_NOT_FOUND) try: group_user = GroupUserInfo.objects.get(group_id=group_id, user_id=user_id, user_status=GroupUserInfo.PASSED) except GroupUserInfo.DoesNotExist: return response(GroupStatusCode.GROUP_USER_NOT_FOUND) try: group_photo = GroupPhotoInfo.objects.get(pk=photo_id) except GroupPhotoInfo.DoesNotExist: return response(GroupPhotoStatusCode.MESSAGE_NOT_FOUND) try: thumbup = PhotoThumbUpInfo.objects.get( photo_id=photo_id, user_id=user_id, ).thumbup except PhotoThumbUpInfo.DoesNotExist: thumbup = False photo_thumbups = PhotoThumbUpInfo.objects.filter( photo_id=photo_id, thumbup=True, ) return JsonResponse({ 'status': 200, 'message': u'获取点赞列表成功', 'data': { 'thumbup': thumbup, 'thumbups': [thumbup.thumbup_info for thumbup in photo_thumbups], } }) def thumbup_cancel_api(request): group_id = request.POST.get('group_id', '') user_id = request.POST.get('user_id', '') photo_id = request.POST.get('photo_id', '') try: group = GroupInfo.objects.get(group_id=group_id) except GroupInfo.DoesNotExist: return response(GroupStatusCode.GROUP_NOT_FOUND) try: group_user = GroupUserInfo.objects.get(group_id=group_id, user_id=user_id, user_status=GroupUserInfo.PASSED) except GroupUserInfo.DoesNotExist: return response(GroupStatusCode.GROUP_USER_NOT_FOUND) try: group_photo = GroupPhotoInfo.objects.get(pk=photo_id) except GroupPhotoInfo.DoesNotExist: return response(GroupPhotoStatusCode.MESSAGE_NOT_FOUND) photo_thumbup, created = PhotoThumbUpInfo.objects.get_or_create( photo_id=photo_id, user_id=user_id, ) photo_thumbup.thumbup = False photo_thumbup.save() UserMessageInfo.objects.create( from_uid=user_id, from_nickname=group_user.nickname, from_avatar=group_user.avatar, to_uid=group_photo.user_id, group_id=group_photo.group_id, photo_id=group_photo.pk, msg_type=UserMessageInfo.THUMBUP, msg_title=u'取消点赞', msg_content=u'取消点赞', ) photo_thumbups = PhotoThumbUpInfo.objects.filter( photo_id=photo_id, thumbup=True, ) return JsonResponse({ 'status': 200, 'message': u'点赞取消成功', 'data': { 'thumbup': False, 'thumbups': [thumbup.thumbup_info for thumbup in photo_thumbups], } }) def pai2_home_api(request): user_id = request.POST.get('user_id', '') page = int(request.POST.get('page', 1)) num = int(request.POST.get('num', settings.PAI2_HOME_PER_PAGE)) cursor = connection.cursor() cursor.execute(PAI2_HOME_API.format( user_id=user_id, offset=0, rows=settings.PAI2_HOME_MAX_ROWS, )) rows = cursor.fetchall() rows, left = pagination(rows, page, num) rows = [{ 'group_id': row[0], 'group_name': row[1], 'group_default_avatar': row[2], 'group_avatar': row[3], 'photo_id': row[4], 'photo_url': img_url(row[5]), 'photo_w': row[6], 'photo_h': row[7], 'photo_thumbnail_url': img_url(row[8]), 'photo_thumbnail_w': row[9], 'photo_thumbnail_h': row[10], 'user_id': row[11], 'nickname': row[12], 'avatar': row[13], 'comment_num': row[14], 'thumbup_num': row[15], 'created_at': row[16], } for row in rows] return JsonResponse({ 'status': 200, 'message': u'获取首页列表成功', 'data': { 'photos': rows, 'left': left, } }) class GroupInfoViewSet(viewsets.ModelViewSet): queryset = GroupInfo.objects.all().order_by('-pk') serializer_class = GroupInfoSerializer class GroupUserInfoViewSet(viewsets.ModelViewSet): queryset = GroupUserInfo.objects.all().order_by('-pk') serializer_class = GroupUserInfoSerializer class GroupPhotoInfoViewSet(viewsets.ModelViewSet): queryset = GroupPhotoInfo.objects.all().order_by('-pk') serializer_class = GroupPhotoInfoSerializer