|
1 | 1 | 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 |
3 | 4 | from rest_framework.generics import ListAPIView, RetrieveAPIView, get_object_or_404
|
4 | 5 | from rest_framework.permissions import IsAuthenticated
|
5 | 6 | from rest_framework.request import Request
|
| 7 | +from rest_framework.response import Response |
| 8 | +from rest_framework.views import APIView |
6 | 9 |
|
7 | 10 | from thunderstore.account.models.service_account import ServiceAccount
|
8 | 11 | from thunderstore.api.cyberstorm.serializers import (
|
|
11 | 14 | CyberstormTeamSerializer,
|
12 | 15 | )
|
13 | 16 | 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 |
15 | 22 | from thunderstore.repository.models.team import Team, TeamMember
|
16 | 23 |
|
17 | 24 |
|
@@ -39,6 +46,41 @@ def check_permissions(self, request: Request) -> None:
|
39 | 46 | raise PermissionDenied()
|
40 | 47 |
|
41 | 48 |
|
| 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 | + |
42 | 84 | class TeamMembersAPIView(CyberstormAutoSchemaMixin, TeamRestrictedAPIView):
|
43 | 85 | serializer_class = CyberstormTeamMemberSerializer
|
44 | 86 | filter_backends = [StrictOrderingFilter]
|
|
0 commit comments