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