Skip to content

Commit d5ea695

Browse files
committed
Implementation of DELETE /api/v2/events/{object_identifier}/comments/{identifier}
1 parent 8344e60 commit d5ea695

File tree

4 files changed

+44
-0
lines changed

4 files changed

+44
-0
lines changed

source/app/blueprints/rest/v2/events_routes/comments.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,16 +21,19 @@
2121
from marshmallow import ValidationError
2222

2323
from app.blueprints.access_controls import ac_api_requires
24+
from app.blueprints.access_controls import ac_api_return_access_denied
2425
from app.blueprints.rest.endpoints import response_api_paginated
2526
from app.blueprints.rest.endpoints import response_api_not_found
2627
from app.blueprints.rest.endpoints import response_api_created
2728
from app.blueprints.rest.endpoints import response_api_error
2829
from app.blueprints.rest.endpoints import response_api_success
30+
from app.blueprints.rest.endpoints import response_api_deleted
2931
from app.blueprints.rest.parsing import parse_pagination_parameters
3032
from app.iris_engine.access_control.iris_user import iris_current_user
3133
from app.business.comments import comments_get_filtered_by_event
3234
from app.business.comments import comments_create_for_event
3335
from app.business.comments import comments_get_for_event
36+
from app.business.comments import comments_delete_for_event
3437
from app.business.events import events_get
3538
from app.business.errors import ObjectNotFoundError
3639
from app.models.cases import CasesEvent
@@ -86,6 +89,18 @@ def read(self, event_identifier, identifier):
8689
except ObjectNotFoundError:
8790
return response_api_not_found()
8891

92+
def delete(self, event_identifier, identifier):
93+
try:
94+
event = self._get_event(event_identifier, [CaseAccessLevel.full_access])
95+
comment = comments_get_for_event(event, identifier)
96+
if comment.comment_user_id != iris_current_user.id:
97+
return ac_api_return_access_denied()
98+
99+
comments_delete_for_event(event, comment)
100+
return response_api_deleted()
101+
except ObjectNotFoundError:
102+
return response_api_not_found()
103+
89104

90105
events_comments_blueprint = Blueprint('events_comments', __name__, url_prefix='/<int:event_identifier>/comments')
91106
comments_operations = CommentsOperations()
@@ -107,3 +122,9 @@ def create_event_comment(event_identifier):
107122
@ac_api_requires()
108123
def get_event_comment(event_identifier, identifier):
109124
return comments_operations.read(event_identifier, identifier)
125+
126+
127+
@events_comments_blueprint.delete('/<int:identifier>')
128+
@ac_api_requires()
129+
def delete_task_comment(event_identifier, identifier):
130+
return comments_operations.delete(event_identifier, identifier)

source/app/business/comments.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
from app.datamgmt.case.case_iocs_db import delete_ioc_comment
5252
from app.datamgmt.case.case_notes_db import delete_note_comment
5353
from app.datamgmt.case.case_tasks_db import delete_task_comment
54+
from app.datamgmt.case.case_events_db import delete_event_comment
5455
from app.iris_engine.module_handler.module_handler import call_modules_hook
5556
from app.iris_engine.utils.tracker import track_activity
5657
from app.models.comments import Comments
@@ -334,3 +335,10 @@ def comments_delete_for_task(task: CaseTasks, comment: Comments):
334335

335336
call_modules_hook('on_postload_task_comment_delete', comment.comment_id, caseid=comment.comment_case_id)
336337
track_activity(f'comment {comment.comment_id} on task {task.id} deleted', caseid=comment.comment_case_id)
338+
339+
340+
def comments_delete_for_event(event: CasesEvent, comment: Comments):
341+
delete_event_comment(event.event_id, comment.comment_id)
342+
343+
call_modules_hook('on_postload_event_comment_delete', comment.comment_id, caseid=comment.comment_case_id)
344+
track_activity(f'comment {comment.comment_id} on event {event.event_id} deleted', caseid=comment.comment_case_id)

source/app/datamgmt/case/case_events_db.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,8 @@ def get_case_event_comment(event_id, comment_id):
145145
Comments.comment_date,
146146
Comments.comment_update_date,
147147
Comments.comment_uuid,
148+
Comments.comment_user_id,
149+
Comments.comment_case_id,
148150
User.name,
149151
User.user
150152
).join(

tests/tests_rest_comments.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -674,3 +674,16 @@ def test_delete_tasks_comment_should_return_204(self):
674674

675675
response = self._subject.delete(f'/api/v2/tasks/{object_identifier}/comments/{identifier}')
676676
self.assertEqual(204, response.status_code)
677+
678+
def test_delete_events_comment_should_return_204(self):
679+
case_identifier = self._subject.create_dummy_case()
680+
body = {'event_title': 'title', 'event_category_id': 1,
681+
'event_date': '2025-03-26T00:00:00.000', 'event_tz': '+00:00',
682+
'event_assets': [], 'event_iocs': []}
683+
response = self._subject.create(f'/api/v2/cases/{case_identifier}/events', body).json()
684+
object_identifier = response['event_id']
685+
response = self._subject.create(f'/api/v2/events/{object_identifier}/comments', {}).json()
686+
identifier = response['comment_id']
687+
688+
response = self._subject.delete(f'/api/v2/events/{object_identifier}/comments/{identifier}')
689+
self.assertEqual(204, response.status_code)

0 commit comments

Comments
 (0)