Skip to content

Commit c462637

Browse files
committed
Add TeamCreateAPI view
1 parent f2a2960 commit c462637

File tree

3 files changed

+46
-1
lines changed

3 files changed

+46
-1
lines changed

django/thunderstore/api/cyberstorm/views/__init__.py

+2
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
)
1212
from .team import (
1313
AddTeamMemberAPIView,
14+
TeamCreateAPIView,
1415
TeamDetailAPIView,
1516
TeamMembersAPIView,
1617
TeamServiceAccountsAPIView,
@@ -29,6 +30,7 @@
2930
"PackageVersionsAPIView",
3031
"TeamDetailAPIView",
3132
"AddTeamMemberAPIView",
33+
"TeamCreateAPIView",
3234
"TeamMembersAPIView",
3335
"TeamServiceAccountsAPIView",
3436
]

django/thunderstore/api/cyberstorm/views/team.py

+38-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from django.contrib.auth import get_user_model
22
from django.db.models import Q, QuerySet
3+
from django.http import HttpRequest
34
from rest_framework import serializers
45
from rest_framework.exceptions import PermissionDenied, ValidationError
56
from rest_framework.generics import ListAPIView, RetrieveAPIView, get_object_or_404
@@ -19,7 +20,7 @@
1920
CyberstormAutoSchemaMixin,
2021
conditional_swagger_auto_schema,
2122
)
22-
from thunderstore.repository.forms import AddTeamMemberForm
23+
from thunderstore.repository.forms import AddTeamMemberForm, CreateTeamForm
2324
from thunderstore.repository.models.team import Team, TeamMember
2425

2526
User = get_user_model()
@@ -49,6 +50,42 @@ def check_permissions(self, request: Request) -> None:
4950
raise PermissionDenied()
5051

5152

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+
5289
class TeamMembersAPIView(CyberstormAutoSchemaMixin, TeamRestrictedAPIView):
5390
serializer_class = CyberstormTeamMemberSerializer
5491
filter_backends = [StrictOrderingFilter]

django/thunderstore/api/urls.py

+6
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
PackageVersionChangelogAPIView,
1313
PackageVersionReadmeAPIView,
1414
PackageVersionsAPIView,
15+
TeamCreateAPIView,
1516
TeamDetailAPIView,
1617
TeamMembersAPIView,
1718
TeamServiceAccountsAPIView,
@@ -53,6 +54,11 @@
5354
PackageDependantsListAPIView.as_view(),
5455
name="cyberstorm.package.community.namespace.package-dependants",
5556
),
57+
path(
58+
"teams/create/",
59+
TeamCreateAPIView.as_view(),
60+
name="cyberstorm.teams.create",
61+
),
5662
path(
5763
"team/<str:team_id>/",
5864
TeamDetailAPIView.as_view(),

0 commit comments

Comments
 (0)