Skip to content

Commit a7b530c

Browse files
committed
Add EditTeamAPIView
1 parent 463470a commit a7b530c

File tree

3 files changed

+47
-1
lines changed

3 files changed

+47
-1
lines changed

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
TeamMemberAddAPIView,
1515
TeamMemberListAPIView,
1616
TeamServiceAccountListAPIView,
17+
EditTeamAPIView,
1718
)
1819

1920
__all__ = [
@@ -31,4 +32,5 @@
3132
"TeamMemberAddAPIView",
3233
"TeamMemberListAPIView",
3334
"TeamServiceAccountListAPIView",
35+
"EditTeamAPIView",
3436
]

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

Lines changed: 39 additions & 1 deletion
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, DonationLinkTeamForm
2324
from thunderstore.repository.models.team import Team, TeamMember
2425

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

5152

53+
class CyberstormEditTeamRequestSerialiazer(serializers.Serializer):
54+
donation_link = serializers.CharField(
55+
max_length=Team._meta.get_field("donation_link").max_length,
56+
validators=Team._meta.get_field("donation_link").validators,
57+
)
58+
59+
60+
class CyberstormEditTeamResponseSerialiazer(serializers.Serializer):
61+
donation_link = serializers.CharField()
62+
63+
64+
class EditTeamAPIView(APIView):
65+
permission_classes = [IsAuthenticated]
66+
67+
@conditional_swagger_auto_schema(
68+
request_body=CyberstormEditTeamRequestSerialiazer,
69+
responses={200: CyberstormEditTeamResponseSerialiazer},
70+
operation_id="cyberstorm.team.edit",
71+
tags=["cyberstorm"],
72+
)
73+
def post(self, request: HttpRequest, team_name: str):
74+
serializer = CyberstormEditTeamRequestSerialiazer(data=request.data)
75+
serializer.is_valid(raise_exception=True)
76+
team = get_object_or_404(Team, name__iexact=team_name)
77+
form = DonationLinkTeamForm(
78+
user=request.user,
79+
instance=team,
80+
data=serializer.validated_data,
81+
)
82+
83+
if form.is_valid():
84+
team = form.save()
85+
return Response(CyberstormEditTeamResponseSerialiazer(team).data)
86+
else:
87+
raise ValidationError(form.errors)
88+
89+
5290
class TeamMemberListAPIView(CyberstormAutoSchemaMixin, TeamRestrictedAPIView):
5391
serializer_class = CyberstormTeamMemberSerializer
5492
filter_backends = [StrictOrderingFilter]

django/thunderstore/api/urls.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
PackageListingByCommunityListAPIView,
99
PackageListingByDependencyListAPIView,
1010
PackageListingByNamespaceListAPIView,
11+
EditTeamAPIView,
1112
PackageVersionChangelogAPIView,
1213
PackageVersionListAPIView,
1314
PackageVersionReadmeAPIView,
@@ -83,6 +84,11 @@
8384
TeamAPIView.as_view(),
8485
name="cyberstorm.team",
8586
),
87+
path(
88+
"team/<str:team_name>/edit/",
89+
EditTeamAPIView.as_view(),
90+
name="cyberstorm.team.edit",
91+
),
8692
path(
8793
"team/<str:team_id>/member/",
8894
TeamMemberListAPIView.as_view(),

0 commit comments

Comments
 (0)