Skip to content

Commit 2ee8ceb

Browse files
committed
update: 구좌수 검증 추가
1 parent e5fdf73 commit 2ee8ceb

File tree

2 files changed

+24
-1
lines changed

2 files changed

+24
-1
lines changed

sponsor/validators.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
from collections import OrderedDict
2+
3+
from sponsor.models import Sponsor
4+
5+
6+
class SponsorValidater:
7+
def assert_create(self, sponsor: OrderedDict):
8+
target = [
9+
self.check_remain_slot(sponsor)
10+
]
11+
12+
def check_remain_slot(self, sponsor: OrderedDict):
13+
target_level = sponsor.get("level")
14+
15+
if target_level.limit <= len(Sponsor.objects.filter(level=target_level, accepted=True)):
16+
raise RuntimeError("ERROR: 남은 슬롯 없음")

sponsor/viewsets.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from typing import Type
22

3+
from django.db.transaction import atomic
34
from django.shortcuts import get_object_or_404
45
from rest_framework.response import Response
56
from rest_framework.viewsets import ModelViewSet
@@ -12,12 +13,14 @@
1213
SponsorRemainingAccountSerializer,
1314
SponsorSerializer,
1415
)
16+
from sponsor.validators import SponsorValidater
1517

1618

1719
class SponsorViewSet(ModelViewSet):
1820
serializer_class = SponsorSerializer
1921
permission_classes = [IsOwnerOrReadOnly] # 본인 소유만 수정가능
2022
http_method_names = ["get", "post"] # 지금은 조회/등록만 가능 TODO: 추후 수정기능 추가
23+
validator = SponsorValidater()
2124

2225
def get_queryset(self):
2326
return Sponsor.objects.all()
@@ -27,10 +30,14 @@ def list(self, request, *args, **kwargs):
2730
serializer = SponsorListSerializer(queryset, many=True)
2831
return Response(serializer.data)
2932

33+
@atomic
3034
def create(self, request, *args, **kwargs):
3135
serializer = self.get_serializer(data=request.data)
3236
serializer.is_valid(raise_exception=True)
33-
serializer.save()
37+
self.validator.assert_create(serializer.validated_data)
38+
39+
new_sponsor = serializer.save()
40+
3441
return Response(serializer.data)
3542

3643
def retrieve(self, request, *args, **kwargs):

0 commit comments

Comments
 (0)