add contest announcement

This commit is contained in:
virusdefender
2017-01-29 17:04:56 +08:00
parent 5ced3d9ca0
commit 02940029ef
8 changed files with 98 additions and 6 deletions

View File

@@ -2,8 +2,11 @@ import dateutil.parser
from utils.api import APIView, validate_serializer
from ..models import Contest
from ..serializers import ContestSerializer, CreateConetestSeriaizer, EditConetestSeriaizer
from ..models import Contest, ContestAnnouncement
from ..serializers import (ContestAnnouncementSerializer, ContestSerializer,
CreateConetestSeriaizer,
CreateContestAnnouncementSerializer,
EditConetestSeriaizer)
class ContestAPI(APIView):
@@ -60,3 +63,28 @@ class ContestAPI(APIView):
if request.user.is_admin_role():
contests = contests.filter(created_by=request.user)
return self.success(self.paginate_data(request, contests, ContestSerializer))
class ContestAnnouncementAPI(APIView):
@validate_serializer(CreateContestAnnouncementSerializer)
def post(self, request):
data = request.data
try:
contest = Contest.objects.get(id=data.pop("contest_id"))
if request.user.is_admin_role():
contest = contest.get(created_by=request.user)
data["contest"] = contest
data["created_by"] = request.user
except Contest.DoesNotExist:
return self.error("Contest does not exist")
announcement = ContestAnnouncement.objects.create(**data)
return self.success(ContestAnnouncementSerializer(announcement).data)
def delete(self, request):
announcement_id = request.GET.get("id")
if announcement_id:
if request.user.is_admin_role():
ContestAnnouncement.objects.filter(id=announcement_id, contest__created_by=request.user).delete()
else:
ContestAnnouncement.objects.filter(id=announcement_id).delete()
return self.success()

16
contest/views/oj.py Normal file
View File

@@ -0,0 +1,16 @@
from utils.api import APIView
from ..models import ContestAnnouncement
from ..serializers import ContestAnnouncementSerializer
class ContestAnnouncementListAPI(APIView):
def get(self, request):
contest_id = request.GET.get("contest_id")
if not contest_id:
return self.error("Invalid parameter")
data = ContestAnnouncement.objects.filter(contest_id=contest_id).order_by("-create_time")
max_id = request.GET.get("max_id")
if max_id:
data = data.filter(id__gt=max_id)
return self.success(ContestAnnouncementSerializer(data, many=True).data)