|
1 | 1 | from django.contrib.auth import get_user_model
|
2 | 2 | from django.db.models import Q, QuerySet
|
| 3 | +from django.http import HttpRequest |
3 | 4 | from rest_framework import serializers
|
4 | 5 | from rest_framework.exceptions import PermissionDenied, ValidationError
|
5 | 6 | from rest_framework.generics import ListAPIView, RetrieveAPIView, get_object_or_404
|
|
19 | 20 | CyberstormAutoSchemaMixin,
|
20 | 21 | conditional_swagger_auto_schema,
|
21 | 22 | )
|
22 |
| -from thunderstore.repository.forms import AddTeamMemberForm |
| 23 | +from thunderstore.repository.forms import AddTeamMemberForm, CreateTeamForm |
23 | 24 | from thunderstore.repository.models.team import Team, TeamMember
|
24 | 25 |
|
25 | 26 | User = get_user_model()
|
@@ -49,6 +50,42 @@ def check_permissions(self, request: Request) -> None:
|
49 | 50 | raise PermissionDenied()
|
50 | 51 |
|
51 | 52 |
|
| 53 | +class CyberstormTeamCreateRequestSerialiazer(serializers.Serializer): |
| 54 | + name = serializers.CharField( |
| 55 | + max_length=Team._meta.get_field("name").max_length, |
| 56 | + validators=Team._meta.get_field("name").validators, |
| 57 | + ) |
| 58 | + |
| 59 | + |
| 60 | +class CyberstormTeamCreateResponseSerialiazer(serializers.Serializer): |
| 61 | + name = serializers.CharField() |
| 62 | + |
| 63 | + |
| 64 | +class TeamCreateAPIView(APIView): |
| 65 | + permission_classes = [IsAuthenticated] |
| 66 | + |
| 67 | + @conditional_swagger_auto_schema( |
| 68 | + request_body=CyberstormTeamCreateRequestSerialiazer, |
| 69 | + responses={200: CyberstormTeamCreateResponseSerialiazer}, |
| 70 | + operation_id="cyberstorm.teams.create", |
| 71 | + tags=["cyberstorm"], |
| 72 | + ) |
| 73 | + def post(self, request: HttpRequest): |
| 74 | + serializer = CyberstormTeamCreateRequestSerialiazer(data=request.data) |
| 75 | + serializer.is_valid(raise_exception=True) |
| 76 | + |
| 77 | + form = CreateTeamForm( |
| 78 | + user=request.user, |
| 79 | + data=serializer.validated_data, |
| 80 | + ) |
| 81 | + |
| 82 | + if form.is_valid(): |
| 83 | + team = form.save() |
| 84 | + return Response(CyberstormTeamCreateResponseSerialiazer(team).data) |
| 85 | + else: |
| 86 | + raise ValidationError(form.errors) |
| 87 | + |
| 88 | + |
52 | 89 | class TeamMembersAPIView(CyberstormAutoSchemaMixin, TeamRestrictedAPIView):
|
53 | 90 | serializer_class = CyberstormTeamMemberSerializer
|
54 | 91 | filter_backends = [StrictOrderingFilter]
|
|
0 commit comments