From 097802b0334b2324d76b2725aa8fdb09cedb915f Mon Sep 17 00:00:00 2001 From: Joyriver-laptop Date: Wed, 7 Aug 2024 21:09:32 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EB=B6=88=ED=95=84=EC=9A=94=ED=95=9C=20?= =?UTF-8?q?=EB=B7=B0=EB=93=A4=20=EC=82=AD=EC=A0=9C.=20=ED=8C=8C=EB=9D=BC?= =?UTF-8?q?=EB=AF=B8=ED=84=B0=EB=A5=BC=20=EC=82=AC=EC=9A=A9=ED=95=9C=20?= =?UTF-8?q?=ED=95=84=ED=84=B0=EB=A7=81=20=EC=B6=94=EA=B0=80.=20api=20?= =?UTF-8?q?=EB=B6=80=EA=B0=80=20=EC=84=A4=EB=AA=85=20=EC=B6=94=EA=B0=80.?= =?UTF-8?q?=20=EB=8B=A8=EC=88=9C=ED=99=94=20=EC=8B=9C=EB=A6=AC=EC=96=BC?= =?UTF-8?q?=EB=9D=BC=EC=9D=B4=EC=A0=80=20=EC=B6=94=EA=B0=80.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- KUA/course/serializers.py | 13 ++ KUA/course/urls.py | 32 +--- KUA/course/views.py | 386 ++++++++++++++++---------------------- 3 files changed, 181 insertions(+), 250 deletions(-) diff --git a/KUA/course/serializers.py b/KUA/course/serializers.py index 22a58c7..7999e9d 100644 --- a/KUA/course/serializers.py +++ b/KUA/course/serializers.py @@ -9,6 +9,11 @@ class Meta: model = Course fields = '__all__' +class CourseMinimalSerializer(serializers.ModelSerializer): + class Meta: + model = Course + fields = ['id', 'course_id'] + class TagSerializer(serializers.ModelSerializer): class Meta: @@ -21,12 +26,20 @@ class Meta: model = Post fields = '__all__' +class PostMinimalSerializer(serializers.ModelSerializer): + class Meta: + model = Post + fields = ['id', 'title'] class CommentSerializer(serializers.ModelSerializer): class Meta: model = Comment fields = '__all__' +class CommentMinimalSerializer(serializers.ModelSerializer): + class Meta: + model = Comment + fields = ['id', 'post_id', 'student_id'] class TimeTableSerializer(serializers.ModelSerializer): class Meta: diff --git a/KUA/course/urls.py b/KUA/course/urls.py index 82317af..c0dd2d1 100644 --- a/KUA/course/urls.py +++ b/KUA/course/urls.py @@ -3,34 +3,16 @@ from course import views router = DefaultRouter() -router.register(r'courses', views.CourseViewSet) -router.register(r'tags', views.TagViewSet) -router.register(r'posts', views.PostViewSet) -router.register(r'comments', views.CommentViewSet) -router.register(r'timetables', views.TimeTableViewSet) +router.register(r'courses', views.CourseViewSet, basename='course') +router.register(r'tags', views.TagViewSet, basename='tag') +router.register(r'posts', views.PostViewSet, basename='post') +router.register(r'comments', views.CommentViewSet, basename='comment') +router.register(r'timetables', views.TimeTableViewSet, basename='timetable') urlpatterns = [ path('', include(router.urls)), - path('courses//posts/', views.CoursePostListView.as_view(), name='course-posts'), - path('posts//comments/', views.PostCommentListView.as_view(), name='post-comments'), - path('tags//posts/', views.TagPostListView.as_view(), name='tag-posts'), - path('student//posts/', views.StudentPostListView.as_view(), name='student-posts'), - path('student//comments/', views.StudentCommentListView.as_view(), name='student-comments'), - + path('student//submit-timetable/', views.SubmitTimeTableView().as_view(), name='submit-timetable'), - - # 특정 게시판 게시글 - path('courses//posts/', - views.CoursePostListView.as_view(), name='course-posts'), - # 특정 게시글의 댓글 - path('posts//comments/', - views.PostCommentListView.as_view(), name='post-comments'), - # 특정 태그의 게시글 - path('posts//', views.TagPostListView.as_view(), name='post-tags'), - - # 특정 학생의 시간표 - path('student//timetable/', views.StudentTimeTableView.as_view(), name='student-timetable'), - - + ] diff --git a/KUA/course/views.py b/KUA/course/views.py index 26dce3c..261e9f2 100644 --- a/KUA/course/views.py +++ b/KUA/course/views.py @@ -1,65 +1,80 @@ + from django.shortcuts import get_object_or_404 from rest_framework import viewsets, generics, status from rest_framework.authentication import TokenAuthentication from rest_framework.permissions import IsAuthenticated from .models import Course, Tag, Post, Comment, TimeTable from student.models import Student -from .serializers import CourseSerializer, TagSerializer, PostSerializer, CommentSerializer, TimeTableSerializer +from .serializers import * from rest_framework.response import Response from drf_yasg.utils import swagger_auto_schema from drf_yasg import openapi # 강의 전체 뷰(CRUD 포함) - - class CourseViewSet(viewsets.ModelViewSet): - queryset = Course.objects.all() serializer_class = CourseSerializer def get_queryset(self): queryset = Course.objects.all() - # 필터링 조건 추가 (예: course_id, instructor, year 등의 필터) + # 필터링 조건 추가 course_id = self.request.query_params.get('course_id', None) + course_name = self.request.query_params.get('course_name', None) instructor = self.request.query_params.get('instructor', None) year = self.request.query_params.get('year', None) + semester = self.request.query_params.get('semester', None) if course_id is not None: queryset = queryset.filter(course_id=course_id) + if course_name is not None: + queryset = queryset.filter(course_name__icontains=course_name) + if instructor is not None: - queryset = queryset.filter(instructor__name__icontains=instructor) + queryset = queryset.filter(instructor__icontains=instructor) if year is not None: queryset = queryset.filter(year=year) + if semester is not None: + queryset = queryset.filter(semester=semester) + return queryset @swagger_auto_schema( operation_summary="강의 목록 조회 기능 - 완료", operation_description="모든 강의 목록을 조회하거나, 쿼리 파라미터에 따라 필터링된 강의 목록을 조회합니다.", manual_parameters=[ - openapi.Parameter('course_id', openapi.IN_QUERY, description="강의 ID로 필터링", type=openapi.TYPE_STRING), - openapi.Parameter('instructor', openapi.IN_QUERY, description="강의 담당 교수로 필터링", type=openapi.TYPE_STRING), + openapi.Parameter('course_id', openapi.IN_QUERY, description="학수번호로 필터링", type=openapi.TYPE_STRING), + openapi.Parameter('course_name', openapi.IN_QUERY, description="강의명으로 필터링", type=openapi.TYPE_STRING), + openapi.Parameter('instructor', openapi.IN_QUERY, description="교수로 필터링", type=openapi.TYPE_STRING), openapi.Parameter('year', openapi.IN_QUERY, description="강의 개설 연도로 필터링", type=openapi.TYPE_INTEGER), + openapi.Parameter('semester', openapi.IN_QUERY, description="학기별로 필터링", type=openapi.TYPE_INTEGER), ], - responses={200: CourseSerializer(many=True)} + responses={200: CourseMinimalSerializer(many=True)} ) def list(self, request, *args, **kwargs): - return super().list(request, *args, **kwargs) + queryset = self.get_queryset() + serializer = CourseMinimalSerializer(queryset, many=True) + return Response(serializer.data) @swagger_auto_schema( operation_summary="강의 생성 기능 - 완료", operation_description="새로운 강의를 생성합니다.", request_body=CourseSerializer, - responses={201: CourseSerializer} + responses={201: CourseMinimalSerializer} ) + def create(self, request, *args, **kwargs): - return super().create(request, *args, **kwargs) - + serializer = self.get_serializer(data=request.data) + serializer.is_valid(raise_exception=True) + self.perform_create(serializer) + minimal_serializer = CourseMinimalSerializer(serializer.instance) + return Response(minimal_serializer.data, status=status.HTTP_201_CREATED) + @swagger_auto_schema( - operation_summary="강의 조회 기능 - 작업 중", - operation_description="ID 또는 학수번호, 교수 등으로 특정 강의를 조회합니다.", + operation_summary="강의 조회 기능 - 완료", + operation_description="겅의 인덱스로 특정 강의의 세부 정보를 조회합니다.", responses={200: CourseSerializer} ) def retrieve(self, request, *args, **kwargs): @@ -67,7 +82,7 @@ def retrieve(self, request, *args, **kwargs): @swagger_auto_schema( operation_summary="강의 수정 기능 - 완료", - operation_description="기존 강의 정보를 수정합니다. 강의 모델의 모든 내용이 들어있어야 합니다.", + operation_description="기존 강의 정보를 수정합니다.", request_body=CourseSerializer, responses={200: CourseSerializer} ) @@ -76,7 +91,7 @@ def update(self, request, *args, **kwargs): @swagger_auto_schema( operation_summary="강의 부분 수정 - 완료", - operation_description="강의 정보의 일부만 수정합니다.", + operation_description="강의 정보의 일부를 수정합니다.", request_body=CourseSerializer, responses={200: CourseSerializer} ) @@ -86,21 +101,33 @@ def partial_update(self, request, *args, **kwargs): @swagger_auto_schema( operation_summary="강의 삭제 - 완료", operation_description="ID로 특정 강의를 삭제합니다.", - responses={204: 'No Content'} + responses={204: 'Deleted'} ) def destroy(self, request, *args, **kwargs): return super().destroy(request, *args, **kwargs) # 태그 전체 뷰 - - class TagViewSet(viewsets.ModelViewSet): queryset = Tag.objects.all() serializer_class = TagSerializer + def get_queryset(self): + queryset = Tag.objects.all() + + # 필터링 조건 추가 + name = self.request.query_params.get('name', None) + + if name is not None: + queryset = queryset.filter(name__icontains=name) + + return queryset + @swagger_auto_schema( operation_summary="태그 목록 조회 - 완료", - operation_description="모든 태그 목록을 조회합니다.", + operation_description="모든 태그 목록을 조회하거나, 이름으로 필터링된 태그 목록을 조회합니다.", + manual_parameters=[ + openapi.Parameter('name', openapi.IN_QUERY, description="태그 이름으로 필터링", type=openapi.TYPE_STRING), + ], responses={200: TagSerializer(many=True)} ) def list(self, request, *args, **kwargs): @@ -116,15 +143,15 @@ def create(self, request, *args, **kwargs): return super().create(request, *args, **kwargs) @swagger_auto_schema( - operation_summary="태그 조회 - 작업 중", - operation_description="ID 혹은 이름으로 특정 태그를 조회합니다.", + operation_summary="태그 조회 - 완료", + operation_description="이름으로 특정 태그를 조회합니다.\n 대충 포함되는 단어로도 검색이 됩니다.", responses={200: TagSerializer} ) def retrieve(self, request, *args, **kwargs): return super().retrieve(request, *args, **kwargs) @swagger_auto_schema( - operation_summary="태그 수정 - 완료", + operation_summary="태그 수정", operation_description="기존 태그 정보를 수정합니다.", request_body=TagSerializer, responses={200: TagSerializer} @@ -133,7 +160,7 @@ def update(self, request, *args, **kwargs): return super().update(request, *args, **kwargs) @swagger_auto_schema( - operation_summary="태그 부분 수정 - 완료", + operation_summary="태그 부분 수정", operation_description="태그 정보의 일부를 수정합니다.", request_body=TagSerializer, responses={200: TagSerializer} @@ -142,31 +169,63 @@ def partial_update(self, request, *args, **kwargs): return super().partial_update(request, *args, **kwargs) @swagger_auto_schema( - operation_summary="태그 삭제 - 작업 중", - operation_description="ID 또는 이름으로 특정 태그를 삭제합니다.", - responses={204: 'No Content'} + operation_summary="태그 삭제", + operation_description="ID로 특정 태그를 삭제합니다.", + responses={204: 'Deleted'} ) def destroy(self, request, *args, **kwargs): return super().destroy(request, *args, **kwargs) + # 게시글 전체 뷰 class PostViewSet(viewsets.ModelViewSet): - queryset = Post.objects.all() serializer_class = PostSerializer + + def get_queryset(self): + queryset = Post.objects.all() + + # 필터링 조건 추가 + course_index = self.request.query_params.get('course_index',None) + course_id = self.request.query_params.get('course_id', None) + student_id = self.request.query_params.get('student_id', None) + title = self.request.query_params.get('title', None) + + + if course_index is not None: + queryset = queryset.filter(course_fk_id=course_index) + + if course_id is not None: + queryset = queryset.filter(course_fk__course_id=course_id) + + if student_id is not None: + queryset = queryset.filter(student_id=student_id) + + if title is not None: + queryset = queryset.filter(title__icontains=title) + + return queryset @swagger_auto_schema( - operation_summary="게시글 목록 조회 - 완료", - operation_description="모든 게시글 목록을 조회합니다.", - responses={200: PostSerializer(many=True)} + operation_summary="게시글 목록 조회 기능 - 완료", + operation_description="모든 게시글 목록을 조회하거나, 쿼리 파라미터에 따라 필터링된 게시글 목록을 조회합니다.", + manual_parameters=[ + openapi.Parameter('course_index', openapi.IN_QUERY,description="강의 인덱스로 필터링", type=openapi.TYPE_INTEGER), + openapi.Parameter('course_id', openapi.IN_QUERY, description="학수번호로 필터링", type=openapi.TYPE_STRING), + openapi.Parameter('student_id', openapi.IN_QUERY, description="학생 ID로 필터링", type=openapi.TYPE_INTEGER), + openapi.Parameter('title', openapi.IN_QUERY, description="게시글 제목으로 필터링", type=openapi.TYPE_STRING), + ], + responses={200: PostMinimalSerializer(many=True)} ) def list(self, request, *args, **kwargs): - return super().list(request, *args, **kwargs) + queryset = self.get_queryset() + serializer = PostMinimalSerializer(queryset, many=True) + return Response(serializer.data) @swagger_auto_schema( - operation_summary="게시글 생성 - 작업 중", - operation_description="현재 로그인한 유저로 특정 강의에 대해 새로운 게시글을 생성합니다.", + operation_summary="게시글 생성 기능 - 완료", + operation_description="새로운 게시글을 생성합니다.", request_body=PostSerializer, responses={201: PostSerializer} ) @@ -174,15 +233,15 @@ def create(self, request, *args, **kwargs): return super().create(request, *args, **kwargs) @swagger_auto_schema( - operation_summary="게시글 조회 - 작업 중", - operation_description="ID 혹은 제목으로 특정 게시글을 조회합니다.", + operation_summary="게시글 조회 기능 - 완료", + operation_description="게시글 인덱스로 특정 게시글을 조회합니다.", responses={200: PostSerializer} ) def retrieve(self, request, *args, **kwargs): return super().retrieve(request, *args, **kwargs) @swagger_auto_schema( - operation_summary="게시글 수정 - 완료", + operation_summary="게시글 수정 기능 - 완료", operation_description="기존 게시글 정보를 수정합니다.", request_body=PostSerializer, responses={200: PostSerializer} @@ -202,7 +261,7 @@ def partial_update(self, request, *args, **kwargs): @swagger_auto_schema( operation_summary="게시글 삭제 - 완료", operation_description="ID로 특정 게시글을 삭제합니다.", - responses={204: 'No Content'} + responses={204: 'Deleted'} ) def destroy(self, request, *args, **kwargs): return super().destroy(request, *args, **kwargs) @@ -210,20 +269,40 @@ def destroy(self, request, *args, **kwargs): # 댓글 전체 뷰 class CommentViewSet(viewsets.ModelViewSet): - queryset = Comment.objects.all() serializer_class = CommentSerializer + + def get_queryset(self): + queryset = Comment.objects.all() + + # 필터링 조건 추가 + post_id = self.request.query_params.get('post_id', None) + student_id = self.request.query_params.get('student_id', None) + + if post_id is not None: + queryset = queryset.filter(post_id=post_id) + + if student_id is not None: + queryset = queryset.filter(student_id=student_id) + + return queryset @swagger_auto_schema( - operation_summary="댓글 목록 조회 - 완료", - operation_description="모든 댓글 목록을 조회합니다.", - responses={200: CommentSerializer(many=True)} + operation_summary="댓글 목록 조회 기능 - 완료", + operation_description="모든 댓글 목록을 조회하거나, 쿼리 파라미터에 따라 필터링된 댓글 목록을 조회합니다.", + manual_parameters=[ + openapi.Parameter('post_id', openapi.IN_QUERY, description="게시글 ID로 필터링", type=openapi.TYPE_INTEGER), + openapi.Parameter('student_id', openapi.IN_QUERY, description="학생 ID로 필터링", type=openapi.TYPE_INTEGER), + ], + responses={200: CommentMinimalSerializer(many=True)} ) def list(self, request, *args, **kwargs): - return super().list(request, *args, **kwargs) + queryset = self.get_queryset() + serializer = CommentMinimalSerializer(queryset, many=True) + return Response(serializer.data) @swagger_auto_schema( - operation_summary="댓글 작성 - 완료", - operation_description="특정 게시글에 대한 새로운 댓글을 작성합니다.", + operation_summary="댓글 생성 기능 - 완료", + operation_description="새로운 댓글을 작성합니다.", request_body=CommentSerializer, responses={201: CommentSerializer} ) @@ -231,15 +310,15 @@ def create(self, request, *args, **kwargs): return super().create(request, *args, **kwargs) @swagger_auto_schema( - operation_summary="댓글 조회 - 작업 중", - operation_description="ID, 학생, 강의명 등으로 특정 댓글을 조회합니다.", + operation_summary="댓글 조회 기능 - 완료", + operation_description="댓글 인덱스로 특정 댓글을 조회합니다.", responses={200: CommentSerializer} ) def retrieve(self, request, *args, **kwargs): return super().retrieve(request, *args, **kwargs) @swagger_auto_schema( - operation_summary="댓글 수정 - 완료", + operation_summary="댓글 수정 기능 - 완료", operation_description="기존 댓글 정보를 수정합니다.", request_body=CommentSerializer, responses={200: CommentSerializer} @@ -259,26 +338,50 @@ def partial_update(self, request, *args, **kwargs): @swagger_auto_schema( operation_summary="댓글 삭제 - 완료", operation_description="ID로 특정 댓글을 삭제합니다.", - responses={204: 'No Content'} + responses={204: 'Deleted'} ) def destroy(self, request, *args, **kwargs): return super().destroy(request, *args, **kwargs) + # 시간표 뷰 class TimeTableViewSet(viewsets.ModelViewSet): - queryset = TimeTable.objects.all() serializer_class = TimeTableSerializer + + def get_queryset(self): + queryset = TimeTable.objects.all() + + # 필터링 조건 추가 + student_id = self.request.query_params.get('student_id', None) + year = self.request.query_params.get('year', None) + semester = self.request.query_params.get('semester', None) + + if student_id is not None: + queryset = queryset.filter(student_id=student_id) + + if year is not None: + queryset = queryset.filter(year=year) + + if semester is not None: + queryset = queryset.filter(semester=semester) + + return queryset @swagger_auto_schema( - operation_summary="시간표 목록 조회 - 작업 중", - operation_description="모든 시간표 목록을 조회합니다.", + operation_summary="시간표 목록 조회 기능 - 완료", + operation_description="모든 시간표 목록을 조회하거나, 쿼리 파라미터에 따라 필터링된 시간표 목록을 조회합니다.", + manual_parameters=[ + openapi.Parameter('student_id', openapi.IN_QUERY, description="학생 ID로 필터링", type=openapi.TYPE_INTEGER), + openapi.Parameter('year', openapi.IN_QUERY, description="년도별로 필터링", type=openapi.TYPE_STRING), + openapi.Parameter('semester', openapi.IN_QUERY, description="학기별로 필터링", type=openapi.TYPE_STRING), + ], responses={200: TimeTableSerializer(many=True)} ) def list(self, request, *args, **kwargs): return super().list(request, *args, **kwargs) @swagger_auto_schema( - operation_summary="시간표 생성 - 작업 중", + operation_summary="시간표 생성 기능", operation_description="새로운 시간표를 생성합니다.", request_body=TimeTableSerializer, responses={201: TimeTableSerializer} @@ -287,7 +390,7 @@ def create(self, request, *args, **kwargs): return super().create(request, *args, **kwargs) @swagger_auto_schema( - operation_summary="시간표 조회 - 작업 중", + operation_summary="시간표 조회 기능", operation_description="ID로 특정 시간표를 조회합니다.", responses={200: TimeTableSerializer} ) @@ -295,7 +398,7 @@ def retrieve(self, request, *args, **kwargs): return super().retrieve(request, *args, **kwargs) @swagger_auto_schema( - operation_summary="시간표 수정 - 작업 중", + operation_summary="시간표 수정 기능", operation_description="기존 시간표 정보를 수정합니다.", request_body=TimeTableSerializer, responses={200: TimeTableSerializer} @@ -304,7 +407,7 @@ def update(self, request, *args, **kwargs): return super().update(request, *args, **kwargs) @swagger_auto_schema( - operation_summary="시간표 부분 수정 - 작업 중", + operation_summary="시간표 부분 수정", operation_description="시간표 정보의 일부를 수정합니다.", request_body=TimeTableSerializer, responses={200: TimeTableSerializer} @@ -313,157 +416,16 @@ def partial_update(self, request, *args, **kwargs): return super().partial_update(request, *args, **kwargs) @swagger_auto_schema( - operation_summary="시간표 삭제 - 작업 중", + operation_summary="시간표 삭제", operation_description="ID로 특정 시간표를 삭제합니다.", responses={204: 'No Content'} ) def destroy(self, request, *args, **kwargs): return super().destroy(request, *args, **kwargs) -# 특정 강의에 대한 게시글을 보는 뷰 - - -class CoursePostListView(generics.ListAPIView): - serializer_class = PostSerializer - authentication_classes = [TokenAuthentication] - permission_classes = [IsAuthenticated] - - @swagger_auto_schema( - operation_summary="특정 강의의 게시글 목록 조회 - 완료", - operation_description="강의 인스턴스 ID로(학수번호 아님!) 특정 강의에 대한 모든 게시글을 조회합니다.", - manual_parameters=[ - openapi.Parameter( - 'id', openapi.IN_PATH, - description="조회할 강의의 ID", type=openapi.TYPE_INTEGER - ) - ], - responses={ - 200: openapi.Response( - description="성공적으로 조회된 게시글 목록", - schema=PostSerializer(many=True) - ), - 404: openapi.Response(description="강의를 찾을 수 없습니다.") - } - ) - def get_queryset(self): - id = self.kwargs['id'] - return Post.objects.filter(course_fk_id = id) - - -# 특정 게시글의 댓글을 보는 뷰 - - -class PostCommentListView(generics.ListAPIView): - serializer_class = CommentSerializer - authentication_classes = [TokenAuthentication] - permission_classes = [IsAuthenticated] - - @swagger_auto_schema( - operation_summary="특정 게시글의 댓글 목록 조회", - operation_description="게시글 ID로 특정 게시글에 대한 모든 댓글을 조회합니다.", - manual_parameters=[ - openapi.Parameter( - 'post_id', openapi.IN_PATH, - description="조회할 게시글의 ID", type=openapi.TYPE_INTEGER - ) - ], - responses={ - 200: openapi.Response( - description="성공적으로 조회된 댓글 목록", - schema=CommentSerializer(many=True) - ), - 404: openapi.Response(description="게시글을 찾을 수 없습니다.") - } - ) - def get_queryset(self): - post_id = self.kwargs['post_id'] - return Comment.objects.filter(post_id=post_id) - - -# 특정 태그의 게시글 리스트를 보는 뷰 - -class TagPostListView(generics.ListAPIView): - serializer_class = PostSerializer - - @swagger_auto_schema( - operation_summary="특정 태그의 게시글 목록 조회", - operation_description="태그 이름으로 특정 태그가 포함된 게시글을 조회합니다.", - manual_parameters=[ - openapi.Parameter( - 'tag', openapi.IN_PATH, - description="조회할 태그의 이름", type=openapi.TYPE_STRING - ) - ], - responses={ - 200: openapi.Response( - description="성공적으로 조회된 게시글 목록", - schema=PostSerializer(many=True) - ), - 404: openapi.Response(description="해당 태그를 찾을 수 없습니다.") - } - ) - def get_queryset(self): - tag = self.kwargs['tag'] - return Post.objects.filter(tags__name=tag) - - -# 특정 학생이 작성한 게시글 리스트 뷰 - -class StudentPostListView(generics.ListAPIView): - serializer_class = PostSerializer - @swagger_auto_schema( - operation_summary="특정 학생이 작성한 게시글 목록 조회", - operation_description="학생 ID로 특정 학생이 작성한 모든 게시글을 조회합니다.", - manual_parameters=[ - openapi.Parameter( - 'student_id', openapi.IN_PATH, - description="조회할 학생의 ID", type=openapi.TYPE_INTEGER - ) - ], - responses={ - 200: openapi.Response( - description="성공적으로 조회된 게시글 목록", - schema=PostSerializer(many=True) - ), - 404: openapi.Response(description="해당 학생을 찾을 수 없습니다.") - } - ) - def get_queryset(self): - student_id = self.kwargs['student_id'] - student = get_object_or_404(Student, id=student_id) - return Post.objects.filter(student=student) - -# 특정 학생이 작성한 댓글 리스트 뷰 - - -class StudentCommentListView(generics.ListAPIView): - serializer_class = CommentSerializer - - @swagger_auto_schema( - operation_summary="특정 학생이 작성한 댓글 목록 조회", - operation_description="학생 ID로 특정 학생이 작성한 모든 댓글을 조회합니다.", - manual_parameters=[ - openapi.Parameter( - 'student_id', openapi.IN_PATH, - description="조회할 학생의 ID", type=openapi.TYPE_INTEGER - ) - ], - responses={ - 200: openapi.Response( - description="성공적으로 조회된 댓글 목록", - schema=CommentSerializer(many=True) - ), - 404: openapi.Response(description="해당 학생을 찾을 수 없습니다.") - } - ) - def get_queryset(self): - student_id = self.kwargs['student_id'] - student = get_object_or_404(Student, id=student_id) - return Comment.objects.filter(student=student) - # id, 학수번호, 개설년도와 학기 정보를 통해 시간표를 등록하는 view @@ -524,29 +486,3 @@ def post(self, request): return Response({'response': 'Time Table Rejected'}, status=status.HTTP_400_BAD_REQUEST) - -# 특정 학생의 id로 시간표 뷰 -class StudentTimeTableView(generics.ListAPIView): - serializer_class = TimeTableSerializer - - @swagger_auto_schema( - operation_summary="특정 학생의 시간표 조회", - operation_description="학생 ID로 특정 학생이 등록한 시간표를 조회합니다.", - manual_parameters=[ - openapi.Parameter( - 'student_id', openapi.IN_PATH, - description="조회할 학생의 ID", type=openapi.TYPE_INTEGER - ) - ], - responses={ - 200: openapi.Response( - description="성공적으로 조회된 시간표 목록", - schema=TimeTableSerializer(many=True) - ), - 404: openapi.Response(description="해당 학생을 찾을 수 없습니다.") - } - ) - def get_queryset(self): - student_id = self.kwargs['student_id'] - student = get_object_or_404(Student, id=student_id) - return TimeTable.objects.filter(student=student)