2
2
3
3
from django .db .transaction import atomic
4
4
from django .shortcuts import get_object_or_404
5
+ from rest_framework import status
5
6
from rest_framework .response import Response
6
7
from rest_framework .viewsets import ModelViewSet
7
8
8
9
from sponsor .models import Sponsor , SponsorLevel
9
10
from sponsor .permissions import IsOwnerOrReadOnly , OwnerOnly
10
11
from sponsor .serializers import (
11
- SponsorLevelSerializer ,
12
+ SponsorDetailSerializer ,
12
13
SponsorListSerializer ,
13
14
SponsorRemainingAccountSerializer ,
14
15
SponsorSerializer ,
20
21
class SponsorViewSet (ModelViewSet ):
21
22
serializer_class = SponsorSerializer
22
23
permission_classes = [IsOwnerOrReadOnly ] # 본인 소유만 수정 가능
23
- http_method_names = ["get" , "post" ] # 지금은 조회/등록만 가능 TODO: 추후 수정 기능 추가
24
+ http_method_names = ["get" , "post" , "put" ]
24
25
validator = SponsorValidater ()
25
26
26
27
def get_queryset (self ):
27
28
return Sponsor .objects .all ()
28
29
29
30
def list (self , request , * args , ** kwargs ):
30
- queryset = Sponsor .objects .filter (accepted = True ).order_by ("name " )
31
+ queryset = Sponsor .objects .filter (paid_at__isnull = False ).order_by ("level " )
31
32
serializer = SponsorListSerializer (queryset , many = True )
32
33
return Response (serializer .data )
33
34
@@ -49,15 +50,15 @@ def create(self, request, *args, **kwargs):
49
50
return Response (serializer .data )
50
51
51
52
def retrieve (self , request , * args , ** kwargs ):
52
- pk = kwargs ["pk " ]
53
+ pk = kwargs ["id " ]
53
54
sponsor_data = get_object_or_404 (Sponsor , pk = pk )
54
55
55
56
# 본인 소유인 경우는 모든 필드
56
57
# 그렇지 않은 경우는 공개 가능한 필드만 응답
57
58
serializer = (
58
59
SponsorSerializer (sponsor_data )
59
60
if self .check_owner_permission (request , sponsor_data )
60
- else SponsorListSerializer (sponsor_data )
61
+ else SponsorDetailSerializer (sponsor_data )
61
62
)
62
63
63
64
return Response (serializer .data )
@@ -67,17 +68,31 @@ def check_owner_permission(self, request, sponsor_data: Sponsor):
67
68
self = Type [OwnerOnly ], request = request , view = self , obj = sponsor_data
68
69
)
69
70
71
+ def update (self , request , * args , ** kwargs ):
72
+ pk = kwargs ["id" ]
73
+ sponsor_data = get_object_or_404 (Sponsor , pk = pk )
74
+ serializer = SponsorSerializer (sponsor_data , data = request .data , partial = True )
75
+
76
+ if not self .check_owner_permission (request , sponsor_data ):
77
+ return Response (None , status .HTTP_401_UNAUTHORIZED )
78
+
79
+ if serializer .is_valid ():
80
+ serializer .save ()
81
+ return Response (serializer .data )
70
82
71
- class SponsorLevelViewSet (ModelViewSet ):
72
- serializer_class = SponsorLevelSerializer
83
+ return Response (serializer .errors , status .HTTP_400_BAD_REQUEST )
84
+
85
+
86
+ class SponsorListViewSet (ModelViewSet ):
87
+ serializer_class = SponsorListSerializer
73
88
http_method_names = ["get" ]
74
89
75
90
def get_queryset (self ):
76
91
return SponsorLevel .objects .all ()
77
92
78
93
def list (self , request , * args , ** kwargs ):
79
94
queryset = SponsorLevel .objects .all ().order_by ("-price" )
80
- serializer = SponsorLevelSerializer (queryset , many = True )
95
+ serializer = SponsorListSerializer (queryset , many = True )
81
96
82
97
return Response (serializer .data )
83
98
0 commit comments