add contest list api

This commit is contained in:
virusdefender
2017-01-26 13:45:39 +08:00
parent 33f8a6c5a3
commit 27b2c92d8d
5 changed files with 44 additions and 14 deletions

View File

@@ -4,9 +4,9 @@ from jsonfield import JSONField
class AdminType(object):
REGULAR_USER = "regular_user"
ADMIN = "admin"
SUPER_ADMIN = "super_admin"
REGULAR_USER = "Regular User"
ADMIN = "Admin"
SUPER_ADMIN = "Super Admin"
class ProblemSolutionStatus(object):
@@ -47,6 +47,12 @@ class User(AbstractBaseUser):
def is_admin(self):
return self.admin_type in [AdminType.ADMIN, AdminType.SUPER_ADMIN]
def is_admin_role(self):
return self.admin_type == AdminType.ADMIN
def is_super_admin_role(self):
return self.admin_type == AdminType.SUPER_ADMIN
class Meta:
db_table = "user"

View File

@@ -46,7 +46,7 @@ class AnnouncementAdminAPI(APIView):
"""
get announcement list / get one announcement
"""
announcement_id = request.GET.get("announcement_id")
announcement_id = request.GET.get("id")
if announcement_id:
try:
announcement = Announcement.objects.get(id=announcement_id)

View File

@@ -8,19 +8,19 @@ from utils.models import RichTextField
class ContestType(object):
PUBLIC_CONTEST = "public_contest"
PASSWORD_PROTECTED_CONTEST = "password_protected_contest"
PUBLIC_CONTEST = "Public"
PASSWORD_PROTECTED_CONTEST = "Password Protected"
class ContestStatus(object):
CONTEST_NOT_START = "contest_not_start"
CONTEST_ENDED = "contest_ended"
CONTEST_UNDERWAY = "contest_underway"
CONTEST_NOT_START = "Not Started"
CONTEST_ENDED = "Ended"
CONTEST_UNDERWAY = "Underway"
class ContestRuleType(object):
ACM = "acm"
OI = "oi"
ACM = "ACM"
OI = "OI"
class Contest(models.Model):
@@ -51,6 +51,12 @@ class Contest(models.Model):
# 正在进行 返回0
return ContestStatus.CONTEST_UNDERWAY
@property
def contest_type(self):
if self.password:
return ContestType.PASSWORD_PROTECTED_CONTEST
return ContestType.PUBLIC_CONTEST
class Meta:
db_table = "contest"

View File

@@ -20,6 +20,8 @@ class ContestSerializer(serializers.ModelSerializer):
create_time = DateTimeTZField()
last_update_time = DateTimeTZField()
created_by = UsernameSerializer()
status = serializers.CharField()
contest_type = serializers.CharField()
class Meta:
model = Contest

View File

@@ -1,5 +1,7 @@
import dateutil.parser
from utils.api import APIView, validate_serializer
from django.utils import timezone
from account.models import AdminType
from ..serializers import CreateConetestSeriaizer, ContestSerializer
from ..models import Contest
@@ -11,10 +13,24 @@ class ContestAPI(APIView):
data["start_time"] = dateutil.parser.parse(data["start_time"])
data["end_time"] = dateutil.parser.parse(data["end_time"])
data["created_by"] = request.user
print(data)
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
Contest.objects.create(**data)
print(request.data)
return self.success()
def get(self, request):
return self.success(ContestSerializer(Contest.objects.all(), many=True).data)
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))