add contest list api
This commit is contained in:
@@ -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"
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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"
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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))
|
||||
|
||||
Reference in New Issue
Block a user