2017-01-26 04:33:00 +00:00
|
|
|
import dateutil.parser
|
|
|
|
from utils.api import APIView, validate_serializer
|
2017-01-26 05:45:39 +00:00
|
|
|
from django.utils import timezone
|
|
|
|
from account.models import AdminType
|
2017-01-26 04:33:00 +00:00
|
|
|
from ..serializers import CreateConetestSeriaizer, ContestSerializer
|
|
|
|
from ..models import Contest
|
|
|
|
|
|
|
|
|
|
|
|
class ContestAPI(APIView):
|
|
|
|
@validate_serializer(CreateConetestSeriaizer)
|
|
|
|
def post(self, request):
|
|
|
|
data = request.data
|
|
|
|
data["start_time"] = dateutil.parser.parse(data["start_time"])
|
|
|
|
data["end_time"] = dateutil.parser.parse(data["end_time"])
|
|
|
|
data["created_by"] = request.user
|
2017-01-26 05:45:39 +00:00
|
|
|
if data["end_time"] <= data["start_time"]:
|
|
|
|
return self.error("Start time must occur earlier than end time")
|
|
|
|
if not data["password"]:
|
|
|
|
data["password"] = None
|
2017-01-26 04:33:00 +00:00
|
|
|
Contest.objects.create(**data)
|
|
|
|
return self.success()
|
|
|
|
|
|
|
|
def get(self, request):
|
2017-01-26 05:45:39 +00:00
|
|
|
contest_id = request.GET.get("id")
|
|
|
|
if contest_id:
|
|
|
|
try:
|
|
|
|
contest = Contest.objects.get(id=contest_id)
|
|
|
|
if request.user.is_admin_role():
|
|
|
|
contest = contest.get(created_by=request.user)
|
|
|
|
return self.success(ContestSerializer(contest).data)
|
|
|
|
except Contest.DoesNotExist:
|
|
|
|
return self.error("Contest does not exist")
|
|
|
|
contests = Contest.objects.all().order_by("-create_time")
|
|
|
|
if request.user.is_admin_role():
|
|
|
|
contests = contests.filter(created_by=request.user)
|
|
|
|
return self.success(self.paginate_data(request, contests, ContestSerializer))
|