Skip to content

Commit 7e9512c

Browse files
committed
feat: Task source trigger crud
1 parent a05d74b commit 7e9512c

File tree

4 files changed

+81
-15
lines changed

4 files changed

+81
-15
lines changed

apps/trigger/models/trigger.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,3 +52,4 @@ class TriggerTask(AppModelMixin):
5252

5353
class Meta:
5454
db_table = "event_trigger_task"
55+
unique_together = [('trigger', 'source_id', 'source_type')]

apps/trigger/serializers/task_source_trigger.py

Lines changed: 50 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,20 @@
3030
ToolTriggerTaskSerializer, TriggerTaskModelSerializer
3131

3232

33+
class TaskSourceTriggerTaskEditRequest(serializers.Serializer):
34+
meta = serializers.DictField(default=dict, required=False)
35+
parameter = serializers.DictField(default=dict, required=False)
36+
37+
38+
class TaskSourceTriggerEditRequest(serializers.Serializer):
39+
name = serializers.CharField(required=False, label=_('trigger name'))
40+
desc = serializers.CharField(required=False, allow_null=True, allow_blank=True, label=_('trigger description'))
41+
trigger_type = serializers.ChoiceField(required=False, choices=TriggerTypeChoices)
42+
trigger_setting = serializers.DictField(required=False, label=_("trigger setting"))
43+
meta = serializers.DictField(default=dict, required=False)
44+
trigger_task = TaskSourceTriggerTaskEditRequest(many=True, required=False)
45+
46+
3347
class TaskSourceTriggerSerializer(serializers.Serializer):
3448
workspace_id = serializers.CharField(required=True, label=_('workspace id'))
3549
user_id = serializers.UUIDField(required=True, label=_("User ID"))
@@ -42,7 +56,6 @@ def insert(self, instance, with_valid=True):
4256

4357
class TaskSourceTriggerOperateSerializer(serializers.Serializer):
4458
trigger_id = serializers.UUIDField(required=True, label=_('trigger id'))
45-
user_id = serializers.UUIDField(required=True, label=_("User ID"))
4659
workspace_id = serializers.CharField(required=True, label=_('workspace id'))
4760
source_type = serializers.CharField(required=True, label=_('source type'))
4861
source_id = serializers.CharField(required=True, label=_('source id'))
@@ -85,14 +98,49 @@ def one(self, with_valid=True):
8598
'application_task': tool_task,
8699
}
87100

88-
def edit(self, instance: Dict, with_valid = True):
101+
@transaction.atomic
102+
def edit(self, instance: Dict, with_valid=True):
89103
if with_valid:
90104
self.is_valid(raise_exception=True)
105+
serializer = TaskSourceTriggerEditRequest(data=instance)
106+
serializer.is_valid(raise_exception=True)
107+
valid_data = serializer.validated_data
108+
trigger_id = self.data.get('trigger_id')
109+
workspace_id = self.data.get('workspace_id')
91110

111+
trigger = Trigger.objects.filter(workspace_id=workspace_id, id=trigger_id).first()
112+
if not trigger:
113+
raise serializers.ValidationError(_('Trigger not found'))
114+
task_source_trigger_edit_field_list = ['name', 'desc', 'trigger_type', 'trigger_setting', 'meta']
92115

116+
for field in task_source_trigger_edit_field_list:
117+
if field in valid_data:
118+
setattr(trigger, field, valid_data.get(field))
119+
trigger.save()
93120

121+
return self.one()
94122

123+
# 删除的是当前trigger_id+source_id+source_type对应的task
124+
@transaction.atomic
125+
def delete(self):
126+
self.is_valid(raise_exception=True)
127+
trigger_id = self.data.get('trigger_id')
128+
workspace_id = self.data.get('workspace_id')
129+
source_id = self.data.get('source_id')
130+
source_type = self.data.get('source_type')
95131

132+
trigger = Trigger.objects.filter(workspace_id=workspace_id,id=trigger_id).first()
133+
if not trigger:
134+
raise AppApiException(404, _('Trigger not found'))
135+
delete_count = TriggerTask.objects.filter(trigger_id=trigger_id, source_id=source_id,
136+
source_type=source_type).delete()[0]
137+
if delete_count == 0:
138+
raise AppApiException(404, _('Task not found'))
139+
has_other_tasks = TriggerTask.objects.filter(trigger_id=trigger_id).exists()
140+
141+
if not has_other_tasks:
142+
trigger.delete()
143+
return True
96144

97145
class TaskSourceTriggerListSerializer(serializers.Serializer):
98146
workspace_id = serializers.CharField(required=True, label=_('workspace id'))

apps/trigger/serializers/trigger.py

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
from rest_framework import serializers
1919

2020
from application.models import Application
21-
from common.db.search import page_search, get_dynamics_model, native_page_search, native_search
21+
from common.db.search import get_dynamics_model, native_page_search, native_search
2222
from common.exception.app_exception import AppApiException
2323
from common.field.common import ObjectField
2424
from common.utils.common import get_file_content
@@ -327,24 +327,26 @@ class TriggerSerializer(serializers.Serializer):
327327
def insert(self, instance, with_valid=True):
328328
if with_valid:
329329
self.is_valid(raise_exception=True)
330-
TriggerCreateRequest(data=instance).is_valid(raise_exception=True)
330+
serializer = TriggerCreateRequest(data=instance)
331+
serializer.is_valid(raise_exception=True)
332+
valid_data = serializer.validated_data
331333

332-
trigger_id = instance.get('id') if instance.get('id') else uuid.uuid7()
334+
trigger_id = valid_data.get('id') if valid_data.get('id') else uuid.uuid7()
333335

334336
trigger_model = Trigger(
335337
id=trigger_id,
336-
name=instance.get('name'),
338+
name=valid_data.get('name'),
337339
workspace_id=self.data.get('workspace_id'),
338-
desc=instance.get('desc') or '',
339-
trigger_type=instance.get('trigger_type'),
340-
trigger_setting=instance.get('trigger_setting'),
341-
meta=instance.get('meta', {}),
340+
desc=valid_data.get('desc') or '',
341+
trigger_type=valid_data.get('trigger_type'),
342+
trigger_setting=valid_data.get('trigger_setting'),
343+
meta=valid_data.get('meta', {}),
342344
is_active=False,
343345
user_id=self.data.get('user_id'),
344346
)
345347
trigger_model.save()
346348

347-
trigger_tasks = instance.get('trigger_task')
349+
trigger_tasks = valid_data.get('trigger_task')
348350
if trigger_tasks:
349351
trigger_task_models = [
350352
self.to_trigger_task_model(trigger_id, task) for task in
@@ -420,7 +422,7 @@ def edit(self, instance: Dict, with_valid=True):
420422
self.is_valid()
421423
TriggerEditRequest(data=instance).is_valid(raise_exception=True)
422424
trigger_id = self.data.get('trigger_id')
423-
trigger = Trigger.objects.filter(id=trigger_id).first()
425+
trigger = Trigger.objects.filter(workspace_id=self.data.get('workspace_id') ,id=trigger_id).first()
424426
if not trigger:
425427
raise serializers.ValidationError(_('Trigger not found'))
426428

apps/trigger/views/trigger.py

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@ class Operate(APIView):
216216
)
217217
def get(self, request: Request, workspace_id: str, source_type: str, source_id: str, trigger_id: str):
218218
return result.success(TaskSourceTriggerOperateSerializer(
219-
data={'trigger_id': trigger_id, 'workspace_id': workspace_id, 'user_id': request.user.id,
219+
data={'trigger_id': trigger_id, 'workspace_id': workspace_id,
220220
'source_id': source_id, 'source_type': source_type}
221221
).one())
222222

@@ -231,12 +231,27 @@ def get(self, request: Request, workspace_id: str, source_type: str, source_id:
231231
responses=result.DefaultResultSerializer,
232232
tags=[_('Trigger')] # type: ignore
233233
)
234-
def get(self, request: Request, workspace_id: str, source_type: str, source_id: str, trigger_id: str):
234+
def put(self, request: Request, workspace_id: str, source_type: str, source_id: str, trigger_id: str):
235235
return result.success(TaskSourceTriggerOperateSerializer(
236-
data={'trigger_id': trigger_id, 'workspace_id': workspace_id, 'user_id': request.user.id,
236+
data={'trigger_id': trigger_id, 'workspace_id': workspace_id,
237237
'source_id': source_id, 'source_type': source_type}
238238
).edit(request.data))
239239

240+
@extend_schema(
241+
methods=['DELETE'],
242+
description=_('Delete the task source trigger'),
243+
summary=_('Delete the task source trigger'),
244+
operation_id=_('Delete the task source trigger'), # type: ignore
245+
parameters=TaskSourceTriggerOperateAPI.get_parameters(),
246+
responses=result.DefaultResultSerializer,
247+
tags=[_('Trigger')] # type: ignore
248+
)
249+
def delete(self, request: Request, workspace_id: str, source_type: str, source_id: str, trigger_id: str):
250+
return result.success(TaskSourceTriggerOperateSerializer(
251+
data={'trigger_id': trigger_id, 'workspace_id': workspace_id,
252+
'source_id': source_id, 'source_type': source_type}
253+
).delete())
254+
240255

241256

242257

0 commit comments

Comments
 (0)