from utils.api import DateTimeTZField, UsernameSerializer, serializers from .models import Contest, ContestAnnouncement, ContestRuleType from .models import ACMContestRank, OIContestRank class CreateConetestSeriaizer(serializers.Serializer): title = serializers.CharField(max_length=128) description = serializers.CharField() start_time = serializers.DateTimeField() end_time = serializers.DateTimeField() rule_type = serializers.ChoiceField(choices=[ContestRuleType.ACM, ContestRuleType.OI]) password = serializers.CharField(allow_blank=True, max_length=32) visible = serializers.BooleanField() real_time_rank = serializers.BooleanField() class EditConetestSeriaizer(serializers.Serializer): id = serializers.IntegerField() title = serializers.CharField(max_length=128) description = serializers.CharField() start_time = serializers.DateTimeField() end_time = serializers.DateTimeField() password = serializers.CharField(allow_blank=True, allow_null=True, max_length=32) visible = serializers.BooleanField() real_time_rank = serializers.BooleanField() class ContestAdminSerializer(serializers.ModelSerializer): start_time = DateTimeTZField() end_time = DateTimeTZField() create_time = DateTimeTZField() last_update_time = DateTimeTZField() created_by = UsernameSerializer() status = serializers.CharField() contest_type = serializers.CharField() class Meta: model = Contest class ContestSerializer(ContestAdminSerializer): class Meta: model = Contest exclude = ("password", "visible") class ContestAnnouncementSerializer(serializers.ModelSerializer): created_by = UsernameSerializer() create_time = DateTimeTZField() class Meta: model = ContestAnnouncement class CreateContestAnnouncementSerializer(serializers.Serializer): title = serializers.CharField(max_length=128) content = serializers.CharField() contest_id = serializers.IntegerField() class ContestPasswordVerifySerializer(serializers.Serializer): contest_id = serializers.IntegerField() password = serializers.CharField(max_length=30, required=True) class ACMContestRankSerializer(serializers.ModelSerializer): user = UsernameSerializer() submission_info = serializers.JSONField() class Meta: model = ACMContestRank class OIContestRankSerializer(serializers.ModelSerializer): user = UsernameSerializer() submission_info = serializers.JSONField() class Meta: model = OIContestRank