Skip to content

Commit 3582a1f

Browse files
committed
Add EditTeamAPIView
1 parent 31405a1 commit 3582a1f

File tree

3 files changed

+57
-3
lines changed

3 files changed

+57
-3
lines changed

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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,12 @@
66
NamespacePackageListAPIView,
77
PackageDependantsListAPIView,
88
)
9-
from .team import TeamDetailAPIView, TeamMembersAPIView, TeamServiceAccountsAPIView
9+
from .team import (
10+
EditTeamAPIView,
11+
TeamDetailAPIView,
12+
TeamMembersAPIView,
13+
TeamServiceAccountsAPIView,
14+
)
1015

1116
__all__ = [
1217
"CommunityDetailAPIView",
@@ -16,6 +21,7 @@
1621
"NamespacePackageListAPIView",
1722
"PackageDependantsListAPIView",
1823
"TeamDetailAPIView",
24+
"EditTeamAPIView",
1925
"TeamMembersAPIView",
2026
"TeamServiceAccountsAPIView",
2127
]

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

Lines changed: 44 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
from django.db.models import Q, QuerySet
2-
from rest_framework.exceptions import PermissionDenied
2+
from rest_framework import serializers
3+
from rest_framework.exceptions import PermissionDenied, ValidationError
34
from rest_framework.generics import ListAPIView, RetrieveAPIView, get_object_or_404
45
from rest_framework.permissions import IsAuthenticated
56
from rest_framework.request import Request
7+
from rest_framework.response import Response
8+
from rest_framework.views import APIView
69

710
from thunderstore.account.models.service_account import ServiceAccount
811
from thunderstore.api.cyberstorm.serializers import (
@@ -11,7 +14,11 @@
1114
CyberstormTeamSerializer,
1215
)
1316
from thunderstore.api.ordering import StrictOrderingFilter
14-
from thunderstore.api.utils import CyberstormAutoSchemaMixin
17+
from thunderstore.api.utils import (
18+
CyberstormAutoSchemaMixin,
19+
conditional_swagger_auto_schema,
20+
)
21+
from thunderstore.repository.forms import DonationLinkTeamForm
1522
from thunderstore.repository.models.team import Team, TeamMember
1623

1724

@@ -39,6 +46,41 @@ def check_permissions(self, request: Request) -> None:
3946
raise PermissionDenied()
4047

4148

49+
class CyberstormEditTeamRequestSerialiazer(serializers.Serializer):
50+
donation_link = serializers.CharField(
51+
max_length=Team._meta.get_field("donation_link").max_length,
52+
validators=Team._meta.get_field("donation_link").validators,
53+
)
54+
55+
56+
class CyberstormEditTeamResponseSerialiazer(serializers.Serializer):
57+
donation_link = serializers.CharField()
58+
59+
60+
class EditTeamAPIView(APIView):
61+
@conditional_swagger_auto_schema(
62+
request_body=CyberstormEditTeamRequestSerialiazer,
63+
responses={200: CyberstormEditTeamResponseSerialiazer},
64+
operation_id="cyberstorm.team.edit",
65+
tags=["cyberstorm"],
66+
)
67+
def post(self, request, team_name, format=None):
68+
serializer = CyberstormEditTeamRequestSerialiazer(data=request.data)
69+
serializer.is_valid(raise_exception=True)
70+
team = get_object_or_404(Team, name__iexact=team_name)
71+
form = DonationLinkTeamForm(
72+
user=request.user,
73+
instance=team,
74+
data=request.data,
75+
)
76+
77+
if form.is_valid():
78+
team = form.save()
79+
return Response(CyberstormEditTeamResponseSerialiazer(team).data)
80+
else:
81+
raise ValidationError(form.errors)
82+
83+
4284
class TeamMembersAPIView(CyberstormAutoSchemaMixin, TeamRestrictedAPIView):
4385
serializer_class = CyberstormTeamMemberSerializer
4486
filter_backends = [StrictOrderingFilter]

django/thunderstore/api/urls.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
CommunityFiltersAPIView,
66
CommunityListAPIView,
77
CommunityPackageListAPIView,
8+
EditTeamAPIView,
89
NamespacePackageListAPIView,
910
PackageDependantsListAPIView,
1011
TeamDetailAPIView,
@@ -48,6 +49,11 @@
4849
TeamDetailAPIView.as_view(),
4950
name="cyberstorm.team.detail",
5051
),
52+
path(
53+
"team/<str:team_id>/edit/",
54+
EditTeamAPIView.as_view(),
55+
name="cyberstorm.team.edit",
56+
),
5157
path(
5258
"team/<str:team_id>/members/",
5359
TeamMembersAPIView.as_view(),

0 commit comments

Comments
 (0)