diff --git a/group/views.py b/group/views.py index 23e59ad..527486e 100644 --- a/group/views.py +++ b/group/views.py @@ -5,14 +5,14 @@ from django.db import IntegrityError from rest_framework.views import APIView from utils.shortcuts import error_response, serializer_invalid_response, success_response, paginate, error_page -from account.models import REGULAR_USER, ADMIN, SUPER_ADMIN +from account.models import REGULAR_USER, ADMIN, SUPER_ADMIN, User from account.decorators import login_required -from .models import Group, JoinGroupRequest, UserGroupRelation +from .models import Group, JoinGroupRequest, UserGroupRelation, AdminGroupRelation from .serializers import (CreateGroupSerializer, EditGroupSerializer, CreateJoinGroupRequestSerializer, GroupSerializer, GroupMemberSerializer, EditGroupMemberSerializer, - JoinGroupRequestSerializer, PutJoinGroupRequestSerializer) + JoinGroupRequestSerializer, PutJoinGroupRequestSerializer, GroupPromoteAdminSerializer) from announcement.models import Announcement from django.core.paginator import Paginator from django.db.models import Q @@ -57,9 +57,10 @@ class GroupAdminAPIView(APIView, GroupAPIViewBase): group = Group.objects.create(name=data["name"], description=data["description"], join_group_setting=data["join_group_setting"], - admin=request.user) + created_by=request.user) except IntegrityError: return error_response(u"小组名已经存在") + AdminGroupRelation.objects.create(group=group, user=request.user) return success_response(GroupSerializer(group).data) else: return serializer_invalid_response(serializer) @@ -132,8 +133,13 @@ class GroupMemberAdminAPIView(APIView, GroupAPIViewBase): group = self.get_group(request, group_id) except Group.DoesNotExist: return error_response(u"小组不存在") - - return paginate(request, UserGroupRelation.objects.filter(group=group), GroupMemberSerializer) + adminOnly = request.GET.get("adminOnly", None) + if adminOnly: + members = AdminGroupRelation.objects.filter(group=group) + else: + members = UserGroupRelation.objects.filter(group=group) + + return paginate(request, members, GroupMemberSerializer) def put(self, request): """ @@ -314,3 +320,30 @@ def application_page(request, request_id): return error_page(request, u"申请不存在") return render(request, "oj/group/my_application.html", {"application": application}) + + +class GroupPrometAdminAPIView(APIView): + def post(self, request): + """ + 创建小组管理员的api + --- + request_serializer: GroupPromoteAdminSerializer + """ + serializer = GroupPromoteAdminSerializer(data=request.data) + if serializer.is_valid(): + data = serializer.data + try: + group = Group.objects.get(id=data["group_id"]) + except Group.DoesNotExist: + return error_response(u"小组不存在") + try: + user = User.objects.get(id=data["user_id"]) + except User.DoesNotExist: + return error_response(u"用户不存在") + try: + AdminGroupRelation.objects.create(user=user, group=group) + except IntegrityError: + return error_response(u"该用户已经是管理员了") + return success_response(u"操作成功") + else: + return serializer_invalid_response(serializer) diff --git a/oj/urls.py b/oj/urls.py index d2beba1..77a92b6 100644 --- a/oj/urls.py +++ b/oj/urls.py @@ -15,7 +15,7 @@ from contest.views import (ContestAdminAPIView, ContestProblemAdminAPIView, MakeContestProblemPublicAPIView) from group.views import (GroupAdminAPIView, GroupMemberAdminAPIView, - JoinGroupAPIView, JoinGroupRequestAdminAPIView) + JoinGroupAPIView, JoinGroupRequestAdminAPIView, GroupPrometAdminAPIView) from admin.views import AdminTemplateView @@ -55,6 +55,7 @@ urlpatterns = [ url(r'^api/contest/submission/$', ContestSubmissionAPIView.as_view(), name="contest_submission_api"), url(r'^api/submission/$', SubmissionAPIView.as_view(), name="submission_api"), url(r'^api/group_join/$', JoinGroupAPIView.as_view(), name="group_join_api"), + url(r'^api/admin/upload_image/$', SimditorImageUploadAPIView.as_view(), name="simditor_upload_image"), url(r'^api/admin/announcement/$', AnnouncementAdminAPIView.as_view(), name="announcement_admin_api"), @@ -62,6 +63,8 @@ urlpatterns = [ url(r'^api/admin/user/$', UserAdminAPIView.as_view(), name="user_admin_api"), url(r'^api/admin/group/$', GroupAdminAPIView.as_view(), name="group_admin_api"), url(r'^api/admin/group_member/$', GroupMemberAdminAPIView.as_view(), name="group_member_admin_api"), + url(r'^api/admin/group/promot_as_admin/$', GroupPrometAdminAPIView.as_view(), name="group_promote_admin_api"), + url(r'^api/admin/problem/$', ProblemAdminAPIView.as_view(), name="problem_admin_api"), url(r'^api/admin/contest_problem/$', ContestProblemAdminAPIView.as_view(), name="contest_problem_admin_api"),