@ -452,11 +452,15 @@ class CourseOnlineClassTokenValidateAPIView(GenericAPIView):
}
}
)
)
def get ( self , request , slug , * args , * * kwargs ) :
def get ( self , request , slug , * args , * * kwargs ) :
logger . info ( f " [Online Validate GET] Request received - slug={slug} user_id={request.user.id if request.user.is_authenticated else ' anonymous ' } " )
detail_view = CourseDetailAPIView ( )
detail_view = CourseDetailAPIView ( )
queryset = detail_view . get_queryset ( )
queryset = detail_view . get_queryset ( )
course = get_object_or_404 ( queryset , slug = slug )
course = get_object_or_404 ( queryset , slug = slug )
user = request . user
user = request . user
logger . info ( f " [Online Validate GET] Course found - course_id={course.id} slug={slug} is_online={course.is_online} " )
# DEPRECATED: Polling approach replaced by webhook integration
# DEPRECATED: Polling approach replaced by webhook integration
# Room status is now updated automatically via PlugNMeet webhooks
# Room status is now updated automatically via PlugNMeet webhooks
# self._sync_room_status_with_plugnmeet(course)
# self._sync_room_status_with_plugnmeet(course)
@ -469,6 +473,8 @@ class CourseOnlineClassTokenValidateAPIView(GenericAPIView):
user = user ,
user = user ,
)
)
logger . info ( f " [Online Validate GET] Success - user_id={user.id} course={slug} can_create={metadata.get( ' can_create_live_session ' )} can_join={metadata.get( ' can_join_live_session ' )} " )
return Response ( {
return Response ( {
' course ' : course_data ,
' course ' : course_data ,
' user ' : user_data ,
' user ' : user_data ,
@ -498,41 +504,43 @@ class CourseOnlineClassTokenValidateAPIView(GenericAPIView):
}
}
)
)
def post ( self , request , * args , * * kwargs ) :
def post ( self , request , * args , * * kwargs ) :
logger . info ( f " [Online Validate] Request received " )
logger . info ( f " [Online Validate POST ] Request received - has_token={ ' token ' in request.data} " )
serializer = self . get_serializer ( data = request . data )
serializer = self . get_serializer ( data = request . data )
serializer . is_valid ( raise_exception = True )
serializer . is_valid ( raise_exception = True )
token_value = serializer . validated_data [ ' token ' ]
token_value = serializer . validated_data [ ' token ' ]
logger . info ( f " [Online Validate POST] Token extracted - token={token_value[:16]}... " )
manager = OnlineClassTokenManager ( )
manager = OnlineClassTokenManager ( )
try :
try :
payload = manager . get_payload ( token_value )
payload = manager . get_payload ( token_value )
logger . info ( f " [Online Validate] Token decoded successfully " )
logger . info ( f " [Online Validate POST ] Token decoded successfully - payload={payload} " )
except Exception as e :
except Exception as e :
logger . error ( f " [Online Validate] Token decode failed - error={str(e)} " )
logger . error ( f " [Online Validate POST ] Token decode failed - error={str(e)} type={type(e).__name__ } " )
raise
raise
course_id = payload . get ( ' course_id ' )
course_id = payload . get ( ' course_id ' )
user_id = payload . get ( ' user_id ' )
user_id = payload . get ( ' user_id ' )
if not course_id or not user_id :
if not course_id or not user_id :
logger . warning ( f " [Online Validate] Invalid token payload - course_id={course_id} user_id={user_id} " )
logger . warning ( f " [Online Validate POST ] Invalid token payload - course_id={course_id} user_id={user_id} " )
raise AppAPIException ( { ' message ' : ' Token payload is invalid. ' } , status_code = status . HTTP_400_BAD_REQUEST )
raise AppAPIException ( { ' message ' : ' Token payload is invalid. ' } , status_code = status . HTTP_400_BAD_REQUEST )
logger . info ( f " [Online Validate] Processing for user_id={user_id} course_id={course_id} " )
logger . info ( f " [Online Validate POST ] Processing for user_id={user_id} course_id={course_id} " )
detail_view = CourseDetailAPIView ( )
detail_view = CourseDetailAPIView ( )
queryset = detail_view . get_queryset ( )
queryset = detail_view . get_queryset ( )
course = get_object_or_404 ( queryset , pk = course_id )
course = get_object_or_404 ( queryset , pk = course_id )
user = get_object_or_404 ( UserModel . objects . all ( ) , pk = user_id )
user = get_object_or_404 ( UserModel . objects . all ( ) , pk = user_id )
logger . info ( f " [Online Validate] Course found - slug={course.slug} is_online={course.is_online} " )
logger . info ( f " [Online Validate POST ] Course found - slug={course.slug} is_online={course.is_online} " )
course_data = CourseDetailSerializer ( course , context = { ' request ' : request } ) . data
course_data = CourseDetailSerializer ( course , context = { ' request ' : request } ) . data
user_data = UserProfileSerializer ( user , context = { ' request ' : request } ) . data
user_data = UserProfileSerializer ( user , context = { ' request ' : request } ) . data
metadata = self . _build_metadata ( course , payload , user = user )
metadata = self . _build_metadata ( course , payload , user = user )
logger . info ( f " [Online Validate] Success - user_id={user_id} course={course.slug} can_create={metadata.get( ' can_create_live_session ' )} can_join={metadata.get( ' can_join_live_session ' )} " )
logger . info ( f " [Online Validate POST ] Success - user_id={user_id} course={course.slug} can_create={metadata.get( ' can_create_live_session ' )} can_join={metadata.get( ' can_join_live_session ' )} " )
return Response ( {
return Response ( {
' course ' : course_data ,
' course ' : course_data ,