해당 API는 부품사에서 생성한 청구서와 관련해서 청구서 삭제를 원할 때 사용되는 API이다. 요청한 청구서에 대해 삭제
하는 부문과 서비스 접수시 서비스의 접수상태가 종료되었음으로 수정
을 담당하는 동작부문이 객체 별로 나뉘어져 있어 삭제를 담당하는 객체인 requestPartsMatch
와 수정을 담당하는 객체인 PartsRequestManage
를 각각 인스턴스화 해야한다.
모델의 경우 PartsBrokMatch
를 import해서 요청 아이디로 요청한 건에 대해 관련 정보를 가지고 오는데 이는 모델의 상태 값을 변경하기 위해 필요한 작업이다.
삭제 및 수정으로 이어지는 일련의 과정은 말 그대로 일련의 과정으로 DB에 적용되어야 하기 때문에 @transaction.atomic
을 통해 트랜잭션으로 처리한다.
class DeletePartsBillView(APIView):
"""
청구 삭제(부품사에서 청구서 생성한 건)
---
"""
permission_classes = [permissions.IsAuthenticated, custom_permission.PartPermission]
@transaction.atomic
def delete(self, request, match_id):
member = request.user
# 매칭 업데이트(취소 및 삭제 상태)
requestPartsMatch = RequestPartsMatch()
requestPartsMatch.deletePartsMatchFromBill(match_id=match_id, member=member)
partsBrokMatch = PartsBrokMatch.objects.get(pk=match_id)
# 부품 요청 취소 상태 업데이트
partsRequestManager = PartsRequestManage()
partsRequestManager.status_modify(
parts_req_id=partsBrokMatch.parts_req.id, status="CANCELED"
)
return response.Response(status=status.HTTP_200_OK)
decorator
@transaction.atomicviews
RequestPartsMatch(apps -> match -> views.py)models
PartsBrokMatch 객체(apps -> match -> models.py)views
PartsRequestManage 객체(apps -> parts_request -> views)원자성의 특징인 All or Nothing 설정을 한 부문이다. 장고에서 autocommit을 기본 설정으로 어떤 다른 트랜잭션이 실행되고 있지 않는다면 트랜잭션 실행 후 커밋되거나 롤백되는 설정이다.
한 API에 데이터베이스의 값을 변경하는 여러 작업이 있는 경우 사용하고 사용하지 않을 경우 오류에 대해서 직접 처리를 해주어야 DB 데이터의 무결성을 유지할 수 있다.
적용하고자 하는 함수 위에 transaction.atomic
을 기입해주면 된다. 함수 내부에서 사용하고자 한다면 with.transactioin.atomic():
로 기입 후 내부 블럭 안에 기입해주면 된다.
어느 특정 API의 트랜잭션의 latency가 길어 롤백이 일어나 지금까지의 작업이 무산되는 경우를 위해 중간에 저장지점을 설정해서 부분 커밋을 통해 이후의 작업을 처리할 수 있다.
참고
해당 API에서 @transaction.atomic을 사용하는 이유는 (삭제 -> 수정)을 같이 진행해야하기 때문이다.
해당 객체는 요청 건에 대한 생성, 취소, 포기, 삭제와 관련한 메서드 들을 담고 있다.
부품사, 공업사, 보험사에서 각각 요청건을 만들 때 각각의 진행되고 있는 거래의 진행과정과 관련한 전반적인 정보를 담고있는 모델이다. 따라서 해당 모델을 불러 내부의 속성을 수정하기 위해 불러온다.
정보를 수정할 때에는 PartsRequestManage
views
를 불러 진행하는데 진행되는 요청건에 대한 수정이 필요할 때 해당 views
를 사용한다.
transaction
으로 처리해야 하는 API이다.삭제
를 담당하는 RequestPartsMatch
와 수정
을 담당하는 PartsRequestManage
를 각각 임포트한다.계약에 대한 정보
를 담고 있는 테이블이 PartsBrokMatch
모델이기 때문에 해당 모델을 import해서 상태 값을 변경한다.