Browse Source

fix(course)!: switch online validate route to slug

- change URL pattern to use <slug:slug> instead of <int:pk>
- update view signature and swagger parameter to slug
- fetch course by slug to match detail endpoint
- ensures consistent API across course endpoints

BREAKING CHANGE: the online validate endpoint now uses slug instead of pk; clients must update the path parameter from integer pk to string slug
master
mortezaei 7 months ago
parent
commit
faebbaca30
  1. 2
      apps/course/urls.py
  2. 10
      apps/course/views/course.py

2
apps/course/urls.py

@ -14,7 +14,7 @@ urlpatterns = [
path('professors/<slug:slug>/courses/', views.ProfessorCourseListAPIView.as_view(), name='course-professor-course-list'), path('professors/<slug:slug>/courses/', views.ProfessorCourseListAPIView.as_view(), name='course-professor-course-list'),
path('professors/<slug:slug>/', views.ProfessorDetailAPIView.as_view(), name='course-professor-detail'), path('professors/<slug:slug>/', views.ProfessorDetailAPIView.as_view(), name='course-professor-detail'),
path('<int:pk>/online/token/', views.CourseOnlineClassTokenAPIView.as_view(), name='course-online-token'), path('<int:pk>/online/token/', views.CourseOnlineClassTokenAPIView.as_view(), name='course-online-token'),
path('<int:pk>/online/validate/', views.CourseOnlineClassTokenValidateAPIView.as_view(), name='course-online-validate'),
path('<slug:slug>/online/validate/', views.CourseOnlineClassTokenValidateAPIView.as_view(), name='course-online-validate'),
path('online/token/validate/', views.CourseOnlineClassTokenValidateAPIView.as_view(), name='course-online-token-validate'), path('online/token/validate/', views.CourseOnlineClassTokenValidateAPIView.as_view(), name='course-online-token-validate'),
path('<slug:slug>/', views.CourseDetailAPIView.as_view(), name='course-detail'), path('<slug:slug>/', views.CourseDetailAPIView.as_view(), name='course-detail'),

10
apps/course/views/course.py

@ -376,9 +376,9 @@ class CourseOnlineClassTokenValidateAPIView(GenericAPIView):
operation_description="Get course and user data for authenticated user.", operation_description="Get course and user data for authenticated user.",
manual_parameters=[ manual_parameters=[
openapi.Parameter( openapi.Parameter(
'pk', openapi.IN_PATH,
description="Course ID",
type=openapi.TYPE_INTEGER,
'slug', openapi.IN_PATH,
description="Course Slug",
type=openapi.TYPE_STRING,
required=True required=True
) )
], ],
@ -400,10 +400,10 @@ class CourseOnlineClassTokenValidateAPIView(GenericAPIView):
) )
} }
) )
def get(self, request, pk, *args, **kwargs):
def get(self, request, slug, *args, **kwargs):
detail_view = CourseDetailAPIView() detail_view = CourseDetailAPIView()
queryset = detail_view.get_queryset() queryset = detail_view.get_queryset()
course = get_object_or_404(queryset, pk=pk)
course = get_object_or_404(queryset, slug=slug)
user = request.user user = request.user
course_data = CourseDetailSerializer(course, context={'request': request}).data course_data = CourseDetailSerializer(course, context={'request': request}).data

Loading…
Cancel
Save