From b496a2b2c594f32300a9b57787b72305da4e28c4 Mon Sep 17 00:00:00 2001 From: CaptainB Date: Mon, 23 Jun 2025 10:22:41 +0800 Subject: [PATCH] feat: update migration files and add new models for application settings and chat functionality --- apps/application/migrations/0001_initial.py | 163 +++++++++++------- ...hat_chatrecord_workflowversion_and_more.py | 110 ------------ ...ken_show_exec_chat_client_type_and_more.py | 59 ------- ...application_applica_f89647_idx_and_more.py | 56 ------ ...stats_applicationchatuserstats_and_more.py | 32 ---- apps/common/cache_data/__init__.py | 0 apps/common/encoder/__init__.py | 0 apps/common/field/__init__.py | 0 apps/common/log/__init__.py | 0 apps/knowledge/migrations/0001_initial.py | 10 +- ..._status_alter_file_source_type_and_more.py | 29 ---- ...nt_limit_alter_document_status_and_more.py | 29 ---- ..._status_alter_paragraph_status_and_more.py | 30 ---- ...agraph_options_paragraph_order_and_more.py | 29 ---- .../migrations/0001_initial.py | 4 +- .../0002_alter_model_workspace_id.py | 18 -- apps/system_manage/migrations/0001_initial.py | 43 ++++- .../migrations/0002_systemsetting.py | 25 --- ...orkspaceuserresourcepermission_and_more.py | 37 ---- apps/system_manage/migrations/0004_log.py | 33 ---- apps/tools/migrations/0001_initial.py | 8 +- apps/tools/migrations/0002_tool_label.py | 21 --- apps/users/migrations/0001_initial.py | 7 +- .../migrations/0002_alter_user_nick_name.py | 18 -- 24 files changed, 158 insertions(+), 603 deletions(-) delete mode 100644 apps/application/migrations/0002_chat_chatrecord_workflowversion_and_more.py delete mode 100644 apps/application/migrations/0003_applicationaccesstoken_show_exec_chat_client_type_and_more.py delete mode 100644 apps/application/migrations/0004_remove_applicationchatclientstats_application_applica_f89647_idx_and_more.py delete mode 100644 apps/application/migrations/0005_rename_applicationchatclientstats_applicationchatuserstats_and_more.py create mode 100644 apps/common/cache_data/__init__.py create mode 100644 apps/common/encoder/__init__.py create mode 100644 apps/common/field/__init__.py create mode 100644 apps/common/log/__init__.py delete mode 100644 apps/knowledge/migrations/0002_alter_document_status_alter_file_source_type_and_more.py delete mode 100644 apps/knowledge/migrations/0003_knowledge_file_count_limit_alter_document_status_and_more.py delete mode 100644 apps/knowledge/migrations/0004_alter_document_status_alter_paragraph_status_and_more.py delete mode 100644 apps/knowledge/migrations/0005_alter_paragraph_options_paragraph_order_and_more.py delete mode 100644 apps/models_provider/migrations/0002_alter_model_workspace_id.py delete mode 100644 apps/system_manage/migrations/0002_systemsetting.py delete mode 100644 apps/system_manage/migrations/0003_workspaceuserresourcepermission_and_more.py delete mode 100644 apps/system_manage/migrations/0004_log.py delete mode 100644 apps/tools/migrations/0002_tool_label.py delete mode 100644 apps/users/migrations/0002_alter_user_nick_name.py diff --git a/apps/application/migrations/0001_initial.py b/apps/application/migrations/0001_initial.py index b7905bb58..e1aa4f6b2 100644 --- a/apps/application/migrations/0001_initial.py +++ b/apps/application/migrations/0001_initial.py @@ -1,7 +1,8 @@ -# Generated by Django 5.2 on 2025-05-27 07:50 +# Generated by Django 5.2.3 on 2025-06-23 02:14 from django.db.models import QuerySet import application.models.application +import common.encoder.encoder import django.contrib.postgres.fields import django.db.models.deletion import mptt.fields @@ -17,12 +18,13 @@ def insert_default_data(apps, schema_editor): class Migration(migrations.Migration): + initial = True dependencies = [ ('knowledge', '0001_initial'), ('models_provider', '0001_initial'), - ('users', '0002_alter_user_nick_name'), + ('users', '0001_initial'), ] operations = [ @@ -31,31 +33,22 @@ class Migration(migrations.Migration): fields=[ ('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')), ('update_time', models.DateTimeField(auto_now=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')), + ('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')), ('is_publish', models.BooleanField(default=False, verbose_name='是否发布')), ('name', models.CharField(max_length=128, verbose_name='应用名称')), ('desc', models.CharField(default='', max_length=512, verbose_name='引用描述')), ('prologue', models.CharField(default='', max_length=40960, verbose_name='开场白')), ('dialogue_number', models.IntegerField(default=0, verbose_name='会话数量')), - ('knowledge_setting', models.JSONField(default=application.models.application.get_dataset_setting_dict, - verbose_name='数据集参数设置')), - ('model_setting', models.JSONField(default=application.models.application.get_model_setting_dict, - verbose_name='模型参数相关设置')), + ('knowledge_setting', models.JSONField(default=application.models.application.get_dataset_setting_dict, verbose_name='数据集参数设置')), + ('model_setting', models.JSONField(default=application.models.application.get_model_setting_dict, verbose_name='模型参数相关设置')), ('model_params_setting', models.JSONField(default=dict, verbose_name='模型参数相关设置')), ('tts_model_params_setting', models.JSONField(default=dict, verbose_name='模型参数相关设置')), ('problem_optimization', models.BooleanField(default=False, verbose_name='问题优化')), ('icon', models.CharField(default='/ui/favicon.ico', max_length=256, verbose_name='应用icon')), ('work_flow', models.JSONField(default=dict, verbose_name='工作流数据')), - ('type', models.CharField(choices=[('SIMPLE', '简易'), ('WORK_FLOW', '工作流')], default='SIMPLE', - max_length=256, verbose_name='应用类型')), - ('problem_optimization_prompt', models.CharField(blank=True, - default='()里面是用户问题,根据上下文回答揣测用户问题({question}) 要求: 输出一个补全问题,并且放在标签中', - max_length=102400, null=True, - verbose_name='问题优化提示词')), + ('type', models.CharField(choices=[('SIMPLE', '简易'), ('WORK_FLOW', '工作流')], default='SIMPLE', max_length=256, verbose_name='应用类型')), + ('problem_optimization_prompt', models.CharField(blank=True, default='()里面是用户问题,根据上下文回答揣测用户问题({question}) 要求: 输出一个补全问题,并且放在标签中', max_length=102400, null=True, verbose_name='问题优化提示词')), ('tts_model_enable', models.BooleanField(default=False, verbose_name='语音合成模型是否启用')), ('stt_model_enable', models.BooleanField(default=False, verbose_name='语音识别模型是否启用')), ('tts_type', models.CharField(default='BROWSER', max_length=20, verbose_name='语音播放类型')), @@ -64,14 +57,9 @@ class Migration(migrations.Migration): ('clean_time', models.IntegerField(default=180, verbose_name='清理时间')), ('file_upload_enable', models.BooleanField(default=False, verbose_name='文件上传是否启用')), ('file_upload_setting', models.JSONField(default=dict, verbose_name='文件上传相关设置')), - ('model', models.ForeignKey(blank=True, db_constraint=False, null=True, - on_delete=django.db.models.deletion.SET_NULL, to='models_provider.model')), - ('stt_model', models.ForeignKey(blank=True, db_constraint=False, null=True, - on_delete=django.db.models.deletion.SET_NULL, - related_name='stt_model_id', to='models_provider.model')), - ('tts_model', models.ForeignKey(blank=True, db_constraint=False, null=True, - on_delete=django.db.models.deletion.SET_NULL, - related_name='tts_model_id', to='models_provider.model')), + ('model', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.SET_NULL, to='models_provider.model')), + ('stt_model', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='stt_model_id', to='models_provider.model')), + ('tts_model', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='tts_model_id', to='models_provider.model')), ('user', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to='users.user')), ], options={ @@ -83,17 +71,14 @@ class Migration(migrations.Migration): fields=[ ('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')), ('update_time', models.DateTimeField(auto_now=True, verbose_name='修改时间')), - ('application', - models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, primary_key=True, serialize=False, - to='application.application', verbose_name='应用id')), + ('application', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, primary_key=True, serialize=False, to='application.application', verbose_name='应用id')), ('access_token', models.CharField(max_length=128, unique=True, verbose_name='用户公开访问 认证token')), ('is_active', models.BooleanField(default=True, verbose_name='是否开启公开访问')), ('access_num', models.IntegerField(default=100, verbose_name='访问次数')), ('white_active', models.BooleanField(default=False, verbose_name='是否开启白名单')), - ('white_list', - django.contrib.postgres.fields.ArrayField(base_field=models.CharField(blank=True, max_length=128), - default=list, size=None, verbose_name='白名单列表')), + ('white_list', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(blank=True, max_length=128), default=list, size=None, verbose_name='白名单列表')), ('show_source', models.BooleanField(default=False, verbose_name='是否显示知识来源')), + ('show_exec', models.BooleanField(default=False, verbose_name='是否显示执行详情')), ('language', models.CharField(default=None, max_length=10, null=True, verbose_name='语言')), ], options={ @@ -105,21 +90,14 @@ class Migration(migrations.Migration): fields=[ ('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')), ('update_time', models.DateTimeField(auto_now=True, verbose_name='修改时间')), - ('id', models.UUIDField(default=uuid.uuid1, editable=False, primary_key=True, serialize=False, - verbose_name='主键id')), + ('id', models.UUIDField(default=uuid.uuid1, editable=False, primary_key=True, serialize=False, verbose_name='主键id')), ('secret_key', models.CharField(max_length=1024, unique=True, verbose_name='秘钥')), - ('workspace_id', - models.CharField(db_index=True, default='default', max_length=64, verbose_name='工作空间id')), + ('workspace_id', models.CharField(db_index=True, default='default', max_length=64, verbose_name='工作空间id')), ('is_active', models.BooleanField(default=True, verbose_name='是否开启')), ('allow_cross_domain', models.BooleanField(default=False, verbose_name='是否允许跨域')), - ('cross_domain_list', - django.contrib.postgres.fields.ArrayField(base_field=models.CharField(blank=True, max_length=128), - default=list, size=None, verbose_name='跨域列表')), - ('application', - models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='application.application', - verbose_name='应用id')), - ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='users.user', - verbose_name='用户id')), + ('cross_domain_list', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(blank=True, max_length=128), default=list, size=None, verbose_name='跨域列表')), + ('application', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='application.application', verbose_name='应用id')), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='users.user', verbose_name='用户id')), ], options={ 'db_table': 'application_api_key', @@ -130,21 +108,16 @@ class Migration(migrations.Migration): fields=[ ('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')), ('update_time', models.DateTimeField(auto_now=True, verbose_name='修改时间')), - ('id', models.CharField(editable=False, max_length=64, primary_key=True, serialize=False, - verbose_name='主键id')), + ('id', models.CharField(editable=False, max_length=64, primary_key=True, serialize=False, verbose_name='主键id')), ('name', models.CharField(max_length=64, verbose_name='文件夹名称')), ('desc', models.CharField(blank=True, max_length=200, null=True, verbose_name='描述')), - ('workspace_id', - models.CharField(db_index=True, default='default', max_length=64, verbose_name='工作空间id')), + ('workspace_id', models.CharField(db_index=True, default='default', max_length=64, verbose_name='工作空间id')), ('lft', models.PositiveIntegerField(editable=False)), ('rght', models.PositiveIntegerField(editable=False)), ('tree_id', models.PositiveIntegerField(db_index=True, editable=False)), ('level', models.PositiveIntegerField(editable=False)), - ('parent', - mptt.fields.TreeForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.DO_NOTHING, - related_name='children', to='application.applicationfolder')), - ('user', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to='users.user', - verbose_name='用户id')), + ('parent', mptt.fields.TreeForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='children', to='application.applicationfolder')), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to='users.user', verbose_name='用户id')), ], options={ 'db_table': 'application_folder', @@ -153,25 +126,93 @@ class Migration(migrations.Migration): migrations.AddField( model_name='application', name='folder', - field=models.ForeignKey(default='default', on_delete=django.db.models.deletion.DO_NOTHING, - to='application.applicationfolder', verbose_name='文件夹id'), + field=models.ForeignKey(default='default', on_delete=django.db.models.deletion.DO_NOTHING, to='application.applicationfolder', verbose_name='文件夹id'), ), migrations.CreateModel( name='ApplicationKnowledgeMapping', fields=[ ('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')), ('update_time', models.DateTimeField(auto_now=True, verbose_name='修改时间')), - ('id', - models.UUIDField(default=uuid_utils.compat.uuid7, editable=False, primary_key=True, serialize=False, - verbose_name='主键id')), - ('application', - models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to='application.application')), - ('knowledge', - models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to='knowledge.knowledge')), + ('id', models.UUIDField(default=uuid_utils.compat.uuid7, editable=False, primary_key=True, serialize=False, verbose_name='主键id')), + ('application', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to='application.application')), + ('knowledge', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to='knowledge.knowledge')), ], options={ 'db_table': 'application_knowledge_mapping', }, ), + migrations.CreateModel( + name='Chat', + fields=[ + ('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')), + ('update_time', models.DateTimeField(auto_now=True, verbose_name='修改时间')), + ('id', models.UUIDField(default=uuid.UUID('01979a90-ea1d-7033-94d5-38f2e12c6627'), editable=False, primary_key=True, serialize=False, verbose_name='主键id')), + ('abstract', models.CharField(max_length=1024, verbose_name='摘要')), + ('chat_user_id', models.UUIDField(default=None, null=True, verbose_name='客户端id')), + ('chat_user_type', models.CharField(choices=[('ANONYMOUS_USER', '匿名用户'), ('CHAT_USER', '对话用户'), ('SYSTEM_API_KEY', '系统API_KEY'), ('APPLICATION_API_KEY', '应用API_KEY')], default='ANONYMOUS_USER', max_length=64, verbose_name='客户端类型')), + ('is_deleted', models.BooleanField(default=False, verbose_name='逻辑删除')), + ('application', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='application.application')), + ], + options={ + 'db_table': 'application_chat', + }, + ), + migrations.CreateModel( + name='ChatRecord', + fields=[ + ('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')), + ('update_time', models.DateTimeField(auto_now=True, verbose_name='修改时间')), + ('id', models.UUIDField(default=uuid_utils.compat.uuid1, editable=False, primary_key=True, serialize=False, verbose_name='主键id')), + ('vote_status', models.CharField(choices=[('-1', '未投票'), ('0', '赞同'), ('1', '反对')], default='-1', max_length=10, verbose_name='投票')), + ('problem_text', models.CharField(max_length=10240, verbose_name='问题')), + ('answer_text', models.CharField(max_length=40960, verbose_name='答案')), + ('answer_text_list', django.contrib.postgres.fields.ArrayField(base_field=models.JSONField(), default=list, size=None, verbose_name='改进标注列表')), + ('message_tokens', models.IntegerField(default=0, verbose_name='请求token数量')), + ('answer_tokens', models.IntegerField(default=0, verbose_name='响应token数量')), + ('const', models.IntegerField(default=0, verbose_name='总费用')), + ('details', models.JSONField(default=dict, encoder=common.encoder.encoder.SystemEncoder, verbose_name='对话详情')), + ('improve_paragraph_id_list', django.contrib.postgres.fields.ArrayField(base_field=models.UUIDField(blank=True), default=list, size=None, verbose_name='改进标注列表')), + ('run_time', models.FloatField(default=0, verbose_name='运行时长')), + ('index', models.IntegerField(verbose_name='对话下标')), + ('chat', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='application.chat')), + ], + options={ + 'db_table': 'application_chat_record', + }, + ), + migrations.CreateModel( + name='WorkFlowVersion', + fields=[ + ('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')), + ('update_time', models.DateTimeField(auto_now=True, verbose_name='修改时间')), + ('id', models.UUIDField(default=uuid_utils.compat.uuid1, 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(default='', max_length=128, verbose_name='版本名称')), + ('publish_user_id', models.UUIDField(default=None, null=True, verbose_name='发布者id')), + ('publish_user_name', models.CharField(default='', max_length=128, verbose_name='发布者名称')), + ('work_flow', models.JSONField(default=dict, verbose_name='工作流数据')), + ('application', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='application.application')), + ], + options={ + 'db_table': 'application_work_flow_version', + }, + ), + migrations.CreateModel( + name='ApplicationChatUserStats', + fields=[ + ('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')), + ('update_time', models.DateTimeField(auto_now=True, verbose_name='修改时间')), + ('id', models.UUIDField(default=uuid_utils.compat.uuid7, editable=False, primary_key=True, serialize=False, verbose_name='主键id')), + ('chat_user_id', models.UUIDField(default=uuid_utils.compat.uuid7, verbose_name='对话用户id')), + ('chat_user_type', models.CharField(choices=[('ANONYMOUS_USER', '匿名用户'), ('CHAT_USER', '对话用户'), ('SYSTEM_API_KEY', '系统API_KEY'), ('APPLICATION_API_KEY', '应用API_KEY')], default='ANONYMOUS_USER', max_length=64, verbose_name='对话用户类型')), + ('access_num', models.IntegerField(default=0, verbose_name='访问总次数次数')), + ('intraday_access_num', models.IntegerField(default=0, verbose_name='当日访问次数')), + ('application', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='application.application', verbose_name='应用id')), + ], + options={ + 'db_table': 'application_chat_user_stats', + 'indexes': [models.Index(fields=['application_id', 'chat_user_id'], name='application_applica_1652ba_idx')], + }, + ), migrations.RunPython(insert_default_data) ] diff --git a/apps/application/migrations/0002_chat_chatrecord_workflowversion_and_more.py b/apps/application/migrations/0002_chat_chatrecord_workflowversion_and_more.py deleted file mode 100644 index 3c1b72152..000000000 --- a/apps/application/migrations/0002_chat_chatrecord_workflowversion_and_more.py +++ /dev/null @@ -1,110 +0,0 @@ -# Generated by Django 5.2 on 2025-06-04 11:57 - -import uuid - -import django.contrib.postgres.fields -import django.db.models.deletion -import uuid_utils.compat -from django.db import migrations, models - -import common.encoder.encoder - - -class Migration(migrations.Migration): - dependencies = [ - ('application', '0001_initial'), - ] - - operations = [ - migrations.CreateModel( - name='Chat', - fields=[ - ('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')), - ('update_time', models.DateTimeField(auto_now=True, verbose_name='修改时间')), - ('id', models.UUIDField(default=uuid.UUID('01973acd-fe4c-7fd1-94a8-f7cd668de562'), editable=False, - primary_key=True, serialize=False, verbose_name='主键id')), - ('abstract', models.CharField(max_length=1024, verbose_name='摘要')), - ('client_id', models.UUIDField(default=None, null=True, verbose_name='客户端id')), - ('is_deleted', models.BooleanField(default=False, verbose_name='')), - ('application', - models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='application.application')), - ], - options={ - 'db_table': 'application_chat', - }, - ), - migrations.CreateModel( - name='ChatRecord', - fields=[ - ('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')), - ('update_time', models.DateTimeField(auto_now=True, verbose_name='修改时间')), - ('id', - models.UUIDField(default=uuid_utils.compat.uuid1, editable=False, primary_key=True, serialize=False, - verbose_name='主键id')), - ('vote_status', - models.CharField(choices=[('-1', '未投票'), ('0', '赞同'), ('1', '反对')], default='-1', max_length=10, - verbose_name='投票')), - ('problem_text', models.CharField(max_length=10240, verbose_name='问题')), - ('answer_text', models.CharField(max_length=40960, verbose_name='答案')), - ('answer_text_list', - django.contrib.postgres.fields.ArrayField(base_field=models.JSONField(), default=list, size=None, - verbose_name='改进标注列表')), - ('message_tokens', models.IntegerField(default=0, verbose_name='请求token数量')), - ('answer_tokens', models.IntegerField(default=0, verbose_name='响应token数量')), - ('const', models.IntegerField(default=0, verbose_name='总费用')), - ('details', - models.JSONField(default=dict, encoder=common.encoder.encoder.SystemEncoder, verbose_name='对话详情')), - ('improve_paragraph_id_list', - django.contrib.postgres.fields.ArrayField(base_field=models.UUIDField(blank=True), default=list, - size=None, verbose_name='改进标注列表')), - ('run_time', models.FloatField(default=0, verbose_name='运行时长')), - ('index', models.IntegerField(verbose_name='对话下标')), - ('chat', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='application.chat')), - ], - options={ - 'db_table': 'application_chat_record', - }, - ), - migrations.CreateModel( - name='WorkFlowVersion', - fields=[ - ('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')), - ('update_time', models.DateTimeField(auto_now=True, verbose_name='修改时间')), - ('id', - models.UUIDField(default=uuid_utils.compat.uuid1, 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(default='', max_length=128, verbose_name='版本名称')), - ('publish_user_id', models.UUIDField(default=None, null=True, verbose_name='发布者id')), - ('publish_user_name', models.CharField(default='', max_length=128, verbose_name='发布者名称')), - ('work_flow', models.JSONField(default=dict, verbose_name='工作流数据')), - ('application', - models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='application.application')), - ], - options={ - 'db_table': 'application_work_flow_version', - }, - ), - migrations.CreateModel( - name='ApplicationPublicAccessClient', - fields=[ - ('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')), - ('update_time', models.DateTimeField(auto_now=True, verbose_name='修改时间')), - ('id', models.UUIDField(default=uuid.uuid1, editable=False, primary_key=True, serialize=False, - verbose_name='主键id')), - ('client_id', models.UUIDField(default=uuid.uuid1, verbose_name='公共访问链接客户端id')), - ('client_type', models.CharField(max_length=64, verbose_name='客户端类型')), - ('access_num', models.IntegerField(default=0, verbose_name='访问总次数次数')), - ('intraday_access_num', models.IntegerField(default=0, verbose_name='当日访问次数')), - ('application', - models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='application.application', - verbose_name='应用id')), - ], - options={ - 'db_table': 'application_public_access_client', - 'indexes': [ - models.Index(fields=['application_id', 'client_id'], name='application_applica_8aaf45_idx')], - }, - ), - ] diff --git a/apps/application/migrations/0003_applicationaccesstoken_show_exec_chat_client_type_and_more.py b/apps/application/migrations/0003_applicationaccesstoken_show_exec_chat_client_type_and_more.py deleted file mode 100644 index eef0d4d68..000000000 --- a/apps/application/migrations/0003_applicationaccesstoken_show_exec_chat_client_type_and_more.py +++ /dev/null @@ -1,59 +0,0 @@ -# Generated by Django 5.2 on 2025-06-06 14:56 - -import django.db.models.deletion -import uuid -import uuid_utils.compat -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('application', '0002_chat_chatrecord_workflowversion_and_more'), - ] - - operations = [ - migrations.AddField( - model_name='applicationaccesstoken', - name='show_exec', - field=models.BooleanField(default=False, verbose_name='是否显示执行详情'), - ), - migrations.AddField( - model_name='chat', - name='client_type', - field=models.CharField(choices=[('ANONYMOUS_USER', '匿名用户'), ('CHAT_USER', '对话用户'), ('SYSTEM_API_KEY', '系统API_KEY'), ('APPLICATION_API_KEY', '应用API_KEY')], default='ANONYMOUS_USER', max_length=64, verbose_name='客户端类型'), - ), - migrations.AlterField( - model_name='chat', - name='id', - field=models.UUIDField(default=uuid.UUID('019745bd-c430-7760-b886-638356133c4b'), editable=False, primary_key=True, serialize=False, verbose_name='主键id'), - ), - migrations.AlterField( - model_name='chat', - name='is_deleted', - field=models.BooleanField(default=False, verbose_name='逻辑删除'), - ), - migrations.CreateModel( - name='ApplicationChatClientStats', - fields=[ - ('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')), - ('update_time', models.DateTimeField(auto_now=True, verbose_name='修改时间')), - ('id', models.UUIDField(default=uuid_utils.compat.uuid7, editable=False, primary_key=True, serialize=False, verbose_name='主键id')), - ('client_id', models.UUIDField(default=uuid_utils.compat.uuid7, verbose_name='公共访问链接客户端id')), - ('client_type', models.CharField(choices=[('ANONYMOUS_USER', '匿名用户'), ('CHAT_USER', '对话用户'), ('SYSTEM_API_KEY', '系统API_KEY'), ('APPLICATION_API_KEY', '应用API_KEY')], default='ANONYMOUS_USER', max_length=64, verbose_name='客户端类型')), - ('access_num', models.IntegerField(default=0, verbose_name='访问总次数次数')), - ('intraday_access_num', models.IntegerField(default=0, verbose_name='当日访问次数')), - ('application', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='application.application', verbose_name='应用id')), - ], - options={ - 'db_table': 'application_chat_client_stats', - }, - ), - migrations.DeleteModel( - name='ApplicationPublicAccessClient', - ), - migrations.AddIndex( - model_name='applicationchatclientstats', - index=models.Index(fields=['application_id', 'client_id'], name='application_applica_f89647_idx'), - ), - ] diff --git a/apps/application/migrations/0004_remove_applicationchatclientstats_application_applica_f89647_idx_and_more.py b/apps/application/migrations/0004_remove_applicationchatclientstats_application_applica_f89647_idx_and_more.py deleted file mode 100644 index c9346dcbe..000000000 --- a/apps/application/migrations/0004_remove_applicationchatclientstats_application_applica_f89647_idx_and_more.py +++ /dev/null @@ -1,56 +0,0 @@ -# Generated by Django 5.2 on 2025-06-09 05:55 - -import uuid -import uuid_utils.compat -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('application', '0003_applicationaccesstoken_show_exec_chat_client_type_and_more'), - ] - - operations = [ - migrations.RemoveIndex( - model_name='applicationchatclientstats', - name='application_applica_f89647_idx', - ), - migrations.RenameField( - model_name='chat', - old_name='client_id', - new_name='chat_user_id', - ), - migrations.RenameField( - model_name='chat', - old_name='client_type', - new_name='chat_user_type', - ), - migrations.RemoveField( - model_name='applicationchatclientstats', - name='client_id', - ), - migrations.RemoveField( - model_name='applicationchatclientstats', - name='client_type', - ), - migrations.AddField( - model_name='applicationchatclientstats', - name='chat_user_id', - field=models.UUIDField(default=uuid_utils.compat.uuid7, verbose_name='对话用户id'), - ), - migrations.AddField( - model_name='applicationchatclientstats', - name='chat_user_type', - field=models.CharField(choices=[('ANONYMOUS_USER', '匿名用户'), ('CHAT_USER', '对话用户'), ('SYSTEM_API_KEY', '系统API_KEY'), ('APPLICATION_API_KEY', '应用API_KEY')], default='ANONYMOUS_USER', max_length=64, verbose_name='对话用户类型'), - ), - migrations.AlterField( - model_name='chat', - name='id', - field=models.UUIDField(default=uuid.UUID('01975341-b4e8-7d52-913b-1bb67d7d8107'), editable=False, primary_key=True, serialize=False, verbose_name='主键id'), - ), - migrations.AddIndex( - model_name='applicationchatclientstats', - index=models.Index(fields=['application_id', 'chat_user_id'], name='application_applica_23b4d2_idx'), - ), - ] diff --git a/apps/application/migrations/0005_rename_applicationchatclientstats_applicationchatuserstats_and_more.py b/apps/application/migrations/0005_rename_applicationchatclientstats_applicationchatuserstats_and_more.py deleted file mode 100644 index 9962ee48b..000000000 --- a/apps/application/migrations/0005_rename_applicationchatclientstats_applicationchatuserstats_and_more.py +++ /dev/null @@ -1,32 +0,0 @@ -# Generated by Django 5.2 on 2025-06-09 07:31 - -import uuid -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('application', '0004_remove_applicationchatclientstats_application_applica_f89647_idx_and_more'), - ] - - operations = [ - migrations.RenameModel( - old_name='ApplicationChatClientStats', - new_name='ApplicationChatUserStats', - ), - migrations.RenameIndex( - model_name='applicationchatuserstats', - new_name='application_applica_1652ba_idx', - old_name='application_applica_23b4d2_idx', - ), - migrations.AlterField( - model_name='chat', - name='id', - field=models.UUIDField(default=uuid.UUID('01975399-efa5-7dc3-8f97-edc67332ed24'), editable=False, primary_key=True, serialize=False, verbose_name='主键id'), - ), - migrations.AlterModelTable( - name='applicationchatuserstats', - table='application_chat_user_stats', - ), - ] diff --git a/apps/common/cache_data/__init__.py b/apps/common/cache_data/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/apps/common/encoder/__init__.py b/apps/common/encoder/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/apps/common/field/__init__.py b/apps/common/field/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/apps/common/log/__init__.py b/apps/common/log/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/apps/knowledge/migrations/0001_initial.py b/apps/knowledge/migrations/0001_initial.py index 226f83ff7..094cfff66 100644 --- a/apps/knowledge/migrations/0001_initial.py +++ b/apps/knowledge/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 5.2.1 on 2025-05-27 06:42 +# Generated by Django 5.2.3 on 2025-06-23 02:14 import django.contrib.postgres.search import django.db.models.deletion @@ -21,7 +21,7 @@ class Migration(migrations.Migration): dependencies = [ ('models_provider', '0001_initial'), - ('users', '0002_alter_user_nick_name'), + ('users', '0001_initial'), ] operations = [ @@ -34,7 +34,7 @@ class Migration(migrations.Migration): ('file_name', models.CharField(default='', max_length=256, verbose_name='文件名称')), ('file_size', models.IntegerField(default=0, verbose_name='文件大小')), ('sha256_hash', models.CharField(default='', verbose_name='文件sha256_hash标识')), - ('source_type', models.CharField(choices=[('KNOWLEDGE', 'Knowledge'), ('APPLICATION', 'Application'), ('TEMPORARY_30_MINUTE', 'Temporary 30 Minute'), ('TEMPORARY_100_MINUTE', 'Temporary 120 Minute'), ('TEMPORARY_1_DAY', 'Temporary 1 Day')], default='TEMPORARY_100_MINUTE', verbose_name='资源类型')), + ('source_type', models.CharField(choices=[('KNOWLEDGE', 'Knowledge'), ('APPLICATION', 'Application'), ('TOOL', 'Tool'), ('DOCUMENT', 'Document'), ('TEMPORARY_30_MINUTE', 'Temporary 30 Minute'), ('TEMPORARY_100_MINUTE', 'Temporary 120 Minute'), ('TEMPORARY_1_DAY', 'Temporary 1 Day')], default='TEMPORARY_100_MINUTE', verbose_name='资源类型')), ('source_id', models.CharField(default='TEMPORARY_100_MINUTE', verbose_name='资源id')), ('loid', models.IntegerField(verbose_name='loid')), ('meta', models.JSONField(default=dict, verbose_name='文件关联数据')), @@ -55,6 +55,7 @@ class Migration(migrations.Migration): ('type', models.IntegerField(choices=[(0, '通用类型'), (1, 'web站点类型'), (2, '飞书类型'), (3, '语雀类型')], default=0, verbose_name='类型')), ('scope', models.CharField(choices=[('SHARED', '共享'), ('WORKSPACE', '工作空间可用')], default='WORKSPACE', max_length=20, verbose_name='可用范围')), ('file_size_limit', models.IntegerField(default=100, verbose_name='文件大小限制')), + ('file_count_limit', models.IntegerField(default=50, verbose_name='文件数量限制')), ('meta', models.JSONField(default=dict, verbose_name='元数据')), ('embedding_model', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to='models_provider.model', verbose_name='向量模型')), ('user', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to='users.user', verbose_name='所属用户')), @@ -121,6 +122,7 @@ class Migration(migrations.Migration): ('status_meta', models.JSONField(default=knowledge.models.knowledge.default_status_meta, verbose_name='状态数据')), ('hit_num', models.IntegerField(default=0, verbose_name='命中次数')), ('is_active', models.BooleanField(default=True)), + ('position', models.IntegerField(db_index=True, default=0, verbose_name='段落顺序')), ('document', models.ForeignKey(db_constraint=False, on_delete=django.db.models.deletion.DO_NOTHING, to='knowledge.document')), ('knowledge', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to='knowledge.knowledge')), ], @@ -166,7 +168,7 @@ class Migration(migrations.Migration): ('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')), ('update_time', models.DateTimeField(auto_now=True, verbose_name='修改时间')), ('id', models.UUIDField(default=uuid_utils.compat.uuid7, editable=False, primary_key=True, serialize=False, verbose_name='主键id')), - ('document', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to='knowledge.document')), + ('document', models.ForeignKey(db_constraint=False, on_delete=django.db.models.deletion.DO_NOTHING, to='knowledge.document')), ('knowledge', models.ForeignKey(db_constraint=False, on_delete=django.db.models.deletion.DO_NOTHING, to='knowledge.knowledge')), ('paragraph', models.ForeignKey(db_constraint=False, on_delete=django.db.models.deletion.DO_NOTHING, to='knowledge.paragraph')), ('problem', models.ForeignKey(db_constraint=False, on_delete=django.db.models.deletion.DO_NOTHING, to='knowledge.problem')), diff --git a/apps/knowledge/migrations/0002_alter_document_status_alter_file_source_type_and_more.py b/apps/knowledge/migrations/0002_alter_document_status_alter_file_source_type_and_more.py deleted file mode 100644 index cde467cfc..000000000 --- a/apps/knowledge/migrations/0002_alter_document_status_alter_file_source_type_and_more.py +++ /dev/null @@ -1,29 +0,0 @@ -# Generated by Django 5.2 on 2025-06-04 11:57 - -import knowledge.models.knowledge -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('knowledge', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='document', - name='status', - field=models.CharField(default=knowledge.models.knowledge.Status.__str__, max_length=20, verbose_name='状态'), - ), - migrations.AlterField( - model_name='file', - name='source_type', - field=models.CharField(choices=[('KNOWLEDGE', 'Knowledge'), ('APPLICATION', 'Application'), ('TOOL', 'Tool'), ('DOCUMENT', 'Document'), ('TEMPORARY_30_MINUTE', 'Temporary 30 Minute'), ('TEMPORARY_100_MINUTE', 'Temporary 120 Minute'), ('TEMPORARY_1_DAY', 'Temporary 1 Day')], default='TEMPORARY_100_MINUTE', verbose_name='资源类型'), - ), - migrations.AlterField( - model_name='paragraph', - name='status', - field=models.CharField(default=knowledge.models.knowledge.Status.__str__, max_length=20, verbose_name='状态'), - ), - ] diff --git a/apps/knowledge/migrations/0003_knowledge_file_count_limit_alter_document_status_and_more.py b/apps/knowledge/migrations/0003_knowledge_file_count_limit_alter_document_status_and_more.py deleted file mode 100644 index 5d3276900..000000000 --- a/apps/knowledge/migrations/0003_knowledge_file_count_limit_alter_document_status_and_more.py +++ /dev/null @@ -1,29 +0,0 @@ -# Generated by Django 5.2.1 on 2025-06-06 03:59 - -import knowledge.models.knowledge -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('knowledge', '0002_alter_document_status_alter_file_source_type_and_more'), - ] - - operations = [ - migrations.AddField( - model_name='knowledge', - name='file_count_limit', - field=models.IntegerField(default=50, verbose_name='文件数量限制'), - ), - migrations.AlterField( - model_name='document', - name='status', - field=models.CharField(default=knowledge.models.knowledge.Status.__str__, max_length=20, verbose_name='状态'), - ), - migrations.AlterField( - model_name='paragraph', - name='status', - field=models.CharField(default=knowledge.models.knowledge.Status.__str__, max_length=20, verbose_name='状态'), - ), - ] diff --git a/apps/knowledge/migrations/0004_alter_document_status_alter_paragraph_status_and_more.py b/apps/knowledge/migrations/0004_alter_document_status_alter_paragraph_status_and_more.py deleted file mode 100644 index cdf8d5e99..000000000 --- a/apps/knowledge/migrations/0004_alter_document_status_alter_paragraph_status_and_more.py +++ /dev/null @@ -1,30 +0,0 @@ -# Generated by Django 5.2.1 on 2025-06-09 11:09 - -import django.db.models.deletion -import knowledge.models.knowledge -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('knowledge', '0003_knowledge_file_count_limit_alter_document_status_and_more'), - ] - - operations = [ - migrations.AlterField( - model_name='document', - name='status', - field=models.CharField(default=knowledge.models.knowledge.Status.__str__, max_length=20, verbose_name='状态'), - ), - migrations.AlterField( - model_name='paragraph', - name='status', - field=models.CharField(default=knowledge.models.knowledge.Status.__str__, max_length=20, verbose_name='状态'), - ), - migrations.AlterField( - model_name='problemparagraphmapping', - name='document', - field=models.ForeignKey(db_constraint=False, on_delete=django.db.models.deletion.DO_NOTHING, to='knowledge.document'), - ), - ] diff --git a/apps/knowledge/migrations/0005_alter_paragraph_options_paragraph_order_and_more.py b/apps/knowledge/migrations/0005_alter_paragraph_options_paragraph_order_and_more.py deleted file mode 100644 index b75d41d6d..000000000 --- a/apps/knowledge/migrations/0005_alter_paragraph_options_paragraph_order_and_more.py +++ /dev/null @@ -1,29 +0,0 @@ -# Generated by Django 5.2.3 on 2025-06-17 03:11 - -import knowledge.models.knowledge -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('knowledge', '0004_alter_document_status_alter_paragraph_status_and_more'), - ] - - operations = [ - migrations.AddField( - model_name='paragraph', - name='position', - field=models.IntegerField(db_index=True, default=0, verbose_name='段落顺序'), - ), - migrations.AlterField( - model_name='document', - name='status', - field=models.CharField(default=knowledge.models.knowledge.Status.__str__, max_length=20, verbose_name='状态'), - ), - migrations.AlterField( - model_name='paragraph', - name='status', - field=models.CharField(default=knowledge.models.knowledge.Status.__str__, max_length=20, verbose_name='状态'), - ), - ] diff --git a/apps/models_provider/migrations/0001_initial.py b/apps/models_provider/migrations/0001_initial.py index cda4794b8..a76d0f383 100644 --- a/apps/models_provider/migrations/0001_initial.py +++ b/apps/models_provider/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 5.2 on 2025-04-17 03:32 +# Generated by Django 5.2.3 on 2025-06-23 02:14 import django.db.models.deletion import uuid_utils.compat @@ -28,7 +28,7 @@ class Migration(migrations.Migration): ('credential', models.CharField(max_length=102400, verbose_name='模型认证信息')), ('meta', models.JSONField(default=dict, verbose_name='模型元数据,用于存储下载,或者错误信息')), ('model_params_form', models.JSONField(default=list, verbose_name='模型参数配置')), - ('workspace_id', models.CharField(blank=True, max_length=128, null=True, verbose_name='工作空间id')), + ('workspace_id', models.CharField(db_index=True, default='default', max_length=64, verbose_name='工作空间id')), ('user', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to='users.user', verbose_name='成员用户id')), ], options={ diff --git a/apps/models_provider/migrations/0002_alter_model_workspace_id.py b/apps/models_provider/migrations/0002_alter_model_workspace_id.py deleted file mode 100644 index 9eb485b2e..000000000 --- a/apps/models_provider/migrations/0002_alter_model_workspace_id.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 5.2.1 on 2025-06-12 08:30 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('models_provider', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='model', - name='workspace_id', - field=models.CharField(db_index=True, default='default', max_length=64, verbose_name='工作空间id'), - ), - ] diff --git a/apps/system_manage/migrations/0001_initial.py b/apps/system_manage/migrations/0001_initial.py index 099465e23..1877dd47c 100644 --- a/apps/system_manage/migrations/0001_initial.py +++ b/apps/system_manage/migrations/0001_initial.py @@ -1,6 +1,9 @@ -# Generated by Django 5.2 on 2025-04-16 11:12 +# Generated by Django 5.2.3 on 2025-06-23 02:14 +import common.encoder.encoder +import django.contrib.postgres.fields import django.db.models.deletion +import uuid import uuid_utils.compat from django.db import migrations, models @@ -15,19 +18,51 @@ class Migration(migrations.Migration): operations = [ migrations.CreateModel( - name='WorkspaceUserPermission', + name='Log', + fields=[ + ('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')), + ('update_time', models.DateTimeField(auto_now=True, verbose_name='修改时间')), + ('id', models.UUIDField(default=uuid.uuid1, editable=False, primary_key=True, serialize=False, verbose_name='主键id')), + ('menu', models.CharField(max_length=128, verbose_name='操作菜单')), + ('operate', models.CharField(max_length=128, verbose_name='操作')), + ('operation_object', models.JSONField(default=dict, encoder=common.encoder.encoder.SystemEncoder, verbose_name='操作对象')), + ('user', models.JSONField(default=dict, verbose_name='用户信息')), + ('status', models.IntegerField(verbose_name='状态')), + ('ip_address', models.CharField(max_length=128, verbose_name='ip地址')), + ('details', models.JSONField(default=dict, encoder=common.encoder.encoder.SystemEncoder, verbose_name='详情')), + ('workspace_id', models.CharField(db_index=True, default='default', max_length=64, verbose_name='工作空间id')), + ], + options={ + 'db_table': 'log', + }, + ), + migrations.CreateModel( + name='SystemSetting', + fields=[ + ('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')), + ('update_time', models.DateTimeField(auto_now=True, verbose_name='修改时间')), + ('type', models.IntegerField(choices=[(0, '邮箱'), (1, '私钥秘钥')], default=0, primary_key=True, serialize=False, verbose_name='设置类型')), + ('meta', models.JSONField(default=dict, verbose_name='配置数据')), + ], + options={ + 'db_table': 'system_setting', + }, + ), + migrations.CreateModel( + name='WorkspaceUserResourcePermission', fields=[ ('id', models.UUIDField(default=uuid_utils.compat.uuid7, editable=False, primary_key=True, serialize=False, verbose_name='主键id')), ('workspace_id', models.CharField(default='default', max_length=128, verbose_name='工作空间id')), ('auth_target_type', models.CharField(choices=[('KNOWLEDGE', '知识库'), ('APPLICATION', '应用')], default='KNOWLEDGE', max_length=128, verbose_name='授权目标')), ('target', models.UUIDField(verbose_name='知识库/应用id')), - ('is_auth', models.BooleanField(default=False, verbose_name='是否授权')), + ('auth_type', models.CharField(choices=[('ROLE', 'Role'), ('RESOURCE_PERMISSION_GROUP', 'Resource Permission Group')], db_default='ROLE', default=False, verbose_name='授权类型')), + ('permission_list', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(blank=True, choices=[('VIEW', 'View'), ('MANAGE', 'Manage'), ('ROLE', 'Role')], default='VIEW', max_length=256), default=list, size=None, verbose_name='权限列表')), ('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')), ('update_time', models.DateTimeField(auto_now=True, verbose_name='修改时间')), ('user', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to='users.user', verbose_name='工作空间下的用户')), ], options={ - 'db_table': 'workspace_user_permission', + 'db_table': 'workspace_user_resource_permission', }, ), ] diff --git a/apps/system_manage/migrations/0002_systemsetting.py b/apps/system_manage/migrations/0002_systemsetting.py deleted file mode 100644 index cba9d9854..000000000 --- a/apps/system_manage/migrations/0002_systemsetting.py +++ /dev/null @@ -1,25 +0,0 @@ -# Generated by Django 5.2 on 2025-04-17 03:14 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('system_manage', '0001_initial'), - ] - - operations = [ - migrations.CreateModel( - name='SystemSetting', - fields=[ - ('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')), - ('update_time', models.DateTimeField(auto_now=True, verbose_name='修改时间')), - ('type', models.IntegerField(choices=[(0, '邮箱'), (1, '私钥秘钥')], default=0, primary_key=True, serialize=False, verbose_name='设置类型')), - ('meta', models.JSONField(default=dict, verbose_name='配置数据')), - ], - options={ - 'db_table': 'system_setting', - }, - ), - ] diff --git a/apps/system_manage/migrations/0003_workspaceuserresourcepermission_and_more.py b/apps/system_manage/migrations/0003_workspaceuserresourcepermission_and_more.py deleted file mode 100644 index e01d2273c..000000000 --- a/apps/system_manage/migrations/0003_workspaceuserresourcepermission_and_more.py +++ /dev/null @@ -1,37 +0,0 @@ -# Generated by Django 5.2 on 2025-04-27 10:09 - -import django.contrib.postgres.fields -import django.db.models.deletion -import uuid_utils.compat -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('system_manage', '0002_systemsetting'), - ('users', '0001_initial'), - ] - - operations = [ - migrations.CreateModel( - name='WorkspaceUserResourcePermission', - fields=[ - ('id', models.UUIDField(default=uuid_utils.compat.uuid7, editable=False, primary_key=True, serialize=False, verbose_name='主键id')), - ('workspace_id', models.CharField(default='default', max_length=128, verbose_name='工作空间id')), - ('auth_target_type', models.CharField(choices=[('KNOWLEDGE', '知识库'), ('APPLICATION', '应用')], default='KNOWLEDGE', max_length=128, verbose_name='授权目标')), - ('target', models.UUIDField(verbose_name='知识库/应用id')), - ('auth_type', models.CharField(choices=[('ROLE', 'Role'), ('RESOURCE_PERMISSION_GROUP', 'Resource Permission Group')], db_default='ROLE', default=False, verbose_name='授权类型')), - ('permission_list', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(blank=True, choices=[('VIEW', 'View'), ('MANAGE', 'Manage'), ('ROLE', 'Role')], default='VIEW', max_length=256), default=list, size=None, verbose_name='权限列表')), - ('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')), - ('update_time', models.DateTimeField(auto_now=True, verbose_name='修改时间')), - ('user', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to='users.user', verbose_name='工作空间下的用户')), - ], - options={ - 'db_table': 'workspace_user_resource_permission', - }, - ), - migrations.DeleteModel( - name='WorkspaceUserPermission', - ), - ] diff --git a/apps/system_manage/migrations/0004_log.py b/apps/system_manage/migrations/0004_log.py deleted file mode 100644 index 376286648..000000000 --- a/apps/system_manage/migrations/0004_log.py +++ /dev/null @@ -1,33 +0,0 @@ -# Generated by Django 5.2 on 2025-06-04 06:17 - -import common.encoder.encoder -import uuid -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('system_manage', '0003_workspaceuserresourcepermission_and_more'), - ] - - operations = [ - migrations.CreateModel( - name='Log', - fields=[ - ('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')), - ('update_time', models.DateTimeField(auto_now=True, verbose_name='修改时间')), - ('id', models.UUIDField(default=uuid.uuid1, editable=False, primary_key=True, serialize=False, verbose_name='主键id')), - ('menu', models.CharField(max_length=128, verbose_name='操作菜单')), - ('operate', models.CharField(max_length=128, verbose_name='操作')), - ('operation_object', models.JSONField(default=dict, encoder=common.encoder.encoder.SystemEncoder, verbose_name='操作对象')), - ('user', models.JSONField(default=dict, verbose_name='用户信息')), - ('status', models.IntegerField(verbose_name='状态')), - ('ip_address', models.CharField(max_length=128, verbose_name='ip地址')), - ('details', models.JSONField(default=dict, encoder=common.encoder.encoder.SystemEncoder, verbose_name='详情')), - ], - options={ - 'db_table': 'log', - }, - ), - ] diff --git a/apps/tools/migrations/0001_initial.py b/apps/tools/migrations/0001_initial.py index 993a92303..df3f25cc0 100644 --- a/apps/tools/migrations/0001_initial.py +++ b/apps/tools/migrations/0001_initial.py @@ -1,11 +1,13 @@ -# Generated by Django 5.2 on 2025-05-15 04:04 +# Generated by Django 5.2.3 on 2025-06-23 02:14 +import os import django.db.models.deletion import mptt.fields import uuid_utils.compat from django.db import migrations, models - +from common.utils.common import get_file_content +from maxkb.const import PROJECT_DIR from tools.models import ToolFolder @@ -62,6 +64,7 @@ class Migration(migrations.Migration): ('template_id', models.UUIDField(default=None, null=True, verbose_name='模版id')), ('workspace_id', models.CharField(db_index=True, default='default', max_length=64, verbose_name='工作空间id')), ('init_params', models.CharField(max_length=102400, null=True, verbose_name='初始化参数')), + ('label', models.CharField(max_length=128, null=True, verbose_name='标签')), ('user', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to='users.user', verbose_name='用户id')), ('folder', models.ForeignKey(default='default', on_delete=django.db.models.deletion.DO_NOTHING, to='tools.toolfolder', verbose_name='文件夹id')), ], @@ -69,4 +72,5 @@ class Migration(migrations.Migration): 'db_table': 'tool', }, ), + migrations.RunSQL(get_file_content(os.path.join(PROJECT_DIR, "apps", "tools", 'migrations', 'internal_tool.sql'))) ] diff --git a/apps/tools/migrations/0002_tool_label.py b/apps/tools/migrations/0002_tool_label.py deleted file mode 100644 index fc1750ab8..000000000 --- a/apps/tools/migrations/0002_tool_label.py +++ /dev/null @@ -1,21 +0,0 @@ -# Generated by Django 5.2.3 on 2025-06-20 03:43 -import os - -from django.db import migrations, models -from common.utils.common import get_file_content -from maxkb.conf import PROJECT_DIR - -class Migration(migrations.Migration): - - dependencies = [ - ('tools', '0001_initial'), - ] - - operations = [ - migrations.AddField( - model_name='tool', - name='label', - field=models.CharField(max_length=128, null=True, verbose_name='标签'), - ), - # migrations.RunSQL(get_file_content(os.path.join(PROJECT_DIR, "apps", "tools", 'migrations', 'internal_tool.sql'))) - ] diff --git a/apps/users/migrations/0001_initial.py b/apps/users/migrations/0001_initial.py index 51fa11560..82b79c173 100644 --- a/apps/users/migrations/0001_initial.py +++ b/apps/users/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 5.2 on 2025-04-14 02:22 +# Generated by Django 5.2.3 on 2025-06-23 02:14 import uuid_utils.compat from django.db import migrations, models @@ -28,11 +28,10 @@ class Migration(migrations.Migration): migrations.CreateModel( name='User', fields=[ - ('id', models.UUIDField(default=uuid_utils.compat.uuid7, editable=False, primary_key=True, serialize=False, - verbose_name='主键id')), + ('id', models.UUIDField(default=uuid_utils.compat.uuid7, editable=False, primary_key=True, serialize=False, verbose_name='主键id')), ('email', models.EmailField(blank=True, max_length=254, null=True, unique=True, verbose_name='邮箱')), ('phone', models.CharField(default='', max_length=20, verbose_name='电话')), - ('nick_name', models.CharField(default='', max_length=150, verbose_name='昵称')), + ('nick_name', models.CharField(max_length=150, unique=True, verbose_name='昵称')), ('username', models.CharField(max_length=150, unique=True, verbose_name='用户名')), ('password', models.CharField(max_length=150, verbose_name='密码')), ('role', models.CharField(max_length=150, verbose_name='角色')), diff --git a/apps/users/migrations/0002_alter_user_nick_name.py b/apps/users/migrations/0002_alter_user_nick_name.py deleted file mode 100644 index bb73db3c4..000000000 --- a/apps/users/migrations/0002_alter_user_nick_name.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 5.2 on 2025-05-27 02:15 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('users', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='nick_name', - field=models.CharField(max_length=150, unique=True, verbose_name='昵称'), - ), - ]