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): class AdminType(object):
REGULAR_USER = "regular_user" REGULAR_USER = "Regular User"
ADMIN = "admin" ADMIN = "Admin"
SUPER_ADMIN = "super_admin" SUPER_ADMIN = "Super Admin"
class ProblemSolutionStatus(object): class ProblemSolutionStatus(object):
@@ -47,6 +47,12 @@ class User(AbstractBaseUser):
def is_admin(self): def is_admin(self):
return self.admin_type in [AdminType.ADMIN, AdminType.SUPER_ADMIN] 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: class Meta:
db_table = "user" db_table = "user"

View File

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

View File

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

View File

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

View File

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