Skip to content

Commit 402b64a

Browse files
authored
add notes endpoint to RiskAcceptanceViewSet (#14487)
1 parent 0071161 commit 402b64a

2 files changed

Lines changed: 62 additions & 0 deletions

File tree

dojo/api_v2/serializers.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1139,6 +1139,13 @@ class EngagementToNotesSerializer(serializers.Serializer):
11391139
notes = NoteSerializer(many=True)
11401140

11411141

1142+
class RiskAcceptanceToNotesSerializer(serializers.Serializer):
1143+
risk_acceptance_id = serializers.PrimaryKeyRelatedField(
1144+
queryset=Risk_Acceptance.objects.all(), many=False, allow_null=True,
1145+
)
1146+
notes = NoteSerializer(many=True)
1147+
1148+
11421149
class EngagementToFilesSerializer(serializers.Serializer):
11431150
engagement_id = serializers.PrimaryKeyRelatedField(
11441151
queryset=Engagement.objects.all(), many=False, allow_null=True,

dojo/api_v2/views.py

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -759,6 +759,61 @@ def get_queryset(self):
759759
.distinct()
760760
)
761761

762+
@extend_schema(
763+
methods=["GET"],
764+
responses={
765+
status.HTTP_200_OK: serializers.RiskAcceptanceToNotesSerializer,
766+
},
767+
)
768+
@extend_schema(
769+
methods=["POST"],
770+
request=serializers.AddNewNoteOptionSerializer,
771+
responses={status.HTTP_201_CREATED: serializers.NoteSerializer},
772+
)
773+
@action(detail=True, methods=["get", "post"], permission_classes=(IsAuthenticated, permissions.UserHasRiskAcceptanceRelatedObjectPermission))
774+
def notes(self, request, pk=None):
775+
risk_acceptance = self.get_object()
776+
if request.method == "POST":
777+
new_note = serializers.AddNewNoteOptionSerializer(data=request.data)
778+
if new_note.is_valid():
779+
entry = new_note.validated_data["entry"]
780+
private = new_note.validated_data.get("private", False)
781+
note_type = new_note.validated_data.get("note_type", None)
782+
else:
783+
return Response(new_note.errors, status=status.HTTP_400_BAD_REQUEST)
784+
785+
notes = risk_acceptance.notes.filter(note_type=note_type).first()
786+
if notes and note_type and note_type.is_single:
787+
return Response("Only one instance of this note_type allowed on a risk acceptance.", status=status.HTTP_400_BAD_REQUEST)
788+
789+
author = request.user
790+
note = Notes(entry=entry, author=author, private=private, note_type=note_type)
791+
note.save()
792+
history = NoteHistory.objects.create(data=note.entry, time=note.date, current_editor=note.author)
793+
note.history.add(history)
794+
risk_acceptance.notes.add(note)
795+
engagement = risk_acceptance.engagement
796+
if engagement:
797+
process_tag_notifications(
798+
request=request,
799+
note=note,
800+
parent_url=request.build_absolute_uri(
801+
reverse("view_risk_acceptance", args=(engagement.id, risk_acceptance.id)),
802+
),
803+
parent_title=f"Risk Acceptance: {risk_acceptance.name}",
804+
)
805+
806+
serialized_note = serializers.NoteSerializer(
807+
{"author": author, "entry": entry, "private": private},
808+
)
809+
return Response(serialized_note.data, status=status.HTTP_201_CREATED)
810+
811+
notes = risk_acceptance.notes.all()
812+
serialized_notes = serializers.RiskAcceptanceToNotesSerializer(
813+
{"risk_acceptance_id": risk_acceptance, "notes": notes},
814+
)
815+
return Response(serialized_notes.data, status=status.HTTP_200_OK)
816+
762817
@extend_schema(
763818
methods=["GET"],
764819
responses={

0 commit comments

Comments
 (0)