Skip to content

Commit 136f577

Browse files
authored
Merge pull request #26 from golony6449/golony/feature/sponsor
잔여 구좌 갯수 검증로직 추가
2 parents e5fdf73 + 5a571a8 commit 136f577

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 = [self.check_remain_slot(sponsor)]
9+
10+
def check_remain_slot(self, sponsor: OrderedDict):
11+
target_level = sponsor.get("level")
12+
13+
if target_level.limit <= len(
14+
Sponsor.objects.filter(level=target_level, accepted=True)
15+
):
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)