def post(self, request, organization):
        """ Create a Key Transaction """
        if not self.has_feature(request, organization):
            return Response(status=404)

        project = self.get_project(request, organization)

        base_filter = {"organization": organization, "owner": request.user}

        with transaction.atomic():
            serializer = KeyTransactionSerializer(data=request.data,
                                                  context=base_filter)
            if serializer.is_valid():
                data = serializer.validated_data
                base_filter["transaction"] = data["transaction"]
                base_filter["project"] = project

                if KeyTransaction.objects.filter(**base_filter).exists():
                    return Response(status=204)

                try:
                    KeyTransaction.objects.create(**base_filter)
                    return Response(status=201)
                # Even though we tried to avoid it, this KeyTransaction was created already
                except IntegrityError:
                    return Response(status=204)
            return Response(serializer.errors, status=400)
Exemple #2
0
    def post(self, request, organization):
        """ Create a Key Transaction """
        if not self.has_feature(request, organization):
            return Response(status=404)

        project = self.get_project(request, organization)

        base_filter = {"organization": organization, "project": project, "owner": request.user}

        with transaction.atomic():
            serializer = KeyTransactionSerializer(data=request.data, context=base_filter)
            if serializer.is_valid():
                data = serializer.validated_data
                base_filter["transaction"] = data["transaction"]

                if KeyTransaction.objects.filter(**base_filter).count() > 0:
                    return Response(status=204)

                KeyTransaction.objects.create(**base_filter)
                return Response(status=201)
            return Response(serializer.errors, status=400)