diff --git a/access/urls.py b/access/urls.py index d13a251..39dafea 100644 --- a/access/urls.py +++ b/access/urls.py @@ -3,7 +3,7 @@ from access import views urlpatterns = [ url(r'teachers/$', views.TeacherListView.as_view()), - url(r'info/$', views.InfoUserView.as_view()), + url(r'detail/$', views.DetailUserView.as_view()), url(r'detail/([0-9]{1,99})/$', views.DetailUserView.as_view()), url(r'guard/(?P[0-9]{1,99})/(?P.+)/$', views.UserGuardView.as_view()), url(r'find/$', views.FindUserView.as_view()), diff --git a/access/views.py b/access/views.py index beee77e..6c33ce1 100644 --- a/access/views.py +++ b/access/views.py @@ -31,16 +31,6 @@ class CheckUserView(APIView): return Response(False, status=self.status_code) -class InfoUserView(APIView): - renderer_classes = (JSONRenderer,) - status_code = 200 - - def get(self, request): - if request.user.is_authenticated(): - return Response(UserSelfSerializer(request.user).data, status=self.status_code) - return Response('anonymous', status=self.status_code) - - class FindUserView(APIView): renderer_classes = (JSONRenderer,) status_code = 200 @@ -77,8 +67,16 @@ class DetailUserView(APIView): permission_classes = (IsAuthenticated,) @staticmethod - def get(request, pk): - if request.user.is_superuser or request.user.is_staff or request.user.id == int(pk): + def get(request, pk=None): + if pk is None: + if request.user.is_authenticated(): + serialized_user = UserSelfSerializer(request.user).data + serialized_user['is_i'] = True + return Response(serialized_user, status=200) + return Response('anonymous', status=200) + + if request.user.is_authenticated() and request.user.is_superuser \ + or request.user.is_staff or request.user.id == int(pk): try: user = get_user_model().objects.get(id=pk) diff --git a/courses/views.py b/courses/views.py index 25a1e8c..db85ea3 100644 --- a/courses/views.py +++ b/courses/views.py @@ -86,7 +86,9 @@ class VertexDetail(APIView): progress = vertex.course.progress_set.filter(user=request.user) try: if progress.exists(): - res['next'] = MiniVertexSerializer(vertex.get_next(progress[0].get_template())).data + next_vertex = vertex.get_next(progress[0].get_template()) + if next_vertex: + res['next'] = MiniVertexSerializer(next_vertex).data res['is_in_progress'] = vertex in progress[0].get_objects_in_progress() else: res['next'] = MiniVertexSerializer(vertex.get_next(vertex.course.route)).data diff --git a/maps/models.py b/maps/models.py index 1d2ed60..6a90a4e 100644 --- a/maps/models.py +++ b/maps/models.py @@ -43,7 +43,8 @@ class CourseMap(models.Model): def get_next(self, vertex): pivot = self.pivotvertex_set.get(vertex=vertex) - return self.pivotvertex_set.filter(sort__gt=pivot.sort).exclude(vertex__content_type__model='topic').first().vertex + pivots = self.pivotvertex_set.filter(sort__gt=pivot.sort).exclude(vertex__content_type__model='topic') + return pivots.first().vertex if pivots.exists() else None @transaction_decorator def add_vertex(self, vertex, sort):