Added endpoint for studygroup creation and auto generate swagger yml on docker build/run

This commit is contained in:
Keannu Christian Bernasol 2023-09-26 20:28:59 +08:00
parent e6d85203b0
commit a30e2ea4c5
5 changed files with 108 additions and 46 deletions

View file

@ -23,10 +23,33 @@ class StudyGroupSerializer(serializers.ModelSerializer):
queryset=Landmark.objects.all(), many=False, slug_field='name', required=False, allow_null=True)
radius = serializers.FloatField()
class Meta:
model = StudyGroup
fields = '__all__'
read_only_fields = ['landmark', 'radius', 'students']
class FullNameSlugRelatedField(serializers.SlugRelatedField):
def to_representation(self, instance):
return instance.full_name
class StudyGroupCreateSerializer(serializers.ModelSerializer):
name = serializers.CharField()
subject = serializers.SlugRelatedField(
many=False, slug_field='name', queryset=Subject.objects.all(), required=True, allow_null=False)
location = PointField()
landmark = serializers.SlugRelatedField(
queryset=Landmark.objects.all(), many=False, slug_field='name', required=False, allow_null=True)
def create(self, validated_data):
user = self.context['request'].user
study_group = StudyGroup.objects.create(
users=[user], defaults=validated_data)
name=validated_data['name'], location=validated_data['location'], subject=validated_data['subject'])
for landmark in Landmark.objects.all():
if landmark.location.contains(validated_data['location']):
validated_data['landmark'] = landmark
break
validated_data['location'].read_only = True
return study_group
@ -41,4 +64,4 @@ class StudyGroupSerializer(serializers.ModelSerializer):
class Meta:
model = StudyGroup
fields = '__all__'
read_only_fields = ['landmark', 'radius', 'students']
read_only_fields = ['landmark']

View file

@ -1,7 +1,13 @@
from django.urls import include, path
from .views import StudyGroupListView, StudyGroupListNearView
from .views import StudyGroupListView, StudyGroupListNearView, StudyGroupCreateView
from rest_framework import routers
router = routers.DefaultRouter()
router.register(r'create', StudyGroupCreateView,
basename='Create Study Group')
urlpatterns = [
path('', StudyGroupListView.as_view()),
path('near/', StudyGroupListNearView.as_view()),
path('', include(router.urls)),
]

View file

@ -2,7 +2,7 @@ from django.shortcuts import render
from rest_framework import generics, mixins
from rest_framework.exceptions import PermissionDenied
from rest_framework.permissions import IsAuthenticated
from .serializers import StudyGroupSerializer
from .serializers import StudyGroupSerializer, StudyGroupCreateSerializer
from .models import StudyGroup
from subjects.models import Subject, SubjectInstance
from student_status.models import StudentStatus
@ -16,7 +16,14 @@ from rest_framework import permissions
# Create your views here.
class StudyGroupListView(generics.ListCreateAPIView, generics.UpdateAPIView, generics.DestroyAPIView):
class StudyGroupCreateView(viewsets.ModelViewSet):
http_method_names = ['patch', 'post', 'delete']
permission_classes = [IsAuthenticated]
serializer_class = StudyGroupCreateSerializer
queryset = StudyGroup.objects.all()
class StudyGroupListView(generics.ListAPIView):
permission_classes = [IsAuthenticated]
serializer_class = StudyGroupSerializer
queryset = StudyGroup.objects.all()