diff --git a/account/models.py b/account/models.py index c7bf5f3..e64555b 100644 --- a/account/models.py +++ b/account/models.py @@ -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" diff --git a/announcement/views.py b/announcement/views.py index 26fa7f5..8cbe78e 100644 --- a/announcement/views.py +++ b/announcement/views.py @@ -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) diff --git a/contest/models.py b/contest/models.py index 93dcbdf..55ad24d 100644 --- a/contest/models.py +++ b/contest/models.py @@ -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" diff --git a/contest/serializers.py b/contest/serializers.py index 26ebe3b..c1dc13e 100644 --- a/contest/serializers.py +++ b/contest/serializers.py @@ -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 diff --git a/contest/views/admin.py b/contest/views/admin.py index f2b93b7..bbb930d 100644 --- a/contest/views/admin.py +++ b/contest/views/admin.py @@ -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))