from rest_framework import serializers class OnlineClassTokenCreateSerializer(serializers.Serializer): redirect_path = serializers.CharField(required=False) def validate_redirect_path(self, value: str) -> str: value = value.strip() if value and value.startswith("http"): raise serializers.ValidationError("Redirect path must be relative to the frontend domain.") return value class OnlineClassTokenVerifySerializer(serializers.Serializer): token = serializers.CharField(max_length=128) def validate_token(self, value: str) -> str: value = value.strip() if not value: raise serializers.ValidationError("Token is required.") return value class LiveSessionRoomCreateSerializer(serializers.Serializer): room_id = serializers.CharField(required=False, max_length=255, allow_blank=True) subject = serializers.CharField(required=False, max_length=255, allow_blank=True) def validate_room_id(self, value: str) -> str: return value.strip() def validate_subject(self, value: str) -> str: return value.strip() class LiveSessionTokenSerializer(serializers.Serializer): course_slug = serializers.CharField(max_length=255) def validate_course_slug(self, value: str) -> str: value = value.strip() if not value: raise serializers.ValidationError("course_slug is required.") return value