fix(api): scope segment batch deletes (#38217)

This commit is contained in:
WH-2099 2026-08-01 01:39:40 +00:00 committed by GitHub
parent c4d9919d30
commit e7380865d8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 16 additions and 2 deletions

View File

@ -3900,7 +3900,14 @@ class SegmentService:
session.add(document)
# Delete database records
session.execute(delete(DocumentSegment).where(DocumentSegment.id.in_(segment_ids)))
session.execute(
delete(DocumentSegment).where(
DocumentSegment.id.in_(segment_db_ids),
DocumentSegment.dataset_id == dataset.id,
DocumentSegment.document_id == document.id,
DocumentSegment.tenant_id == current_user.current_tenant_id,
)
)
session.commit()
@classmethod

View File

@ -858,7 +858,7 @@ class TestSegmentServiceMutations:
# scalars() for child_node_ids
session.scalars.return_value.all.return_value = ["child-1"]
SegmentService.delete_segments(["segment-1", "segment-2"], document, dataset, session)
SegmentService.delete_segments(["segment-1", "segment-2", "foreign-segment"], document, dataset, session)
assert document.word_count == 0
session.add.assert_called_once_with(document)
@ -869,6 +869,13 @@ class TestSegmentServiceMutations:
["segment-1", "segment-2"],
["child-1"],
)
delete_stmt = session.execute.call_args_list[1].args[0]
delete_sql = str(delete_stmt.compile(compile_kwargs={"literal_binds": True}))
assert "document_segments.id IN ('segment-1', 'segment-2')" in delete_sql
assert "document_segments.dataset_id = 'dataset-1'" in delete_sql
assert "document_segments.document_id = 'doc-1'" in delete_sql
assert "document_segments.tenant_id = 'tenant-1'" in delete_sql
assert "foreign-segment" not in delete_sql
session.commit.assert_called()
def test_update_segments_status_enables_only_segments_without_indexing_cache(self):