[Django] DELETE API 분석, APIView

서재환·2022년 9월 7일
0

Django

목록 보기
27/40

해당 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.atomic
  • views RequestPartsMatch(apps -> match -> views.py)
  • models PartsBrokMatch 객체(apps -> match -> models.py)
  • views PartsRequestManage 객체(apps -> parts_request -> views)

transaction.atomic

원자성의 특징인 All or Nothing 설정을 한 부문이다. 장고에서 autocommit을 기본 설정으로 어떤 다른 트랜잭션이 실행되고 있지 않는다면 트랜잭션 실행 후 커밋되거나 롤백되는 설정이다.

한 API에 데이터베이스의 값을 변경하는 여러 작업이 있는 경우 사용하고 사용하지 않을 경우 오류에 대해서 직접 처리를 해주어야 DB 데이터의 무결성을 유지할 수 있다.

적용하고자 하는 함수 위에 transaction.atomic을 기입해주면 된다. 함수 내부에서 사용하고자 한다면 with.transactioin.atomic(): 로 기입 후 내부 블럭 안에 기입해주면 된다.

어느 특정 API의 트랜잭션의 latency가 길어 롤백이 일어나 지금까지의 작업이 무산되는 경우를 위해 중간에 저장지점을 설정해서 부분 커밋을 통해 이후의 작업을 처리할 수 있다.
참고

DeletePartsBillView

해당 API에서 @transaction.atomic을 사용하는 이유는 (삭제 -> 수정)을 같이 진행해야하기 때문이다.

RequestPartsMatch

해당 객체는 요청 건에 대한 생성, 취소, 포기, 삭제와 관련한 메서드 들을 담고 있다.

PartsBrokMatch

부품사, 공업사, 보험사에서 각각 요청건을 만들 때 각각의 진행되고 있는 거래의 진행과정과 관련한 전반적인 정보를 담고있는 모델이다. 따라서 해당 모델을 불러 내부의 속성을 수정하기 위해 불러온다.

PartsRequestManage

정보를 수정할 때에는 PartsRequestManage views를 불러 진행하는데 진행되는 요청건에 대한 수정이 필요할 때 해당 views를 사용한다.

정리

  • 삭제와 수정이 필요해 transaction으로 처리해야 하는 API이다.
  • 삭제와 수정을 담당하는 모듈이 서로 다르기 때문에 삭제를 담당하는 RequestPartsMatch수정을 담당하는 PartsRequestManage를 각각 임포트한다.
  • 청구서 삭제와 관련해서 진행되고 있는 계약에 대한 정보를 담고 있는 테이블이 PartsBrokMatch 모델이기 때문에 해당 모델을 import해서 상태 값을 변경한다.

0개의 댓글