| 1553 | |
| 1554 | |
| 1555 | class KnowledgeBatchOperateSerializer(serializers.Serializer): |
| 1556 | workspace_id = serializers.CharField(required=True, label=_("workspace id")) |
| 1557 | |
| 1558 | def is_valid(self, *, raise_exception=False): |
| 1559 | super().is_valid(raise_exception=True) |
| 1560 | |
| 1561 | @transaction.atomic |
| 1562 | def batch_delete(self, instance: Dict, with_valid=True): |
| 1563 | if with_valid: |
| 1564 | BatchSerializer(data=instance).is_valid(model=Knowledge, raise_exception=True) |
| 1565 | self.is_valid(raise_exception=True) |
| 1566 | id_list = instance.get("id_list") |
| 1567 | workspace_id = self.data.get("workspace_id") |
| 1568 | knowledge_query_set = QuerySet(Knowledge).filter(id__in=id_list, workspace_id=workspace_id) |
| 1569 | |
| 1570 | # 删除所有关联 |
| 1571 | QuerySet(Document).filter(knowledge__in=knowledge_query_set).delete() |
| 1572 | QuerySet(ProblemParagraphMapping).filter(knowledge__in=knowledge_query_set).delete() |
| 1573 | QuerySet(Paragraph).filter(knowledge__in=knowledge_query_set).delete() |
| 1574 | QuerySet(Problem).filter(knowledge__in=knowledge_query_set).delete() |
| 1575 | QuerySet(WorkspaceUserResourcePermission).filter(target__in=id_list).delete() |
| 1576 | |
| 1577 | for k_id in id_list: |
| 1578 | drop_knowledge_index(knowledge_id=k_id) |
| 1579 | delete_embedding_by_knowledge(k_id) |
| 1580 | |
| 1581 | File.objects.filter(source_id__in=id_list).delete() |
| 1582 | QuerySet(ResourceMapping).filter(Q(target_id__in=id_list) | Q(source_id__in=id_list)).delete() |
| 1583 | |
| 1584 | knowledge_query_set.delete() |
| 1585 | return True |
| 1586 | |
| 1587 | def batch_move(self, instance: Dict, with_valid=True): |
| 1588 | if with_valid: |
| 1589 | BatchMoveSerializer(data=instance).is_valid(model=Knowledge, raise_exception=True) |
| 1590 | self.is_valid(raise_exception=True) |
| 1591 | id_list = instance.get("id_list") |
| 1592 | folder_id = instance.get("folder_id") |
| 1593 | workspace_id = self.data.get("workspace_id") |
| 1594 | |
| 1595 | QuerySet(Knowledge).filter(id__in=id_list, workspace_id=workspace_id).update(folder_id=folder_id) |
| 1596 | return True |