From bec3dbb9033eea713b6c5698ef70b04e6118e963 Mon Sep 17 00:00:00 2001 From: zhangzhanwei Date: Fri, 9 Jan 2026 16:19:29 +0800 Subject: [PATCH] feat: Trigger init --- apps/maxkb/settings/base/web.py | 1 + apps/trigger/__init__.py | 0 apps/trigger/admin.py | 3 ++ apps/trigger/apps.py | 6 +++ apps/trigger/migrations/0001_initial.py | 51 ++++++++++++++++++++++++ apps/trigger/migrations/__init__.py | 0 apps/trigger/models/__init__.py | 9 +++++ apps/trigger/models/trigger.py | 52 +++++++++++++++++++++++++ apps/trigger/serializers/__init__.py | 8 ++++ apps/trigger/tests.py | 3 ++ apps/trigger/urls.py | 8 ++++ apps/trigger/views/__init__.py | 8 ++++ 12 files changed, 149 insertions(+) create mode 100644 apps/trigger/__init__.py create mode 100644 apps/trigger/admin.py create mode 100644 apps/trigger/apps.py create mode 100644 apps/trigger/migrations/0001_initial.py create mode 100644 apps/trigger/migrations/__init__.py create mode 100644 apps/trigger/models/__init__.py create mode 100644 apps/trigger/models/trigger.py create mode 100644 apps/trigger/serializers/__init__.py create mode 100644 apps/trigger/tests.py create mode 100644 apps/trigger/urls.py create mode 100644 apps/trigger/views/__init__.py diff --git a/apps/maxkb/settings/base/web.py b/apps/maxkb/settings/base/web.py index 04f6ae5a350..2324a2bf93d 100644 --- a/apps/maxkb/settings/base/web.py +++ b/apps/maxkb/settings/base/web.py @@ -44,6 +44,7 @@ 'application', 'chat', 'oss', + 'trigger', 'django_apscheduler', ] diff --git a/apps/trigger/__init__.py b/apps/trigger/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/apps/trigger/admin.py b/apps/trigger/admin.py new file mode 100644 index 00000000000..8c38f3f3dad --- /dev/null +++ b/apps/trigger/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/apps/trigger/apps.py b/apps/trigger/apps.py new file mode 100644 index 00000000000..caf02acab15 --- /dev/null +++ b/apps/trigger/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class TriggerConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'trigger' diff --git a/apps/trigger/migrations/0001_initial.py b/apps/trigger/migrations/0001_initial.py new file mode 100644 index 00000000000..fc56960bf0b --- /dev/null +++ b/apps/trigger/migrations/0001_initial.py @@ -0,0 +1,51 @@ +# Generated by Django 5.2.9 on 2026-01-09 08:17 + +import django.db.models.deletion +import uuid_utils.compat +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('users', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='Trigger', + fields=[ + ('create_time', models.DateTimeField(auto_now_add=True, db_index=True, verbose_name='创建时间')), + ('update_time', models.DateTimeField(auto_now=True, db_index=True, verbose_name='修改时间')), + ('id', models.UUIDField(default=uuid_utils.compat.uuid7, editable=False, primary_key=True, serialize=False, verbose_name='主键id')), + ('workspace_id', models.CharField(db_index=True, default='default', max_length=64, verbose_name='工作空间id')), + ('name', models.CharField(db_index=True, max_length=128, verbose_name='触发器名称')), + ('desc', models.CharField(default='', max_length=512, verbose_name='引用描述')), + ('trigger_type', models.CharField(choices=[('SCHEDULED', 'Scheduled'), ('EVENT', 'Event')], default='SCHEDULED', max_length=256, verbose_name='触发器类型')), + ('trigger_setting', models.JSONField(default=dict)), + ('meta', models.JSONField(default=dict)), + ('is_active', models.BooleanField(db_index=True, default=True)), + ('user', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.SET_NULL, to='users.user')), + ], + options={ + 'db_table': 'event_trigger', + }, + ), + migrations.CreateModel( + name='TriggerTask', + fields=[ + ('create_time', models.DateTimeField(auto_now_add=True, db_index=True, verbose_name='创建时间')), + ('update_time', models.DateTimeField(auto_now=True, db_index=True, verbose_name='修改时间')), + ('id', models.UUIDField(default=uuid_utils.compat.uuid7, editable=False, primary_key=True, serialize=False, verbose_name='主键id')), + ('source_type', models.CharField(choices=[('APPLICATION', 'Application'), ('TOOL', 'Tool')], default='APPLICATION', max_length=256, verbose_name='触发器任务类型')), + ('source_id', models.UUIDField(blank=True, null=True, verbose_name='资源id')), + ('is_active', models.BooleanField(db_index=True, default=True)), + ('trigger', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='trigger.trigger')), + ], + options={ + 'db_table': 'event_trigger_task', + }, + ), + ] diff --git a/apps/trigger/migrations/__init__.py b/apps/trigger/migrations/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/apps/trigger/models/__init__.py b/apps/trigger/models/__init__.py new file mode 100644 index 00000000000..5439e552ec1 --- /dev/null +++ b/apps/trigger/models/__init__.py @@ -0,0 +1,9 @@ +# coding=utf-8 +""" + @project: MaxKB + @Author:niu + @file: __init__.py.py + @date:2026/1/9 16:13 + @desc: +""" +from .trigger import * \ No newline at end of file diff --git a/apps/trigger/models/trigger.py b/apps/trigger/models/trigger.py new file mode 100644 index 00000000000..d2434fa0138 --- /dev/null +++ b/apps/trigger/models/trigger.py @@ -0,0 +1,52 @@ +# coding=utf-8 +""" + @project: MaxKB + @Author:niu + @file: trigger.py.py + @date:2026/1/9 15:33 + @desc: +""" +import uuid_utils.compat as uuid + +from django.db import models + +from common.mixins.app_model_mixin import AppModelMixin +from users.models import User + + +class TriggerTypeChoices(models.TextChoices): + SCHEDULED = 'SCHEDULED' + EVENT = 'EVENT' + +class TriggerTaskTypeChoices(models.TextChoices): + APPLICATION = 'APPLICATION' + TOOL = 'TOOL' + + +class Trigger(AppModelMixin): + id = models.UUIDField(primary_key=True, max_length=128, default=uuid.uuid7, editable=False, verbose_name="主键id") + workspace_id = models.CharField(max_length=64, verbose_name="工作空间id", default="default", db_index=True) + name = models.CharField(max_length=128, verbose_name="触发器名称", db_index=True) + desc = models.CharField(max_length=512, verbose_name="引用描述", default="") + trigger_type = models.CharField(verbose_name="触发器类型",choices=TriggerTypeChoices.choices, + default=TriggerTypeChoices.SCHEDULED, max_length=256) + trigger_setting = models.JSONField(default=dict) + meta = models.JSONField(default=dict) + is_active = models.BooleanField(default=True, db_index=True) + user = models.ForeignKey(User, on_delete=models.SET_NULL, db_constraint=False, blank=True, null=True) + + class Meta: + db_table = "event_trigger" + + +class TriggerTask(AppModelMixin): + id = models.UUIDField(primary_key=True, max_length=128, default=uuid.uuid7, editable=False, verbose_name="主键id") + trigger = models.ForeignKey(Trigger,on_delete=models.CASCADE) + source_type = models.CharField(verbose_name="触发器任务类型", choices=TriggerTaskTypeChoices.choices, + default=TriggerTaskTypeChoices.APPLICATION, max_length=256 + ) + source_id = models.UUIDField(verbose_name="资源id", blank=True, null=True) + is_active = models.BooleanField(default=True, db_index=True) + + class Meta: + db_table = "event_trigger_task" diff --git a/apps/trigger/serializers/__init__.py b/apps/trigger/serializers/__init__.py new file mode 100644 index 00000000000..d716297d0b9 --- /dev/null +++ b/apps/trigger/serializers/__init__.py @@ -0,0 +1,8 @@ +# coding=utf-8 +""" + @project: MaxKB + @Author:niu + @file: __init__.py.py + @date:2026/1/9 16:16 + @desc: +""" diff --git a/apps/trigger/tests.py b/apps/trigger/tests.py new file mode 100644 index 00000000000..7ce503c2dd9 --- /dev/null +++ b/apps/trigger/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/apps/trigger/urls.py b/apps/trigger/urls.py new file mode 100644 index 00000000000..23e6435188a --- /dev/null +++ b/apps/trigger/urls.py @@ -0,0 +1,8 @@ +# coding=utf-8 +""" + @project: MaxKB + @Author:niu + @file: urls.py + @date:2026/1/9 16:15 + @desc: +""" diff --git a/apps/trigger/views/__init__.py b/apps/trigger/views/__init__.py new file mode 100644 index 00000000000..02ea15645ca --- /dev/null +++ b/apps/trigger/views/__init__.py @@ -0,0 +1,8 @@ +# coding=utf-8 +""" + @project: MaxKB + @Author:niu + @file: __init__.py.py + @date:2026/1/9 16:15 + @desc: +"""