feat: add feishu notification data models
This commit is contained in:
@@ -0,0 +1,352 @@
|
||||
# Generated by Django 5.2.14 on 2026-06-07 14:02
|
||||
|
||||
import django.db.models.deletion
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
("review_agent", "0006_alter_exportedsummaryfile_export_type_and_more"),
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name="FeishuAccessTokenCache",
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.BigAutoField(
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
verbose_name="ID",
|
||||
),
|
||||
),
|
||||
("app_id_hash", models.CharField(max_length=128, unique=True)),
|
||||
("tenant_access_token", models.TextField(blank=True, default="")),
|
||||
("expires_at", models.DateTimeField(blank=True, null=True)),
|
||||
("error_message", models.TextField(blank=True, default="")),
|
||||
("created_at", models.DateTimeField(auto_now_add=True)),
|
||||
("updated_at", models.DateTimeField(auto_now=True)),
|
||||
],
|
||||
options={
|
||||
"db_table": "ra_feishu_access_token_cache",
|
||||
"ordering": ["-updated_at", "-id"],
|
||||
"indexes": [
|
||||
models.Index(
|
||||
fields=["app_id_hash"], name="idx_ra_feishu_token_app"
|
||||
),
|
||||
models.Index(fields=["expires_at"], name="idx_ra_feishu_token_exp"),
|
||||
],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="FeishuUserMapping",
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.BigAutoField(
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
verbose_name="ID",
|
||||
),
|
||||
),
|
||||
(
|
||||
"feishu_display_name",
|
||||
models.CharField(blank=True, default="", max_length=120),
|
||||
),
|
||||
(
|
||||
"feishu_open_id",
|
||||
models.CharField(blank=True, default="", max_length=120),
|
||||
),
|
||||
(
|
||||
"feishu_user_id",
|
||||
models.CharField(blank=True, default="", max_length=120),
|
||||
),
|
||||
(
|
||||
"feishu_mobile",
|
||||
models.CharField(blank=True, default="", max_length=40),
|
||||
),
|
||||
("is_active", models.BooleanField(default=True)),
|
||||
("remark", models.CharField(blank=True, default="", max_length=255)),
|
||||
("created_at", models.DateTimeField(auto_now_add=True)),
|
||||
("updated_at", models.DateTimeField(auto_now=True)),
|
||||
(
|
||||
"system_user",
|
||||
models.OneToOneField(
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
related_name="feishu_mapping",
|
||||
to=settings.AUTH_USER_MODEL,
|
||||
),
|
||||
),
|
||||
],
|
||||
options={
|
||||
"db_table": "ra_feishu_user_mapping",
|
||||
"ordering": ["system_user__username", "id"],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="FeishuQuestionLog",
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.BigAutoField(
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
verbose_name="ID",
|
||||
),
|
||||
),
|
||||
(
|
||||
"feishu_open_id",
|
||||
models.CharField(blank=True, default="", max_length=120),
|
||||
),
|
||||
(
|
||||
"feishu_user_id",
|
||||
models.CharField(blank=True, default="", max_length=120),
|
||||
),
|
||||
(
|
||||
"source_type",
|
||||
models.CharField(
|
||||
choices=[
|
||||
("private_chat", "私聊"),
|
||||
("group_mention", "群聊 @"),
|
||||
("simulate", "本地模拟"),
|
||||
],
|
||||
default="simulate",
|
||||
max_length=30,
|
||||
),
|
||||
),
|
||||
(
|
||||
"message_id",
|
||||
models.CharField(blank=True, default="", max_length=120),
|
||||
),
|
||||
("question_text", models.TextField()),
|
||||
("intent", models.CharField(blank=True, default="", max_length=60)),
|
||||
("query_object", models.JSONField(blank=True, default=dict)),
|
||||
("answer_summary", models.TextField(blank=True, default="")),
|
||||
(
|
||||
"permission_result",
|
||||
models.CharField(blank=True, default="", max_length=40),
|
||||
),
|
||||
(
|
||||
"status",
|
||||
models.CharField(
|
||||
choices=[
|
||||
("success", "成功"),
|
||||
("failed", "失败"),
|
||||
("ignored", "忽略"),
|
||||
],
|
||||
default="success",
|
||||
max_length=30,
|
||||
),
|
||||
),
|
||||
("error_message", models.TextField(blank=True, default="")),
|
||||
("processed_at", models.DateTimeField(blank=True, null=True)),
|
||||
("created_at", models.DateTimeField(auto_now_add=True)),
|
||||
(
|
||||
"system_user",
|
||||
models.ForeignKey(
|
||||
blank=True,
|
||||
null=True,
|
||||
on_delete=django.db.models.deletion.SET_NULL,
|
||||
related_name="feishu_question_logs",
|
||||
to=settings.AUTH_USER_MODEL,
|
||||
),
|
||||
),
|
||||
(
|
||||
"feishu_mapping",
|
||||
models.ForeignKey(
|
||||
blank=True,
|
||||
null=True,
|
||||
on_delete=django.db.models.deletion.SET_NULL,
|
||||
related_name="question_logs",
|
||||
to="review_agent.feishuusermapping",
|
||||
),
|
||||
),
|
||||
],
|
||||
options={
|
||||
"db_table": "ra_feishu_question_log",
|
||||
"ordering": ["-created_at", "-id"],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="WorkflowNotificationRecord",
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.BigAutoField(
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
verbose_name="ID",
|
||||
),
|
||||
),
|
||||
("workflow_type", models.CharField(max_length=40)),
|
||||
("workflow_batch_id", models.PositiveBigIntegerField()),
|
||||
("workflow_batch_no", models.CharField(max_length=80)),
|
||||
("workflow_status", models.CharField(max_length=40)),
|
||||
("dedupe_key", models.CharField(max_length=160)),
|
||||
(
|
||||
"channel",
|
||||
models.CharField(
|
||||
choices=[
|
||||
("mock", "模拟"),
|
||||
("disabled", "未启用"),
|
||||
("feishu_api", "飞书 API"),
|
||||
],
|
||||
default="mock",
|
||||
max_length=40,
|
||||
),
|
||||
),
|
||||
("target", models.CharField(blank=True, default="", max_length=160)),
|
||||
(
|
||||
"at_display_name",
|
||||
models.CharField(blank=True, default="", max_length=120),
|
||||
),
|
||||
(
|
||||
"at_identifier_type",
|
||||
models.CharField(blank=True, default="", max_length=30),
|
||||
),
|
||||
(
|
||||
"at_identifier_masked",
|
||||
models.CharField(blank=True, default="", max_length=120),
|
||||
),
|
||||
(
|
||||
"send_status",
|
||||
models.CharField(
|
||||
choices=[
|
||||
("pending", "待发送"),
|
||||
("success", "成功"),
|
||||
("failed", "失败"),
|
||||
("skipped_duplicate", "重复跳过"),
|
||||
("disabled", "未启用"),
|
||||
],
|
||||
default="pending",
|
||||
max_length=30,
|
||||
),
|
||||
),
|
||||
("message_title", models.CharField(max_length=200)),
|
||||
("message_summary", models.TextField(blank=True, default="")),
|
||||
(
|
||||
"result_url",
|
||||
models.CharField(blank=True, default="", max_length=500),
|
||||
),
|
||||
(
|
||||
"external_message_id",
|
||||
models.CharField(blank=True, default="", max_length=120),
|
||||
),
|
||||
("error_code", models.CharField(blank=True, default="", max_length=80)),
|
||||
("error_message", models.TextField(blank=True, default="")),
|
||||
(
|
||||
"request_duration_ms",
|
||||
models.PositiveIntegerField(blank=True, null=True),
|
||||
),
|
||||
("sent_at", models.DateTimeField(blank=True, null=True)),
|
||||
("created_at", models.DateTimeField(auto_now_add=True)),
|
||||
("updated_at", models.DateTimeField(auto_now=True)),
|
||||
(
|
||||
"feishu_mapping",
|
||||
models.ForeignKey(
|
||||
blank=True,
|
||||
null=True,
|
||||
on_delete=django.db.models.deletion.SET_NULL,
|
||||
related_name="notification_records",
|
||||
to="review_agent.feishuusermapping",
|
||||
),
|
||||
),
|
||||
(
|
||||
"trigger_user",
|
||||
models.ForeignKey(
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
related_name="workflow_notification_records",
|
||||
to=settings.AUTH_USER_MODEL,
|
||||
),
|
||||
),
|
||||
],
|
||||
options={
|
||||
"db_table": "ra_workflow_notification_record",
|
||||
"ordering": ["-created_at", "-id"],
|
||||
},
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name="feishuusermapping",
|
||||
index=models.Index(fields=["is_active"], name="idx_ra_feishu_map_active"),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name="feishuusermapping",
|
||||
index=models.Index(
|
||||
fields=["feishu_open_id"], name="idx_ra_feishu_map_open"
|
||||
),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name="feishuusermapping",
|
||||
index=models.Index(
|
||||
fields=["feishu_user_id"], name="idx_ra_feishu_map_userid"
|
||||
),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name="feishuusermapping",
|
||||
index=models.Index(
|
||||
fields=["feishu_mobile"], name="idx_ra_feishu_map_mobile"
|
||||
),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name="feishuquestionlog",
|
||||
index=models.Index(
|
||||
fields=["system_user", "created_at"],
|
||||
name="idx_ra_feishu_q_user_created",
|
||||
),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name="feishuquestionlog",
|
||||
index=models.Index(
|
||||
fields=["intent", "created_at"], name="idx_ra_feishu_q_intent"
|
||||
),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name="feishuquestionlog",
|
||||
index=models.Index(
|
||||
fields=["status", "created_at"], name="idx_ra_feishu_q_status"
|
||||
),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name="feishuquestionlog",
|
||||
index=models.Index(fields=["message_id"], name="idx_ra_feishu_q_message"),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name="workflownotificationrecord",
|
||||
index=models.Index(
|
||||
fields=["workflow_type", "workflow_batch_id"],
|
||||
name="idx_ra_notify_workflow",
|
||||
),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name="workflownotificationrecord",
|
||||
index=models.Index(
|
||||
fields=["trigger_user", "created_at"], name="idx_ra_notify_user_created"
|
||||
),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name="workflownotificationrecord",
|
||||
index=models.Index(
|
||||
fields=["send_status", "created_at"], name="idx_ra_notify_status"
|
||||
),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name="workflownotificationrecord",
|
||||
index=models.Index(
|
||||
fields=["workflow_batch_no"], name="idx_ra_notify_batch_no"
|
||||
),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name="workflownotificationrecord",
|
||||
index=models.Index(
|
||||
fields=["dedupe_key", "send_status"], name="idx_ra_notify_dedupe_status"
|
||||
),
|
||||
),
|
||||
]
|
||||
Reference in New Issue
Block a user