add contest announcement
This commit is contained in:
@@ -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
16
contest/views/oj.py
Normal 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)
|
||||
Reference in New Issue
Block a user