50 lines
2.2 KiB
Python
50 lines
2.2 KiB
Python
from django.shortcuts import render
|
|
from rest_framework.serializers import raise_errors_on_nested_writes
|
|
from rest_framework.viewsets import ModelViewSet
|
|
from support.models import Project, ProjectContributor, Issue, Comment
|
|
from authentication.models import User
|
|
from support.serializers import ProjectSerializer, ContributorSerializer
|
|
from rest_framework.response import Response
|
|
from rest_framework import status
|
|
from rest_framework.permissions import (IsAuthenticated,
|
|
IsAuthenticatedOrReadOnly)
|
|
from support.permissions import IsAuthor
|
|
from rest_framework.decorators import action
|
|
|
|
|
|
class ProjectViewSet(ModelViewSet):
|
|
permission_classes=[IsAuthenticatedOrReadOnly]
|
|
|
|
serializer_class = ProjectSerializer
|
|
queryset = Project.objects.filter(active=True)
|
|
|
|
def perform_create(self, serializer):
|
|
"""set authenticated user as author and contributor on creation"""
|
|
test = serializer.save(author=self.request.user)
|
|
data = {'contributor': self.request.user.id, 'project': test.id}
|
|
contributor_serializer = ContributorSerializer(data=data)
|
|
if contributor_serializer.is_valid():
|
|
contributor_serializer.save()
|
|
|
|
@action(detail=True, methods=['patch'],
|
|
permission_classes=[IsAuthor],
|
|
basename='add_contributor')
|
|
def add_contributor(self, request, pk):
|
|
"""Create the user/project contributor's relation"""
|
|
if 'contributor' in request.data:
|
|
contributor = User.objects.get(username=request.data['contributor'])
|
|
data = {'contributor': contributor.id, 'project': pk}
|
|
serializer = ContributorSerializer(data=data)
|
|
if serializer.is_valid():
|
|
serializer.save()
|
|
return Response(f"User {contributor} added",
|
|
status=status.HTTP_202_ACCEPTED)
|
|
return Response("This user is already contributing",
|
|
status=status.HTTP_226_IM_USED)
|
|
return Response(f"Key error;`contributor` is expected, "
|
|
f"not `{list(request.data)[0]}`",
|
|
status=status.HTTP_400_BAD_REQUEST)
|
|
|
|
|
|
class IssueViewSet(ModelViewSet):
|
|
serializer = |