Skip to content

Commit 7aba919

Browse files
committed
Add EditTeamAPIView
1 parent 31405a1 commit 7aba919

File tree

3 files changed

+54
-2
lines changed

3 files changed

+54
-2
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: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
from django.db.models import Q, QuerySet
2-
from rest_framework.exceptions import PermissionDenied
2+
from drf_yasg.utils import swagger_auto_schema
3+
from rest_framework import serializers
4+
from rest_framework.exceptions import PermissionDenied, ValidationError
35
from rest_framework.generics import ListAPIView, RetrieveAPIView, get_object_or_404
46
from rest_framework.permissions import IsAuthenticated
57
from rest_framework.request import Request
8+
from rest_framework.response import Response
9+
from rest_framework.views import APIView
610

711
from thunderstore.account.models.service_account import ServiceAccount
812
from thunderstore.api.cyberstorm.serializers import (
@@ -12,6 +16,7 @@
1216
)
1317
from thunderstore.api.ordering import StrictOrderingFilter
1418
from thunderstore.api.utils import CyberstormAutoSchemaMixin
19+
from thunderstore.repository.forms import DonationLinkTeamForm
1520
from thunderstore.repository.models.team import Team, TeamMember
1621

1722

@@ -39,6 +44,41 @@ def check_permissions(self, request: Request) -> None:
3944
raise PermissionDenied()
4045

4146

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