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